diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/SelectionParseTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/SelectionParseTest.java index 8d31d2b8f70..da0bdb3c777 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/SelectionParseTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/SelectionParseTest.java @@ -406,4 +406,38 @@ public class SelectionParseTest extends SelectionParseBaseTest { assertEquals( ((IASTMethod)node).getName(), "ABC" ); //$NON-NLS-1$ assertTrue( ((IASTMethod)node).isConstructor() ); } + + public void testBug72372() throws Exception{ + Writer writer = new StringWriter(); + writer.write("namespace B { \n"); //$NON-NLS-1$ + writer.write(" class SD_02 { void f_SD(); }; \n"); //$NON-NLS-1$ + writer.write("} \n"); //$NON-NLS-1$ + writer.write("using namespace B; \n"); //$NON-NLS-1$ + writer.write("void SD_02::f_SD(){} \n"); //$NON-NLS-1$ + + String code = writer.toString(); + int startIndex = code.indexOf( ":f_SD" ); //$NON-NLS-1$ + IASTNode node = parse( code, startIndex + 1, startIndex + 5 ); + assertTrue( node instanceof IASTMethod ); + assertEquals( ((IASTMethod)node).getName(), "f_SD" ); //$NON-NLS-1$ + } + public void testBug72372_2() throws Exception{ + Writer writer = new StringWriter(); + writer.write("namespace A { \n"); //$NON-NLS-1$ + writer.write(" namespace B { \n"); //$NON-NLS-1$ + writer.write(" void f_SD(); \n"); //$NON-NLS-1$ + writer.write(" } \n"); //$NON-NLS-1$ + writer.write("} \n"); //$NON-NLS-1$ + writer.write("namespace C { \n"); //$NON-NLS-1$ + writer.write(" using namespace A; \n"); //$NON-NLS-1$ + writer.write("} \n"); //$NON-NLS-1$ + writer.write("void C::B::f_SD(){} \n"); //$NON-NLS-1$ + + String code = writer.toString(); + int startIndex = code.indexOf( ":f_SD" ); //$NON-NLS-1$ + IASTNode node = parse( code, startIndex + 1, startIndex + 5 ); + assertTrue( node instanceof IASTFunction ); + assertEquals( ((IASTFunction)node).getName(), "f_SD" ); //$NON-NLS-1$ + } } + diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java index b9c758937cd..3b166f51829 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java @@ -2181,7 +2181,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto } catch (ParserSymbolTableException e) { - handleProblem( e.createProblemID(), name.toCharArray()); + handleProblem( e.createProblemID(), name.toCharArray(), nameOffset, nameEndOffset, nameLine, true); } } else { symbol = functionDeclaration; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/ContainerSymbol.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/ContainerSymbol.java index cfca9864074..ca996190617 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/ContainerSymbol.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/ContainerSymbol.java @@ -590,15 +590,11 @@ public class ContainerSymbol extends BasicSymbol implements IContainerSymbol { final private TypeFilter typeFilter = filter; }; - data.foundItems = ParserSymbolTable.lookupInContained( data, inSymbol ); + ParserSymbolTable.lookup( data, inSymbol ); if( data.foundItems != null ){ foundSymbol = getSymbolTable().resolveAmbiguities( data ); } - - if( foundSymbol == null && inSymbol.getContainingSymbol() != null ){ - foundSymbol = lookupNestedNameSpecifier( name, inSymbol.getContainingSymbol() ); - } if( foundSymbol instanceof IContainerSymbol ) return (IContainerSymbol) foundSymbol;