From ad34c22138f073bd340f1fcd9fa91348abda3365 Mon Sep 17 00:00:00 2001 From: Andrew Niefer Date: Fri, 11 Feb 2005 19:35:15 +0000 Subject: [PATCH] fix bug 84703 --- .../core/parser/tests/ast2/AST2CPPTests.java | 25 +++++++++++++++++++ .../core/dom/parser/cpp/CPPVisitor.java | 2 ++ 2 files changed, 27 insertions(+) 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 1b97331048a..43483d669aa 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 @@ -1400,5 +1400,30 @@ public class AST2CPPTests extends AST2BaseTest { IProblemBinding problem = (IProblemBinding) col.getName(12).resolveBinding(); assertEquals( IProblemBinding.SEMANTIC_AMBIGUOUS_LOOKUP, problem.getID() ); } + + public void testBug84703() throws Exception { + StringBuffer buffer = new StringBuffer(); + buffer.append("struct B { \n" ); //$NON-NLS-1$ + buffer.append(" void mutate(); \n" ); //$NON-NLS-1$ + buffer.append("}; \n" ); //$NON-NLS-1$ + buffer.append("void g() { \n" ); //$NON-NLS-1$ + buffer.append(" B* pb = new B(); \n" ); //$NON-NLS-1$ + buffer.append(" pb->mutate(); \n" ); //$NON-NLS-1$ + buffer.append("} \n" ); //$NON-NLS-1$ + + IASTTranslationUnit tu = parse( buffer.toString(), ParserLanguage.CPP ); + CPPNameCollector col = new CPPNameCollector(); + CPPVisitor.visitTranslationUnit(tu, col); + + assertEquals( 8, col.size() ); + + ICPPMethod mutate = (ICPPMethod) col.getName(1).resolveBinding(); + ICPPClassType B = (ICPPClassType) col.getName(0).resolveBinding(); + IVariable pb = (IVariable) col.getName(4).resolveBinding(); + + assertInstances( col, pb, 2 ); + assertInstances( col, mutate, 2 ); + assertInstances( col, B, 2 ); + } } 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 8eb2745a8ed..4cb002e85a6 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 @@ -800,6 +800,8 @@ public class CPPVisitor { if( name instanceof ICPPASTQualifiedName ) return PROCESS_CONTINUE; ASTNodeProperty prop = name.getPropertyInParent(); + if( prop == ICPPASTQualifiedName.SEGMENT_NAME ) + prop = name.getParent().getPropertyInParent(); switch( kind ){ case KIND_LABEL: