diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java index cdddab7e331..6e28a8769b3 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java @@ -4404,4 +4404,22 @@ public class AST2CPPTests extends AST2BaseTest { assertSame( state, col.getName(7).resolveBinding() ); assertSame( state, col.getName(9).resolveBinding() ); } + + public void testTypedefQualified() throws Exception { + StringBuffer buffer = new StringBuffer(); + buffer.append("class _A { \n"); //$NON-NLS-1$ + buffer.append(" static int i; \n"); //$NON-NLS-1$ + buffer.append("}; \n"); //$NON-NLS-1$ + buffer.append("typedef _A A; \n"); //$NON-NLS-1$ + buffer.append("void f(){ \n"); //$NON-NLS-1$ + buffer.append(" A::i++; \n"); //$NON-NLS-1$ + buffer.append("} \n"); //$NON-NLS-1$ + + IASTTranslationUnit tu = parse( buffer.toString(), ParserLanguage.CPP ); + CPPNameCollector col = new CPPNameCollector(); + tu.accept(col); + + ICPPField i = (ICPPField) col.getName(1).resolveBinding(); + assertSame( i, col.getName(7).resolveBinding() ); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPVisitor.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPVisitor.java index 8749780e9b1..c8bd6512b21 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPVisitor.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPVisitor.java @@ -762,6 +762,12 @@ public class CPPVisitor { } if( i > 0 ){ IBinding binding = names[i - 1].resolveBinding(); + while( binding instanceof ITypedef ){ + IType t = ((ITypedef)binding).getType(); + if( t instanceof IBinding ) + binding = (IBinding) t; + else break; + } if( binding instanceof ICPPClassType ){ return ((ICPPClassType)binding).getCompositeScope(); } else if( binding instanceof ICPPNamespace ){