mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-01 06:05:24 +02:00
fix bug 72372 : [Parser] ContextSearch declarations on a function defn: op unavailable
lookupNestedNameSpecifier didn't consider using directives.
This commit is contained in:
parent
f6bae1949b
commit
4ab98b6ee9
3 changed files with 36 additions and 6 deletions
|
@ -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$
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Reference in a new issue