diff --git a/core/org.eclipse.cdt.core.tests/ChangeLog b/core/org.eclipse.cdt.core.tests/ChangeLog index cec9eca2486..20cf2ec3705 100644 --- a/core/org.eclipse.cdt.core.tests/ChangeLog +++ b/core/org.eclipse.cdt.core.tests/ChangeLog @@ -1,3 +1,8 @@ +2003-12-15 Andrew Niefer + added ContextualParseTest.testCompletionLookup_Unqualified + added ContextualParseTest.testCompletionLookup_Qualified + added ContextualParseTest.testCompletionLookup_Pointer + 2003-12-12 John Camelon Updated testBaseCase_SimpleDeclaration() for keyword assertions. diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseBaseTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseBaseTest.java index 42c8a3b9137..269991a3dd8 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseBaseTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseBaseTest.java @@ -52,6 +52,7 @@ import org.eclipse.cdt.core.parser.ast.IASTMethod; import org.eclipse.cdt.core.parser.ast.IASTMethodReference; import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition; import org.eclipse.cdt.core.parser.ast.IASTNamespaceReference; +import org.eclipse.cdt.core.parser.ast.IASTNode; import org.eclipse.cdt.core.parser.ast.IASTParameterReference; import org.eclipse.cdt.core.parser.ast.IASTQualifiedNameElement; import org.eclipse.cdt.core.parser.ast.IASTReference; @@ -116,10 +117,11 @@ public class CompleteParseBaseTest extends TestCase return scope; } + /* (non-Javadoc) - * @see org.eclipse.cdt.core.parser.ast.IASTNode#lookup(java.lang.String, org.eclipse.cdt.core.parser.ast.IASTNode.LookupKind) + * @see org.eclipse.cdt.core.parser.ast.IASTNode#lookup(java.lang.String, org.eclipse.cdt.core.parser.ast.IASTNode.LookupKind, org.eclipse.cdt.core.parser.ast.IASTNode) */ - public LookupResult lookup(String prefix, LookupKind kind) { + public LookupResult lookup(String prefix, LookupKind kind, IASTNode context) throws LookupException { // TODO Auto-generated method stub return null; } diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ContextualParseTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ContextualParseTest.java index c59cd2fe9e6..da5086994bb 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ContextualParseTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ContextualParseTest.java @@ -18,6 +18,12 @@ import org.eclipse.cdt.core.parser.ParserMode; import org.eclipse.cdt.core.parser.ScannerInfo; import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier; import org.eclipse.cdt.core.parser.ast.IASTCompletionNode; +import org.eclipse.cdt.core.parser.ast.IASTField; +import org.eclipse.cdt.core.parser.ast.IASTFunction; +import org.eclipse.cdt.core.parser.ast.IASTMethod; +import org.eclipse.cdt.core.parser.ast.IASTNode; +import org.eclipse.cdt.core.parser.ast.IASTVariable; +import org.eclipse.cdt.core.parser.ast.IASTNode.LookupResult; import org.eclipse.cdt.internal.core.parser.ParserLogService; /** @@ -107,4 +113,132 @@ public class ContextualParseTest extends CompleteParseBaseTest { keywords = node.getKeywords(); assertFalse( keywords.hasNext() ); } + + public void testCompletionLookup_Unqualified() throws Exception + { + StringWriter writer = new StringWriter(); + writer.write( "int aVar; " ); + writer.write( "void foo( ) { " ); + writer.write( " int anotherVar; " ); + writer.write( " a " ); + writer.write( "} " ); + + String code = writer.toString(); + int index = code.indexOf( " a " ); + + IASTCompletionNode node = parse( code, index + 2 ); + assertNotNull( node ); + + String prefix = node.getCompletionPrefix(); + assertNotNull( prefix ); + assertTrue( node.getCompletionScope() instanceof IASTFunction ); + assertEquals( prefix, "a" ); + assertEquals( node.getCompletionKind(), IASTCompletionNode.CompletionKind.VARIABLE_TYPE ); + + + LookupResult result = node.getCompletionScope().lookup( prefix, IASTNode.LookupKind.ALL, node.getCompletionContext() ); + assertEquals( result.getPrefix(), prefix ); + + Iterator iter = result.getNodes(); + + IASTVariable anotherVar = (IASTVariable) iter.next(); + IASTVariable aVar = (IASTVariable) iter.next(); + + assertFalse( iter.hasNext() ); + assertEquals( anotherVar.getName(), "anotherVar" ); + assertEquals( aVar.getName(), "aVar" ); + } + + public void testCompletionLookup_Qualified() throws Exception + { + StringWriter writer = new StringWriter(); + writer.write( "int aVar; " ); + writer.write( "struct D{ " ); + writer.write( " int aField; " ); + writer.write( " void aMethod(); " ); + writer.write( "}; " ); + writer.write( "void foo(){" ); + writer.write( " D d; " ); + writer.write( " d.a " ); + writer.write( "}\n" ); + + String code = writer.toString(); + int index = code.indexOf( "d.a" ); + + IASTCompletionNode node = parse( code, index + 3 ); + assertNotNull( node ); + + String prefix = node.getCompletionPrefix(); + assertNotNull( prefix ); + assertEquals( prefix, "a" ); + + assertTrue( node.getCompletionScope() instanceof IASTFunction ); + assertEquals( node.getCompletionKind(), IASTCompletionNode.CompletionKind.MEMBER_REFERENCE ); + assertNotNull( node.getCompletionContext() ); + assertTrue( node.getCompletionContext() instanceof IASTClassSpecifier ); + + LookupResult result = node.getCompletionScope().lookup( prefix, IASTNode.LookupKind.ALL, node.getCompletionContext() ); + assertEquals( result.getPrefix(), prefix ); + + Iterator iter = result.getNodes(); + + IASTMethod aMethod = null; + IASTField aField = null; + + //we can't currently predict the order in this case + for( int i = 1; i <= 2; i++ ){ + IASTNode astNode = (IASTNode) iter.next(); + if( astNode instanceof IASTMethod ){ + aMethod = (IASTMethod) astNode; + } else{ + aField = (IASTField) astNode; + } + } + + assertFalse( iter.hasNext() ); + + assertEquals( aMethod.getName(), "aMethod" ); + assertEquals( aField.getName(), "aField" ); + } + + public void testCompletionLookup_Pointer() throws Exception{ + StringWriter writer = new StringWriter(); + writer.write( "class A {" ); + writer.write( " public: void aPublicBaseMethod();" ); + writer.write( " private: void aPrivateBaseMethod();" ); + writer.write( "};" ); + writer.write( "class B : public A {" ); + writer.write( " public: void aMethod();" ); + writer.write( "};" ); + writer.write( "void foo(){" ); + writer.write( " B * b = new B();" ); + writer.write( " b->a \n" ); + + String code = writer.toString(); + int index = code.indexOf( "b->a" ); + + IASTCompletionNode node = parse( code, index + 4 ); + + assertNotNull( node ); + + String prefix = node.getCompletionPrefix(); + assertEquals( prefix, "a" ); + + assertTrue( node.getCompletionScope() instanceof IASTFunction ); + assertEquals( node.getCompletionKind(), IASTCompletionNode.CompletionKind.MEMBER_REFERENCE ); + assertNotNull( node.getCompletionContext() ); + assertTrue( node.getCompletionContext() instanceof IASTClassSpecifier ); + + LookupResult result = node.getCompletionScope().lookup( prefix, IASTNode.LookupKind.METHODS, node.getCompletionContext() ); + assertEquals( result.getPrefix(), prefix ); + + Iterator iter = result.getNodes(); + IASTMethod method = (IASTMethod) iter.next(); + IASTMethod baseMethod = (IASTMethod) iter.next(); + + assertFalse( iter.hasNext() ); + + assertEquals( method.getName(), "aMethod" ); + assertEquals( baseMethod.getName(), "aPublicBaseMethod" ); + } } diff --git a/core/org.eclipse.cdt.core/parser/ChangeLog-parser b/core/org.eclipse.cdt.core/parser/ChangeLog-parser index f02e5ce67ed..2b61c6617da 100644 --- a/core/org.eclipse.cdt.core/parser/ChangeLog-parser +++ b/core/org.eclipse.cdt.core/parser/ChangeLog-parser @@ -1,3 +1,9 @@ +2003-12-15 Andrew Niefer + Changed IASTNode.lookup to take the context as a parameter + created ASTNode to implement IASTNode, ASTSymbolOwner extends it. + Set Completion Scope for statements + Set Completion context for . and -> expressions + 2003-12-15 Hoda Amer Fixed [Bug 47234] new ParserMode required for a better CModel : - Added a core plugin preference to build the CModel in Structural mode diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTFactory.java index b46ebd72f7e..4c3f4322833 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTFactory.java @@ -15,6 +15,7 @@ import org.eclipse.cdt.core.parser.IToken; import org.eclipse.cdt.core.parser.ITokenDuple; import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier.ClassNameType; import org.eclipse.cdt.core.parser.ast.IASTExpression.IASTNewExpressionDescriptor; +import org.eclipse.cdt.core.parser.ast.IASTExpression.Kind; /** * @author jcamelon * @@ -232,5 +233,11 @@ public interface IASTFactory /** * @param astClassSpecifier */ - public void signalEndOfClassSpecifier(IASTClassSpecifier astClassSpecifier); + public void signalEndOfClassSpecifier(IASTClassSpecifier astClassSpecifier); + + /** + * @param kind + * @param firstExpression + */ + public IASTNode getCompletionContext(Kind kind, IASTExpression expression); } \ No newline at end of file diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTNode.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTNode.java index 2e260e4e588..b51c79ab46f 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTNode.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTNode.java @@ -58,6 +58,6 @@ public interface IASTNode { public Iterator getNodes(); } - public LookupResult lookup( String prefix, LookupKind kind ) throws LookupException; + public LookupResult lookup( String prefix, LookupKind kind, IASTNode context) throws LookupException; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java index fe107d13a8f..c1e3316cca0 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java @@ -2891,7 +2891,8 @@ public abstract class Parser implements IParser */ protected void statement(IASTScope scope) throws EndOfFileException, BacktrackException { - + setCurrentScope(scope); + switch (LT(1)) { case IToken.t_case : @@ -3028,6 +3029,11 @@ public abstract class Parser implements IParser // declarationStatement declaration(scope, null); } + + if( scope instanceof IASTScopedElement ) + setCurrentScope( ((IASTScopedElement)scope).getOwnerScope() ); + else + setCurrentScope( null ); } protected void catchHandlerSequence(IASTScope scope) throws EndOfFileException, BacktrackException @@ -4719,11 +4725,20 @@ public abstract class Parser implements IParser case IToken.tDOT : // member access consume(IToken.tDOT); + if (LT(1) == IToken.t_template) { consume(IToken.t_template); isTemplate = true; } + + IASTNode context = astFactory.getCompletionContext( (isTemplate + ? IASTExpression.Kind.POSTFIX_DOT_TEMPL_IDEXPRESS + : IASTExpression.Kind.POSTFIX_DOT_IDEXPRESSION), + firstExpression ); + setCompletionContext( context ); + setCompletionKind( IASTCompletionNode.CompletionKind.MEMBER_REFERENCE ); + secondExpression = primaryExpression(scope); try { @@ -4746,6 +4761,9 @@ public abstract class Parser implements IParser } catch (Exception e) { throw backtrack; + } finally + { + setCompletionContext( null ); } break; case IToken.tARROW : @@ -4756,6 +4774,14 @@ public abstract class Parser implements IParser consume(IToken.t_template); isTemplate = true; } + + context = astFactory.getCompletionContext( (isTemplate + ? IASTExpression.Kind.POSTFIX_ARROW_TEMPL_IDEXP + : IASTExpression.Kind.POSTFIX_ARROW_IDEXPRESSION), + firstExpression ); + setCompletionContext( context ); + setCompletionKind( IASTCompletionNode.CompletionKind.MEMBER_REFERENCE ); + secondExpression = primaryExpression(scope); try { @@ -4778,6 +4804,9 @@ public abstract class Parser implements IParser } catch (Exception e) { throw backtrack; + }finally + { + setCompletionContext( null ); } break; default : @@ -4785,6 +4814,9 @@ public abstract class Parser implements IParser } } } + + + protected IASTExpression specialCastExpression( IASTScope scope, IASTExpression.Kind kind) throws EndOfFileException, BacktrackException diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTASMDefinition.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTASMDefinition.java index 7c6e3c92bf2..22ff62ca794 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTASMDefinition.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTASMDefinition.java @@ -12,6 +12,7 @@ package org.eclipse.cdt.internal.core.parser.ast.complete; import org.eclipse.cdt.core.parser.ISourceElementRequestor; import org.eclipse.cdt.core.parser.ast.IASTASMDefinition; +import org.eclipse.cdt.core.parser.ast.IASTNode; import org.eclipse.cdt.internal.core.parser.ast.Offsets; import org.eclipse.cdt.internal.core.parser.pst.IContainerSymbol; @@ -98,7 +99,7 @@ public class ASTASMDefinition extends ASTAnonymousDeclaration implements IASTASM /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTNode#lookup(java.lang.String, org.eclipse.cdt.core.parser.ast.IASTNode.LookupKind) */ - public LookupResult lookup(String prefix, LookupKind kind) { + public LookupResult lookup(String prefix, LookupKind kind, IASTNode context) { // TODO Auto-generated method stub return null; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTAbstractTypeSpecifierDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTAbstractTypeSpecifierDeclaration.java index 9c0eca15cce..c91370bc565 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTAbstractTypeSpecifierDeclaration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTAbstractTypeSpecifierDeclaration.java @@ -12,6 +12,7 @@ package org.eclipse.cdt.internal.core.parser.ast.complete; import org.eclipse.cdt.core.parser.ISourceElementRequestor; import org.eclipse.cdt.core.parser.ast.IASTAbstractTypeSpecifierDeclaration; +import org.eclipse.cdt.core.parser.ast.IASTNode; import org.eclipse.cdt.core.parser.ast.IASTTemplate; import org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier; import org.eclipse.cdt.internal.core.parser.ast.Offsets; @@ -121,7 +122,7 @@ public class ASTAbstractTypeSpecifierDeclaration /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTNode#lookup(java.lang.String, org.eclipse.cdt.core.parser.ast.IASTNode.LookupKind) */ - public LookupResult lookup(String prefix, LookupKind kind) { + public LookupResult lookup(String prefix, LookupKind kind, IASTNode context) { // TODO Auto-generated method stub return null; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTClassSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTClassSpecifier.java index 62e1dce7586..d343045049b 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTClassSpecifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTClassSpecifier.java @@ -268,11 +268,4 @@ public class ASTClassSpecifier extends ASTScope implements IASTClassSpecifier declarations.add(declaration); } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.parser.ast.IASTNode#lookup(java.lang.String, org.eclipse.cdt.core.parser.ast.IASTNode.LookupKind) - */ - public LookupResult lookup(String prefix, LookupKind kind) { - // TODO Auto-generated method stub - return null; - } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTCodeScope.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTCodeScope.java index 198508c0b31..218dc24809d 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTCodeScope.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTCodeScope.java @@ -77,7 +77,7 @@ public class ASTCodeScope extends ASTScope implements IASTCodeScope { { return ownerCodeScope; } - + public Iterator getDeclarations() { return declarations.iterator(); @@ -87,13 +87,5 @@ public class ASTCodeScope extends ASTScope implements IASTCodeScope { { declarations.add(declaration); } - - /* (non-Javadoc) - * @see org.eclipse.cdt.core.parser.ast.IASTNode#lookup(java.lang.String, org.eclipse.cdt.core.parser.ast.IASTNode.LookupKind) - */ - public LookupResult lookup(String prefix, LookupKind kind) { - // TODO Auto-generated method stub - return null; - } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTCompilationUnit.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTCompilationUnit.java index 86d279c0e61..2b926efec56 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTCompilationUnit.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTCompilationUnit.java @@ -70,7 +70,7 @@ public class ASTCompilationUnit /* do nothing */ } } - + public Iterator getDeclarations() { return declarations.iterator(); @@ -79,12 +79,4 @@ public class ASTCompilationUnit { declarations.add(declaration); } - - /* (non-Javadoc) - * @see org.eclipse.cdt.core.parser.ast.IASTNode#lookup(java.lang.String, org.eclipse.cdt.core.parser.ast.IASTNode.LookupKind) - */ - public LookupResult lookup(String prefix, LookupKind kind) { - // TODO Auto-generated method stub - return null; - } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTElaboratedTypeSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTElaboratedTypeSpecifier.java index e975f43cc15..576e84ef206 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTElaboratedTypeSpecifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTElaboratedTypeSpecifier.java @@ -168,11 +168,4 @@ public class ASTElaboratedTypeSpecifier extends ASTSymbol implements IASTElabora { offsets.setNameEndOffset(o); } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.parser.ast.IASTNode#lookup(java.lang.String, org.eclipse.cdt.core.parser.ast.IASTNode.LookupKind) - */ - public LookupResult lookup(String prefix, LookupKind kind) { - // TODO Auto-generated method stub - return null; - } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTEnumerationSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTEnumerationSpecifier.java index fbed452e919..0fd3ae5a5af 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTEnumerationSpecifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTEnumerationSpecifier.java @@ -155,12 +155,4 @@ public class ASTEnumerationSpecifier { offsets.setNameEndOffset(o); } - - /* (non-Javadoc) - * @see org.eclipse.cdt.core.parser.ast.IASTNode#lookup(java.lang.String, org.eclipse.cdt.core.parser.ast.IASTNode.LookupKind) - */ - public LookupResult lookup(String prefix, LookupKind kind) { - // TODO Auto-generated method stub - return null; - } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTEnumerator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTEnumerator.java index ef1404ae658..43b8e482115 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTEnumerator.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTEnumerator.java @@ -138,11 +138,4 @@ public class ASTEnumerator extends ASTSymbol implements IASTEnumerator { offsets.setNameEndOffset(o); } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.parser.ast.IASTNode#lookup(java.lang.String, org.eclipse.cdt.core.parser.ast.IASTNode.LookupKind) - */ - public LookupResult lookup(String prefix, LookupKind kind) { - // TODO Auto-generated method stub - return null; - } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTFunction.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTFunction.java index 9eccd1b92c9..cd3979e2147 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTFunction.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTFunction.java @@ -330,11 +330,4 @@ public class ASTFunction extends ASTScope implements IASTFunction declarations.add(declaration); } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.parser.ast.IASTNode#lookup(java.lang.String, org.eclipse.cdt.core.parser.ast.IASTNode.LookupKind) - */ - public LookupResult lookup(String prefix, LookupKind kind) { - // TODO Auto-generated method stub - return null; - } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTLinkageSpecification.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTLinkageSpecification.java index 679feba4688..231d1c899b7 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTLinkageSpecification.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTLinkageSpecification.java @@ -15,6 +15,7 @@ import java.util.Iterator; import org.eclipse.cdt.core.parser.ISourceElementRequestor; import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException; import org.eclipse.cdt.core.parser.ast.IASTLinkageSpecification; +import org.eclipse.cdt.core.parser.ast.IASTNode; import org.eclipse.cdt.internal.core.parser.ast.Offsets; import org.eclipse.cdt.internal.core.parser.pst.IContainerSymbol; @@ -115,7 +116,7 @@ public class ASTLinkageSpecification extends ASTAnonymousDeclaration implements /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTNode#lookup(java.lang.String, org.eclipse.cdt.core.parser.ast.IASTNode.LookupKind) */ - public LookupResult lookup(String prefix, LookupKind kind) { + public LookupResult lookup(String prefix, LookupKind kind, IASTNode context) { // TODO Auto-generated method stub return null; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNamespaceAlias.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNamespaceAlias.java index d9c6eb36b47..df7484483e2 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNamespaceAlias.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNamespaceAlias.java @@ -147,11 +147,4 @@ public class ASTNamespaceAlias extends ASTSymbol implements IASTNamespaceAlias { offsets.setNameEndOffset(o); } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.parser.ast.IASTNode#lookup(java.lang.String, org.eclipse.cdt.core.parser.ast.IASTNode.LookupKind) - */ - public LookupResult lookup(String prefix, LookupKind kind) { - // TODO Auto-generated method stub - return null; - } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNamespaceDefinition.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNamespaceDefinition.java index b6048b4224d..276a570d3d3 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNamespaceDefinition.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNamespaceDefinition.java @@ -174,11 +174,4 @@ public class ASTNamespaceDefinition declarations.add(declaration); } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.parser.ast.IASTNode#lookup(java.lang.String, org.eclipse.cdt.core.parser.ast.IASTNode.LookupKind) - */ - public LookupResult lookup(String prefix, LookupKind kind) { - // TODO Auto-generated method stub - return null; - } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNode.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNode.java new file mode 100644 index 00000000000..c4048f8f5c4 --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNode.java @@ -0,0 +1,116 @@ +/******************************************************************************* + * Copyright (c) 2003 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v0.5 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v05.html + * + * Contributors: + * IBM Corp. - Rational Software - initial implementation + ******************************************************************************/ +package org.eclipse.cdt.internal.core.parser.ast.complete; + +import java.util.Iterator; +import java.util.List; +import java.util.ListIterator; + +import org.eclipse.cdt.core.parser.ast.IASTNode; +import org.eclipse.cdt.internal.core.parser.pst.IContainerSymbol; +import org.eclipse.cdt.internal.core.parser.pst.ISymbol; +import org.eclipse.cdt.internal.core.parser.pst.ISymbolASTExtension; +import org.eclipse.cdt.internal.core.parser.pst.ISymbolOwner; +import org.eclipse.cdt.internal.core.parser.pst.ParserSymbolTableException; +import org.eclipse.cdt.internal.core.parser.pst.TypeFilter; + +/** + * @author aniefer + */ +public class ASTNode implements IASTNode { + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTNode#lookup(java.lang.String, org.eclipse.cdt.core.parser.ast.IASTNode.LookupKind, org.eclipse.cdt.core.parser.ast.IASTNode) + */ + public LookupResult lookup(String prefix, LookupKind kind, IASTNode context) throws LookupException { + if( ! ( this instanceof ISymbolOwner ) || ( context != null && !(context instanceof ISymbolOwner) ) ){ + return null; + } + + IContainerSymbol thisContainer = (IContainerSymbol) ((ISymbolOwner)this).getSymbol(); + IContainerSymbol qualification = null; + + if( context != null ){ + ISymbol sym = (IContainerSymbol) ((ISymbolOwner)context).getSymbol(); + if( sym == null || !(sym instanceof IContainerSymbol) ){ + throw new LookupException(); + } + qualification = (IContainerSymbol) sym; + } + + ISymbolOwner owner = (ISymbolOwner) this; + ISymbol symbol = owner.getSymbol(); + if( symbol == null || !(symbol instanceof IContainerSymbol) ){ + throw new LookupException(); + } + + TypeFilter filter = new TypeFilter( kind ); + List lookupResults = null; + try { + if( qualification != null ){ + lookupResults = qualification.prefixLookup( filter, prefix, true ); + } else { + lookupResults = thisContainer.prefixLookup( filter, prefix, false ); + } + } catch (ParserSymbolTableException e) { + throw new LookupException(); + } + + ListIterator iter = lookupResults.listIterator(); + while( iter.hasNext() ){ + ISymbol s = (ISymbol) iter.next(); + if( !thisContainer.isVisible( s, qualification ) ){ + iter.remove(); + } + } + + SymbolIterator iterator = new SymbolIterator( lookupResults.iterator() ); + + return new Result( prefix, iterator ); + } + + private class Result implements LookupResult{ + private String prefix; + private Iterator iterator; + + public Result( String pref, Iterator iter ){ + prefix = pref; + iterator = iter; + } + + public String getPrefix() { return prefix; } + public Iterator getNodes() { return iterator; } + } + + private class SymbolIterator implements Iterator{ + Iterator interalIterator; + + public SymbolIterator( Iterator iter ){ + interalIterator = iter; + } + + public boolean hasNext() { + return interalIterator.hasNext(); + } + + public Object next() { + ISymbol nextSymbol = (ISymbol) interalIterator.next(); + + ISymbolASTExtension extension = (nextSymbol != null ) ? nextSymbol.getASTExtension() : null; + + return (extension != null ) ? extension.getPrimaryDeclaration() : null; + } + + public void remove() { + interalIterator.remove(); + } + } +} \ No newline at end of file diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTParameterDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTParameterDeclaration.java index 33d9e0ba863..b58cf01de3d 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTParameterDeclaration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTParameterDeclaration.java @@ -193,12 +193,5 @@ public class ASTParameterDeclaration extends ASTSymbol implements IASTParameterD { offsets.setNameEndOffset(o); } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.parser.ast.IASTNode#lookup(java.lang.String, org.eclipse.cdt.core.parser.ast.IASTNode.LookupKind) - */ - public LookupResult lookup(String prefix, LookupKind kind) { - // TODO Auto-generated method stub - return null; - } - + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTSimpleTypeSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTSimpleTypeSpecifier.java index eac8ed276f9..9b1efe7c2c9 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTSimpleTypeSpecifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTSimpleTypeSpecifier.java @@ -13,6 +13,7 @@ package org.eclipse.cdt.internal.core.parser.ast.complete; import java.util.List; import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException; +import org.eclipse.cdt.core.parser.ast.IASTNode; import org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier; import org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier; import org.eclipse.cdt.internal.core.parser.pst.ISymbol; @@ -151,7 +152,7 @@ public class ASTSimpleTypeSpecifier implements IASTSimpleTypeSpecifier /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTNode#lookup(java.lang.String, org.eclipse.cdt.core.parser.ast.IASTNode.LookupKind) */ - public LookupResult lookup(String prefix, LookupKind kind) { + public LookupResult lookup(String prefix, LookupKind kind, IASTNode context) { // TODO Auto-generated method stub return null; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTSymbolOwner.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTSymbolOwner.java index e069a7247e3..d76e35ad4fb 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTSymbolOwner.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTSymbolOwner.java @@ -17,7 +17,7 @@ import org.eclipse.cdt.internal.core.parser.pst.ISymbolOwner; * @author jcamelon * */ -public class ASTSymbolOwner implements ISymbolOwner +public class ASTSymbolOwner extends ASTNode implements ISymbolOwner { protected ISymbol symbol; /** diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateDeclaration.java index ba6d4ed8909..2f754f27e00 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateDeclaration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateDeclaration.java @@ -14,6 +14,7 @@ import java.util.Iterator; import org.eclipse.cdt.core.parser.ISourceElementRequestor; import org.eclipse.cdt.core.parser.ast.IASTDeclaration; +import org.eclipse.cdt.core.parser.ast.IASTNode; import org.eclipse.cdt.core.parser.ast.IASTScope; import org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration; @@ -124,7 +125,7 @@ public class ASTTemplateDeclaration implements IASTTemplateDeclaration /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTNode#lookup(java.lang.String, org.eclipse.cdt.core.parser.ast.IASTNode.LookupKind) */ - public LookupResult lookup(String prefix, LookupKind kind) { + public LookupResult lookup(String prefix, LookupKind kind, IASTNode context) { // TODO Auto-generated method stub return null; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateInstantiation.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateInstantiation.java index af13304e8c7..4618ad926fb 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateInstantiation.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateInstantiation.java @@ -12,6 +12,7 @@ package org.eclipse.cdt.internal.core.parser.ast.complete; import org.eclipse.cdt.core.parser.ISourceElementRequestor; import org.eclipse.cdt.core.parser.ast.IASTDeclaration; +import org.eclipse.cdt.core.parser.ast.IASTNode; import org.eclipse.cdt.core.parser.ast.IASTScope; import org.eclipse.cdt.core.parser.ast.IASTTemplateInstantiation; @@ -106,7 +107,7 @@ public class ASTTemplateInstantiation implements IASTTemplateInstantiation /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTNode#lookup(java.lang.String, org.eclipse.cdt.core.parser.ast.IASTNode.LookupKind) */ - public LookupResult lookup(String prefix, LookupKind kind) { + public LookupResult lookup(String prefix, LookupKind kind, IASTNode context) { // TODO Auto-generated method stub return null; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateSpecialization.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateSpecialization.java index a987f50c2c0..7ceb57a0b7b 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateSpecialization.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateSpecialization.java @@ -12,6 +12,7 @@ package org.eclipse.cdt.internal.core.parser.ast.complete; import org.eclipse.cdt.core.parser.ISourceElementRequestor; import org.eclipse.cdt.core.parser.ast.IASTDeclaration; +import org.eclipse.cdt.core.parser.ast.IASTNode; import org.eclipse.cdt.core.parser.ast.IASTScope; import org.eclipse.cdt.core.parser.ast.IASTTemplateSpecialization; @@ -106,7 +107,7 @@ public class ASTTemplateSpecialization implements IASTTemplateSpecialization /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTNode#lookup(java.lang.String, org.eclipse.cdt.core.parser.ast.IASTNode.LookupKind) */ - public LookupResult lookup(String prefix, LookupKind kind) { + public LookupResult lookup(String prefix, LookupKind kind, IASTNode context) { // TODO Auto-generated method stub return null; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTypedef.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTypedef.java index f16ca476b3a..475473dcc77 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTypedef.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTypedef.java @@ -167,12 +167,4 @@ public class ASTTypedef extends ASTSymbol implements IASTTypedefDeclaration offsets.setNameEndOffset(o); } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.parser.ast.IASTNode#lookup(java.lang.String, org.eclipse.cdt.core.parser.ast.IASTNode.LookupKind) - */ - public LookupResult lookup(String prefix, LookupKind kind) { - // TODO Auto-generated method stub - return null; - } - } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTUsingDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTUsingDeclaration.java index d19bee0b1c2..72d756d1f68 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTUsingDeclaration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTUsingDeclaration.java @@ -15,6 +15,7 @@ import java.util.List; import org.eclipse.cdt.core.parser.ISourceElementRequestor; import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException; import org.eclipse.cdt.core.parser.ast.IASTDeclaration; +import org.eclipse.cdt.core.parser.ast.IASTNode; import org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement; import org.eclipse.cdt.core.parser.ast.IASTScope; import org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration; @@ -130,7 +131,7 @@ public class ASTUsingDeclaration implements IASTUsingDeclaration /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTNode#lookup(java.lang.String, org.eclipse.cdt.core.parser.ast.IASTNode.LookupKind) */ - public LookupResult lookup(String prefix, LookupKind kind) { + public LookupResult lookup(String prefix, LookupKind kind, IASTNode context) { // TODO Auto-generated method stub return null; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTUsingDirective.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTUsingDirective.java index 142a9ced044..fea6cb6d884 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTUsingDirective.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTUsingDirective.java @@ -15,6 +15,7 @@ import java.util.List; import org.eclipse.cdt.core.parser.ISourceElementRequestor; import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException; import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition; +import org.eclipse.cdt.core.parser.ast.IASTNode; import org.eclipse.cdt.core.parser.ast.IASTUsingDirective; import org.eclipse.cdt.internal.core.parser.ast.Offsets; import org.eclipse.cdt.internal.core.parser.pst.IContainerSymbol; @@ -125,7 +126,7 @@ public class ASTUsingDirective extends ASTAnonymousDeclaration implements IASTUs /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTNode#lookup(java.lang.String, org.eclipse.cdt.core.parser.ast.IASTNode.LookupKind) */ - public LookupResult lookup(String prefix, LookupKind kind) { + public LookupResult lookup(String prefix, LookupKind kind, IASTNode context) { // TODO Auto-generated method stub return null; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTVariable.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTVariable.java index a1d4d7603e3..4f64e789d03 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTVariable.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTVariable.java @@ -16,6 +16,7 @@ import org.eclipse.cdt.core.parser.ISourceElementRequestor; import org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration; import org.eclipse.cdt.core.parser.ast.IASTExpression; import org.eclipse.cdt.core.parser.ast.IASTInitializerClause; +import org.eclipse.cdt.core.parser.ast.IASTNode; import org.eclipse.cdt.core.parser.ast.IASTScope; import org.eclipse.cdt.core.parser.ast.IASTVariable; import org.eclipse.cdt.internal.core.parser.ast.ASTQualifiedNamedElement; @@ -242,11 +243,5 @@ public class ASTVariable extends ASTSymbol implements IASTVariable { return constructorExpression; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.parser.ast.IASTNode#lookup(java.lang.String, org.eclipse.cdt.core.parser.ast.IASTNode.LookupKind) - */ - public LookupResult lookup(String prefix, LookupKind kind) { - // TODO Auto-generated method stub - return null; - } + } 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 b7216021df3..1f55f16a164 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 @@ -46,6 +46,7 @@ import org.eclipse.cdt.core.parser.ast.IASTLinkageSpecification; import org.eclipse.cdt.core.parser.ast.IASTMethod; import org.eclipse.cdt.core.parser.ast.IASTNamespaceAlias; import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition; +import org.eclipse.cdt.core.parser.ast.IASTNode; import org.eclipse.cdt.core.parser.ast.IASTParameterDeclaration; import org.eclipse.cdt.core.parser.ast.IASTReference; import org.eclipse.cdt.core.parser.ast.IASTScope; @@ -2736,4 +2737,24 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto { return new ASTInitializerClause( kind, assignmentExpression, initializerClauses, designators ); } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTFactory#getCompletionContext(org.eclipse.cdt.core.parser.ast.IASTExpression.Kind, org.eclipse.cdt.core.parser.ast.IASTExpression) + */ + public IASTNode getCompletionContext(Kind kind, IASTExpression expression) { + IContainerSymbol context = null; + try { + context = getSearchScope( kind, expression, null ); + } catch (ASTSemanticException e) { + return null; + } + + if( context != null ){ + ISymbolASTExtension extension = context.getASTExtension(); + return ( extension != null ) ? extension.getPrimaryDeclaration() : null; + } + + return null; + + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTASMDefinition.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTASMDefinition.java index 6a63b537fa2..1c2a8a9a0d1 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTASMDefinition.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTASMDefinition.java @@ -12,6 +12,7 @@ package org.eclipse.cdt.internal.core.parser.ast.quick; import org.eclipse.cdt.core.parser.ISourceElementRequestor; import org.eclipse.cdt.core.parser.ast.IASTASMDefinition; +import org.eclipse.cdt.core.parser.ast.IASTNode; import org.eclipse.cdt.core.parser.ast.IASTScope; import org.eclipse.cdt.internal.core.parser.ast.Offsets; @@ -100,7 +101,7 @@ public class ASTASMDefinition /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTNode#lookup(java.lang.String, org.eclipse.cdt.core.parser.ast.IASTNode.LookupKind) */ - public LookupResult lookup(String prefix, LookupKind kind) { + public LookupResult lookup(String prefix, LookupKind kind, IASTNode context) { // TODO Auto-generated method stub return null; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTAbstractTypeSpecifierDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTAbstractTypeSpecifierDeclaration.java index e1b3dcf3d4c..9ab05fcc653 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTAbstractTypeSpecifierDeclaration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTAbstractTypeSpecifierDeclaration.java @@ -12,6 +12,7 @@ package org.eclipse.cdt.internal.core.parser.ast.quick; import org.eclipse.cdt.core.parser.ISourceElementRequestor; import org.eclipse.cdt.core.parser.ast.IASTAbstractTypeSpecifierDeclaration; +import org.eclipse.cdt.core.parser.ast.IASTNode; import org.eclipse.cdt.core.parser.ast.IASTScope; import org.eclipse.cdt.core.parser.ast.IASTTemplate; import org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier; @@ -118,7 +119,7 @@ public class ASTAbstractTypeSpecifierDeclaration /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTNode#lookup(java.lang.String, org.eclipse.cdt.core.parser.ast.IASTNode.LookupKind) */ - public LookupResult lookup(String prefix, LookupKind kind) { + public LookupResult lookup(String prefix, LookupKind kind, IASTNode context) { // TODO Auto-generated method stub return null; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTCompilationUnit.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTCompilationUnit.java index 4840d2477fe..8cad9285f4e 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTCompilationUnit.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTCompilationUnit.java @@ -17,6 +17,7 @@ import java.util.List; import org.eclipse.cdt.core.parser.ISourceElementRequestor; import org.eclipse.cdt.core.parser.ast.IASTCompilationUnit; import org.eclipse.cdt.core.parser.ast.IASTDeclaration; +import org.eclipse.cdt.core.parser.ast.IASTNode; /** * @author jcamelon @@ -77,7 +78,7 @@ public class ASTCompilationUnit implements IASTCompilationUnit, IASTQScope { /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTNode#lookup(java.lang.String, org.eclipse.cdt.core.parser.ast.IASTNode.LookupKind) */ - public LookupResult lookup(String prefix, LookupKind kind) { + public LookupResult lookup(String prefix, LookupKind kind, IASTNode context) { // TODO Auto-generated method stub return null; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTElaboratedTypeSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTElaboratedTypeSpecifier.java index 0be86b94f16..f4734d9bff6 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTElaboratedTypeSpecifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTElaboratedTypeSpecifier.java @@ -14,6 +14,7 @@ import org.eclipse.cdt.core.parser.ISourceElementRequestor; import org.eclipse.cdt.core.parser.ast.ASTClassKind; import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException; import org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier; +import org.eclipse.cdt.core.parser.ast.IASTNode; import org.eclipse.cdt.core.parser.ast.IASTScope; import org.eclipse.cdt.internal.core.parser.ast.ASTQualifiedNamedElement; import org.eclipse.cdt.internal.core.parser.ast.NamedOffsets; @@ -158,7 +159,7 @@ public class ASTElaboratedTypeSpecifier implements IASTElaboratedTypeSpecifier /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTNode#lookup(java.lang.String, org.eclipse.cdt.core.parser.ast.IASTNode.LookupKind) */ - public LookupResult lookup(String prefix, LookupKind kind) { + public LookupResult lookup(String prefix, LookupKind kind, IASTNode context) { // TODO Auto-generated method stub return null; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTFunction.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTFunction.java index 3452837323b..25399a00501 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTFunction.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTFunction.java @@ -19,6 +19,7 @@ import org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration; import org.eclipse.cdt.core.parser.ast.IASTCodeScope; import org.eclipse.cdt.core.parser.ast.IASTExceptionSpecification; import org.eclipse.cdt.core.parser.ast.IASTFunction; +import org.eclipse.cdt.core.parser.ast.IASTNode; import org.eclipse.cdt.core.parser.ast.IASTQualifiedNameElement; import org.eclipse.cdt.core.parser.ast.IASTScope; import org.eclipse.cdt.core.parser.ast.IASTTemplate; @@ -283,7 +284,7 @@ public class ASTFunction extends ASTDeclaration implements IASTFunction /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTNode#lookup(java.lang.String, org.eclipse.cdt.core.parser.ast.IASTNode.LookupKind) */ - public LookupResult lookup(String prefix, LookupKind kind) { + public LookupResult lookup(String prefix, LookupKind kind, IASTNode context) { // TODO Auto-generated method stub return null; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTLinkageSpecification.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTLinkageSpecification.java index cc201402477..97af01fb8d9 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTLinkageSpecification.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTLinkageSpecification.java @@ -17,6 +17,7 @@ import java.util.List; import org.eclipse.cdt.core.parser.ISourceElementRequestor; import org.eclipse.cdt.core.parser.ast.IASTDeclaration; import org.eclipse.cdt.core.parser.ast.IASTLinkageSpecification; +import org.eclipse.cdt.core.parser.ast.IASTNode; import org.eclipse.cdt.core.parser.ast.IASTScope; import org.eclipse.cdt.internal.core.parser.ast.Offsets; @@ -129,7 +130,7 @@ public class ASTLinkageSpecification /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTNode#lookup(java.lang.String, org.eclipse.cdt.core.parser.ast.IASTNode.LookupKind) */ - public LookupResult lookup(String prefix, LookupKind kind) { + public LookupResult lookup(String prefix, LookupKind kind, IASTNode context) { // TODO Auto-generated method stub return null; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTNamespaceAlias.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTNamespaceAlias.java index a0f82e02d85..9c78b8113d8 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTNamespaceAlias.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTNamespaceAlias.java @@ -14,6 +14,7 @@ import org.eclipse.cdt.core.parser.ISourceElementRequestor; import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException; import org.eclipse.cdt.core.parser.ast.IASTNamespaceAlias; import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition; +import org.eclipse.cdt.core.parser.ast.IASTNode; import org.eclipse.cdt.core.parser.ast.IASTScope; import org.eclipse.cdt.internal.core.parser.ast.NamedOffsets; @@ -148,7 +149,7 @@ public class ASTNamespaceAlias extends ASTDeclaration implements IASTNamespaceAl /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTNode#lookup(java.lang.String, org.eclipse.cdt.core.parser.ast.IASTNode.LookupKind) */ - public LookupResult lookup(String prefix, LookupKind kind) { + public LookupResult lookup(String prefix, LookupKind kind, IASTNode context) { // TODO Auto-generated method stub return null; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTNamespaceDefinition.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTNamespaceDefinition.java index 84a8372a91a..2ecee5c953c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTNamespaceDefinition.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTNamespaceDefinition.java @@ -17,6 +17,7 @@ import java.util.List; import org.eclipse.cdt.core.parser.ISourceElementRequestor; import org.eclipse.cdt.core.parser.ast.IASTDeclaration; import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition; +import org.eclipse.cdt.core.parser.ast.IASTNode; import org.eclipse.cdt.core.parser.ast.IASTScope; import org.eclipse.cdt.internal.core.parser.ast.ASTQualifiedNamedElement; import org.eclipse.cdt.internal.core.parser.ast.NamedOffsets; @@ -162,7 +163,7 @@ public class ASTNamespaceDefinition extends ASTDeclaration implements IASTNamesp /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTNode#lookup(java.lang.String, org.eclipse.cdt.core.parser.ast.IASTNode.LookupKind) */ - public LookupResult lookup(String prefix, LookupKind kind) { + public LookupResult lookup(String prefix, LookupKind kind, IASTNode context) { // TODO Auto-generated method stub return null; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTScopedTypeSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTScopedTypeSpecifier.java index a3f022fe49e..c67aa8360f4 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTScopedTypeSpecifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTScopedTypeSpecifier.java @@ -10,6 +10,7 @@ ***********************************************************************/ package org.eclipse.cdt.internal.core.parser.ast.quick; +import org.eclipse.cdt.core.parser.ast.IASTNode; import org.eclipse.cdt.core.parser.ast.IASTScope; import org.eclipse.cdt.core.parser.ast.IASTScopedTypeSpecifier; import org.eclipse.cdt.internal.core.parser.ast.ASTQualifiedNamedElement; @@ -37,7 +38,7 @@ public class ASTScopedTypeSpecifier extends ASTQualifiedNamedElement implements /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTNode#lookup(java.lang.String, org.eclipse.cdt.core.parser.ast.IASTNode.LookupKind) */ - public LookupResult lookup(String prefix, LookupKind kind) { + public LookupResult lookup(String prefix, LookupKind kind, IASTNode context) { // TODO Auto-generated method stub return null; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTSimpleTypeSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTSimpleTypeSpecifier.java index 2e20a965622..8686850d2ce 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTSimpleTypeSpecifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTSimpleTypeSpecifier.java @@ -15,6 +15,7 @@ import java.util.Map; import org.eclipse.cdt.core.parser.ITokenDuple; import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException; +import org.eclipse.cdt.core.parser.ast.IASTNode; import org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier; import org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier; @@ -196,7 +197,7 @@ public class ASTSimpleTypeSpecifier implements IASTSimpleTypeSpecifier /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTNode#lookup(java.lang.String, org.eclipse.cdt.core.parser.ast.IASTNode.LookupKind) */ - public LookupResult lookup(String prefix, LookupKind kind) { + public LookupResult lookup(String prefix, LookupKind kind, IASTNode context) { // TODO Auto-generated method stub return null; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateDeclaration.java index e1f9c5a96c3..333757afeac 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateDeclaration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateDeclaration.java @@ -15,6 +15,7 @@ import java.util.List; import org.eclipse.cdt.core.parser.ISourceElementRequestor; import org.eclipse.cdt.core.parser.ast.IASTDeclaration; +import org.eclipse.cdt.core.parser.ast.IASTNode; import org.eclipse.cdt.core.parser.ast.IASTScope; import org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration; import org.eclipse.cdt.internal.core.parser.ast.Offsets; @@ -140,7 +141,7 @@ public class ASTTemplateDeclaration extends ASTDeclaration implements IASTTempla /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTNode#lookup(java.lang.String, org.eclipse.cdt.core.parser.ast.IASTNode.LookupKind) */ - public LookupResult lookup(String prefix, LookupKind kind) { + public LookupResult lookup(String prefix, LookupKind kind, IASTNode context) { // TODO Auto-generated method stub return null; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateInstantiation.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateInstantiation.java index e14cfe3eb61..1c9c9c00c39 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateInstantiation.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateInstantiation.java @@ -12,6 +12,7 @@ package org.eclipse.cdt.internal.core.parser.ast.quick; import org.eclipse.cdt.core.parser.ISourceElementRequestor; import org.eclipse.cdt.core.parser.ast.IASTDeclaration; +import org.eclipse.cdt.core.parser.ast.IASTNode; import org.eclipse.cdt.core.parser.ast.IASTScope; import org.eclipse.cdt.core.parser.ast.IASTTemplateInstantiation; import org.eclipse.cdt.internal.core.parser.ast.Offsets; @@ -123,7 +124,7 @@ public class ASTTemplateInstantiation extends ASTDeclaration implements IASTTemp /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTNode#lookup(java.lang.String, org.eclipse.cdt.core.parser.ast.IASTNode.LookupKind) */ - public LookupResult lookup(String prefix, LookupKind kind) { + public LookupResult lookup(String prefix, LookupKind kind, IASTNode context) { // TODO Auto-generated method stub return null; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateSpecialization.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateSpecialization.java index b56f243a790..852d85eb0a1 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateSpecialization.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateSpecialization.java @@ -12,6 +12,7 @@ package org.eclipse.cdt.internal.core.parser.ast.quick; import org.eclipse.cdt.core.parser.ISourceElementRequestor; import org.eclipse.cdt.core.parser.ast.IASTDeclaration; +import org.eclipse.cdt.core.parser.ast.IASTNode; import org.eclipse.cdt.core.parser.ast.IASTScope; import org.eclipse.cdt.core.parser.ast.IASTTemplateSpecialization; import org.eclipse.cdt.internal.core.parser.ast.Offsets; @@ -117,7 +118,7 @@ public class ASTTemplateSpecialization extends ASTDeclaration implements IASTTem /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTNode#lookup(java.lang.String, org.eclipse.cdt.core.parser.ast.IASTNode.LookupKind) */ - public LookupResult lookup(String prefix, LookupKind kind) { + public LookupResult lookup(String prefix, LookupKind kind, IASTNode context) { // TODO Auto-generated method stub return null; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTypedefDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTypedefDeclaration.java index df7ea5bc927..f4d68ef0c20 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTypedefDeclaration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTypedefDeclaration.java @@ -12,6 +12,7 @@ package org.eclipse.cdt.internal.core.parser.ast.quick; import org.eclipse.cdt.core.parser.ISourceElementRequestor; import org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration; +import org.eclipse.cdt.core.parser.ast.IASTNode; import org.eclipse.cdt.core.parser.ast.IASTScope; import org.eclipse.cdt.core.parser.ast.IASTTypedefDeclaration; import org.eclipse.cdt.internal.core.parser.ast.ASTQualifiedNamedElement; @@ -150,7 +151,7 @@ public class ASTTypedefDeclaration extends ASTDeclaration implements IASTTypedef /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTNode#lookup(java.lang.String, org.eclipse.cdt.core.parser.ast.IASTNode.LookupKind) */ - public LookupResult lookup(String prefix, LookupKind kind) { + public LookupResult lookup(String prefix, LookupKind kind, IASTNode context) { // TODO Auto-generated method stub return null; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTUsingDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTUsingDeclaration.java index 068dfd2116a..30784d98101 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTUsingDeclaration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTUsingDeclaration.java @@ -13,6 +13,7 @@ package org.eclipse.cdt.internal.core.parser.ast.quick; import org.eclipse.cdt.core.parser.ISourceElementRequestor; import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException; import org.eclipse.cdt.core.parser.ast.IASTDeclaration; +import org.eclipse.cdt.core.parser.ast.IASTNode; import org.eclipse.cdt.core.parser.ast.IASTScope; import org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration; import org.eclipse.cdt.internal.core.parser.ast.Offsets; @@ -115,7 +116,7 @@ public class ASTUsingDeclaration /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTNode#lookup(java.lang.String, org.eclipse.cdt.core.parser.ast.IASTNode.LookupKind) */ - public LookupResult lookup(String prefix, LookupKind kind) { + public LookupResult lookup(String prefix, LookupKind kind, IASTNode context) { // TODO Auto-generated method stub return null; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTUsingDirective.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTUsingDirective.java index c5bc5cdf5e5..088c1c8c826 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTUsingDirective.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTUsingDirective.java @@ -13,6 +13,7 @@ package org.eclipse.cdt.internal.core.parser.ast.quick; import org.eclipse.cdt.core.parser.ISourceElementRequestor; import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException; import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition; +import org.eclipse.cdt.core.parser.ast.IASTNode; import org.eclipse.cdt.core.parser.ast.IASTScope; import org.eclipse.cdt.core.parser.ast.IASTUsingDirective; import org.eclipse.cdt.internal.core.parser.ast.Offsets; @@ -107,7 +108,7 @@ public class ASTUsingDirective /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTNode#lookup(java.lang.String, org.eclipse.cdt.core.parser.ast.IASTNode.LookupKind) */ - public LookupResult lookup(String prefix, LookupKind kind) { + public LookupResult lookup(String prefix, LookupKind kind, IASTNode context) { // TODO Auto-generated method stub return null; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTVariable.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTVariable.java index a8830f049eb..70c316ee40d 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTVariable.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTVariable.java @@ -14,6 +14,7 @@ import org.eclipse.cdt.core.parser.ISourceElementRequestor; import org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration; import org.eclipse.cdt.core.parser.ast.IASTExpression; import org.eclipse.cdt.core.parser.ast.IASTInitializerClause; +import org.eclipse.cdt.core.parser.ast.IASTNode; import org.eclipse.cdt.core.parser.ast.IASTScope; import org.eclipse.cdt.core.parser.ast.IASTVariable; import org.eclipse.cdt.internal.core.parser.ast.ASTQualifiedNamedElement; @@ -231,7 +232,7 @@ public class ASTVariable extends ASTDeclaration implements IASTVariable /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTNode#lookup(java.lang.String, org.eclipse.cdt.core.parser.ast.IASTNode.LookupKind) */ - public LookupResult lookup(String prefix, LookupKind kind) { + public LookupResult lookup(String prefix, LookupKind kind, IASTNode context) { // TODO Auto-generated method stub return null; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/QuickParseASTFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/QuickParseASTFactory.java index 29edeb7039c..afd5434dba3 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/QuickParseASTFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/QuickParseASTFactory.java @@ -38,6 +38,7 @@ import org.eclipse.cdt.core.parser.ast.IASTLinkageSpecification; import org.eclipse.cdt.core.parser.ast.IASTMethod; import org.eclipse.cdt.core.parser.ast.IASTNamespaceAlias; import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition; +import org.eclipse.cdt.core.parser.ast.IASTNode; import org.eclipse.cdt.core.parser.ast.IASTParameterDeclaration; import org.eclipse.cdt.core.parser.ast.IASTScope; import org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier; @@ -316,4 +317,12 @@ public class QuickParseASTFactory extends BaseASTFactory implements IASTFactory return new ASTInitializerClause( kind, assignmentExpression, initializerClauses, designators ); } + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ast.IASTFactory#getCompletionContext(org.eclipse.cdt.core.parser.ast.IASTExpression.Kind, org.eclipse.cdt.core.parser.ast.IASTExpression) + */ + public IASTNode getCompletionContext(Kind kind, IASTExpression expression) { + //we have no cross-reference information about the type of the expression + return null; + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/ParserSymbolTable.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/ParserSymbolTable.java index fd1f14e9963..4f38758679e 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/ParserSymbolTable.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/ParserSymbolTable.java @@ -16,6 +16,7 @@ package org.eclipse.cdt.internal.core.parser.pst; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; +import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.ListIterator; @@ -290,7 +291,7 @@ public class ParserSymbolTable { * Look for data.name in our collection _containedDeclarations */ protected static Map lookupInContained( LookupData data, IContainerSymbol lookIn ) throws ParserSymbolTableException{ - Map found = new HashMap(); + Map found = new LinkedHashMap(); boolean foundSomething = false; ISymbol temp = null; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/TypeFilter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/TypeFilter.java index e8608659d26..a09358d4404 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/TypeFilter.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/TypeFilter.java @@ -96,7 +96,8 @@ public class TypeFilter { * @param lookupKind */ private void populatedFilteredTypes(LookupKind kind) { - if ( kind == LookupKind.STRUCTURES ) { acceptedTypes.add( TypeInfo.t_class ); + if ( kind == LookupKind.ALL ) { acceptedTypes.add( TypeInfo.t_any ); } + else if ( kind == LookupKind.STRUCTURES ) { acceptedTypes.add( TypeInfo.t_class ); acceptedTypes.add( TypeInfo.t_struct ); acceptedTypes.add( TypeInfo.t_union ); } else if ( kind == LookupKind.STRUCS ) { acceptedTypes.add( TypeInfo.t_struct ); } diff --git a/core/org.eclipse.cdt.ui/ChangeLog b/core/org.eclipse.cdt.ui/ChangeLog index 0937bb0d901..40831045c23 100644 --- a/core/org.eclipse.cdt.ui/ChangeLog +++ b/core/org.eclipse.cdt.ui/ChangeLog @@ -1,3 +1,6 @@ +2003-12-15 Andrew Niefer + Updated CompletionEngine to match new signature for IASTNode.lookup + 2003-12-15 Alain Magloire Header icon provide by Mirza Hadzic PR 26486. Thanks. diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/CompletionEngine.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/CompletionEngine.java index 28da81857b9..53573a68db0 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/CompletionEngine.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/CompletionEngine.java @@ -301,7 +301,7 @@ public class CompletionEngine implements RelevanceConstants{ // 2. lookup fields & add to completion proposals try { - result = searchNode.lookup (completionNode.getCompletionPrefix(), IASTNode.LookupKind.FIELDS); + result = searchNode.lookup (completionNode.getCompletionPrefix(), IASTNode.LookupKind.FIELDS, completionNode.getCompletionContext()); addToCompletions (result); } catch( IASTNode.LookupException ilk ) @@ -312,7 +312,7 @@ public class CompletionEngine implements RelevanceConstants{ try { // 3. looup methods & add to completion proposals - result = searchNode.lookup (completionNode.getCompletionPrefix(), IASTNode.LookupKind.METHODS); + result = searchNode.lookup (completionNode.getCompletionPrefix(), IASTNode.LookupKind.METHODS, completionNode.getCompletionContext()); addToCompletions (result); } catch( IASTNode.LookupException ilk ) @@ -323,7 +323,7 @@ public class CompletionEngine implements RelevanceConstants{ try { // 4. lookup nested structures & add to completion proposals - result = searchNode.lookup (completionNode.getCompletionPrefix(), IASTNode.LookupKind.STRUCTURES); + result = searchNode.lookup (completionNode.getCompletionPrefix(), IASTNode.LookupKind.STRUCTURES, completionNode.getCompletionContext()); addToCompletions (result); } catch (LookupException e) { } @@ -338,7 +338,7 @@ public class CompletionEngine implements RelevanceConstants{ // 2. Lookup all types that could be used here LookupResult result; try { - result = searchNode.lookup(completionNode.getCompletionPrefix(), IASTNode.LookupKind.STRUCTURES); + result = searchNode.lookup(completionNode.getCompletionPrefix(), IASTNode.LookupKind.STRUCTURES, completionNode.getCompletionContext()); addToCompletions(result); } catch (LookupException e) { } @@ -363,7 +363,7 @@ public class CompletionEngine implements RelevanceConstants{ // We have to lookup functions that could be overridden here. LookupResult result; try { - result = searchNode.lookup(completionNode.getCompletionPrefix(), IASTNode.LookupKind.METHODS); + result = searchNode.lookup(completionNode.getCompletionPrefix(), IASTNode.LookupKind.METHODS, completionNode.getCompletionContext()); addToCompletions(result); } catch (LookupException e) { // TODO Auto-generated catch block @@ -385,7 +385,7 @@ public class CompletionEngine implements RelevanceConstants{ // 1. lookup local variables, global variables, functions, methods, structures, enums, macros, and namespaces try { - LookupResult result = searchNode.lookup(completionNode.getCompletionPrefix(), IASTNode.LookupKind.ALL); + LookupResult result = searchNode.lookup(completionNode.getCompletionPrefix(), IASTNode.LookupKind.ALL, completionNode.getCompletionContext()); addToCompletions(result); } catch( LookupException ilk ) @@ -397,7 +397,7 @@ public class CompletionEngine implements RelevanceConstants{ // 1. look only for local variables try { - LookupResult result = searchNode.lookup(completionNode.getCompletionPrefix(), IASTNode.LookupKind.LOCAL_VARIABLES); + LookupResult result = searchNode.lookup(completionNode.getCompletionPrefix(), IASTNode.LookupKind.LOCAL_VARIABLES, completionNode.getCompletionContext()); addToCompletions(result); } catch( LookupException ilk ) @@ -417,7 +417,7 @@ public class CompletionEngine implements RelevanceConstants{ // 1. lookup local variables, global variables, functions, methods, structures, enums, macros, and namespaces try { - LookupResult result = searchNode.lookup(completionNode.getCompletionPrefix(), IASTNode.LookupKind.ALL); + LookupResult result = searchNode.lookup(completionNode.getCompletionPrefix(), IASTNode.LookupKind.ALL, completionNode.getCompletionContext()); addToCompletions(result); } catch( LookupException ilk ) @@ -432,7 +432,7 @@ public class CompletionEngine implements RelevanceConstants{ // only look for classes try { - LookupResult result = searchNode.lookup(completionNode.getCompletionPrefix(), IASTNode.LookupKind.CLASSES); + LookupResult result = searchNode.lookup(completionNode.getCompletionPrefix(), IASTNode.LookupKind.CLASSES, completionNode.getCompletionContext()); addToCompletions(result); } catch( LookupException ilk ) @@ -445,7 +445,7 @@ public class CompletionEngine implements RelevanceConstants{ // only look for classes try { - LookupResult result = searchNode.lookup(completionNode.getCompletionPrefix(), IASTNode.LookupKind.NAMESPACES); + LookupResult result = searchNode.lookup(completionNode.getCompletionPrefix(), IASTNode.LookupKind.NAMESPACES, completionNode.getCompletionContext()); addToCompletions(result); } catch( LookupException ilk ) @@ -466,7 +466,7 @@ public class CompletionEngine implements RelevanceConstants{ // only look for macros try { - LookupResult result = searchNode.lookup(completionNode.getCompletionPrefix(), IASTNode.LookupKind.MACROS); + LookupResult result = searchNode.lookup(completionNode.getCompletionPrefix(), IASTNode.LookupKind.MACROS, completionNode.getCompletionContext()); addToCompletions(result); } catch( LookupException ilk ) @@ -482,7 +482,7 @@ public class CompletionEngine implements RelevanceConstants{ // only lookup constructors try { - LookupResult result = searchNode.lookup(completionNode.getCompletionPrefix(), IASTNode.LookupKind.CONSTRUCTORS); + LookupResult result = searchNode.lookup(completionNode.getCompletionPrefix(), IASTNode.LookupKind.CONSTRUCTORS, completionNode.getCompletionContext()); } catch( LookupException ilk ) {