Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] Parser Support for Content Assist

Parser support for content assist.

Implemented IASTNode, which provides lookup for content assist by using 
the Symbol table's IContainerSymbol.prefixLookup and 
IContainerSymbol.isVisible methods.
Changed the signature of IASTNode.lookup to take the context provided by 
the IASTComplationNode and updated the CompletionEngine accordingly.

Set the completion scope and context in the Parser for statements and . 
and -> expressions.

added ContextualParseTest.testCompletionLookup_Unqualified
added ContextualParseTest.testCompletionLookup_Qualified
added ContextualParseTest.testCompletionLookup_Pointer

-Andrew

Index: parser/ChangeLog-parser
===================================================================
retrieving revision 1.6
diff -u -r1.6 ChangeLog-parser
--- parser/ChangeLog-parser	15 Dec 2003 19:49:56 -0000	1.6
+++ parser/ChangeLog-parser	15 Dec 2003 20:08:41 -0000
@@ -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
Index: parser/org/eclipse/cdt/core/parser/ast/IASTFactory.java
===================================================================
retrieving revision 1.41
diff -u -r1.41 IASTFactory.java
--- parser/org/eclipse/cdt/core/parser/ast/IASTFactory.java	5 Nov 2003 18:15:11 -0000	1.41
+++ parser/org/eclipse/cdt/core/parser/ast/IASTFactory.java	15 Dec 2003 20:08:42 -0000
@@ -15,6 +15,7 @@
 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 @@
     /**
      * @param astClassSpecifier
      */
-    public void signalEndOfClassSpecifier(IASTClassSpecifier astClassSpecifier); 						
+    public void signalEndOfClassSpecifier(IASTClassSpecifier astClassSpecifier);
+
+	/**
+	 * @param kind
+	 * @param firstExpression
+	 */
+	public IASTNode getCompletionContext(Kind kind, IASTExpression expression); 						
 }
Index: parser/org/eclipse/cdt/core/parser/ast/IASTNode.java
===================================================================
retrieving revision 1.5
diff -u -r1.5 IASTNode.java
--- parser/org/eclipse/cdt/core/parser/ast/IASTNode.java	12 Dec 2003 02:01:50 -0000	1.5
+++ parser/org/eclipse/cdt/core/parser/ast/IASTNode.java	15 Dec 2003 20:08:42 -0000
@@ -58,6 +58,6 @@
 	 	public Iterator getNodes(); 
 	 }
 
-	public LookupResult lookup( String prefix, LookupKind kind ) throws LookupException;
+	public LookupResult lookup( String prefix, LookupKind kind, IASTNode context) throws LookupException;
 }
 
Index: parser/org/eclipse/cdt/internal/core/parser/Parser.java
===================================================================
retrieving revision 1.129
diff -u -r1.129 Parser.java
--- parser/org/eclipse/cdt/internal/core/parser/Parser.java	12 Dec 2003 19:44:52 -0000	1.129
+++ parser/org/eclipse/cdt/internal/core/parser/Parser.java	15 Dec 2003 20:08:46 -0000
@@ -2891,7 +2891,8 @@
      */
     protected void statement(IASTScope scope) throws EndOfFileException, BacktrackException
     {
-        
+    	setCurrentScope(scope);
+    	
         switch (LT(1))
         {
             case IToken.t_case :
@@ -3028,6 +3029,11 @@
                 // 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 @@
                 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 @@
                     } catch (Exception e)
                     {
                         throw backtrack;
+                    } finally 
+                    {
+                    	setCompletionContext( null );
                     }
                     break;
                 case IToken.tARROW :
@@ -4756,6 +4774,14 @@
                         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 @@
                     } catch (Exception e)
                     {
                         throw backtrack;
+                    }finally 
+                    {
+                    	setCompletionContext( null );
                     }
                     break;
                 default :
@@ -4785,6 +4814,9 @@
             }
         }
     }
+    
+    
+
     protected IASTExpression specialCastExpression( IASTScope scope,
         IASTExpression.Kind kind)
         throws EndOfFileException, BacktrackException
Index: parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTASMDefinition.java
===================================================================
retrieving revision 1.4
diff -u -r1.4 ASTASMDefinition.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTASMDefinition.java	3 Nov 2003 14:17:15 -0000	1.4
+++ parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTASMDefinition.java	15 Dec 2003 20:08:46 -0000
@@ -12,6 +12,7 @@
 
 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 @@
 	/* (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;
 	}
Index: parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTAbstractTypeSpecifierDeclaration.java
===================================================================
retrieving revision 1.3
diff -u -r1.3 ASTAbstractTypeSpecifierDeclaration.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTAbstractTypeSpecifierDeclaration.java	3 Nov 2003 14:17:15 -0000	1.3
+++ parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTAbstractTypeSpecifierDeclaration.java	15 Dec 2003 20:08:46 -0000
@@ -12,6 +12,7 @@
 
 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 @@
 	/* (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;
 	}
Index: parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTClassSpecifier.java
===================================================================
retrieving revision 1.7
diff -u -r1.7 ASTClassSpecifier.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTClassSpecifier.java	15 Dec 2003 19:49:56 -0000	1.7
+++ parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTClassSpecifier.java	15 Dec 2003 20:08:46 -0000
@@ -268,11 +268,4 @@
     	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;
-	}
 }
Index: parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTCodeScope.java
===================================================================
retrieving revision 1.5
diff -u -r1.5 ASTCodeScope.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTCodeScope.java	15 Dec 2003 19:49:56 -0000	1.5
+++ parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTCodeScope.java	15 Dec 2003 20:08:46 -0000
@@ -77,7 +77,7 @@
     {
         return ownerCodeScope;
     }
-    
+
     public Iterator getDeclarations()
     {
     	return declarations.iterator();
@@ -87,13 +87,5 @@
     {
     	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;
-	}
 
 }
Index: parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTCompilationUnit.java
===================================================================
retrieving revision 1.4
diff -u -r1.4 ASTCompilationUnit.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTCompilationUnit.java	15 Dec 2003 19:49:56 -0000	1.4
+++ parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTCompilationUnit.java	15 Dec 2003 20:08:46 -0000
@@ -70,7 +70,7 @@
             /* do nothing */
         }
     }
-    
+
     public Iterator getDeclarations()
     {
     	return declarations.iterator();
@@ -79,12 +79,4 @@
     {
     	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;
-	}
 }
Index: parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTElaboratedTypeSpecifier.java
===================================================================
retrieving revision 1.7
diff -u -r1.7 ASTElaboratedTypeSpecifier.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTElaboratedTypeSpecifier.java	3 Nov 2003 14:17:15 -0000	1.7
+++ parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTElaboratedTypeSpecifier.java	15 Dec 2003 20:08:46 -0000
@@ -168,11 +168,4 @@
 	{
 		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;
-	}
 }
Index: parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTEnumerationSpecifier.java
===================================================================
retrieving revision 1.4
diff -u -r1.4 ASTEnumerationSpecifier.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTEnumerationSpecifier.java	3 Nov 2003 14:17:15 -0000	1.4
+++ parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTEnumerationSpecifier.java	15 Dec 2003 20:08:46 -0000
@@ -155,12 +155,4 @@
 	{
 		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;
-	}
 }
Index: parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTEnumerator.java
===================================================================
retrieving revision 1.4
diff -u -r1.4 ASTEnumerator.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTEnumerator.java	3 Nov 2003 14:17:15 -0000	1.4
+++ parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTEnumerator.java	15 Dec 2003 20:08:47 -0000
@@ -138,11 +138,4 @@
 	{
 		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;
-	}
 }
Index: parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTFunction.java
===================================================================
retrieving revision 1.11
diff -u -r1.11 ASTFunction.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTFunction.java	15 Dec 2003 19:49:56 -0000	1.11
+++ parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTFunction.java	15 Dec 2003 20:08:47 -0000
@@ -330,11 +330,4 @@
     	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;
-	}
 }
Index: parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTLinkageSpecification.java
===================================================================
retrieving revision 1.4
diff -u -r1.4 ASTLinkageSpecification.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTLinkageSpecification.java	3 Nov 2003 14:17:15 -0000	1.4
+++ parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTLinkageSpecification.java	15 Dec 2003 20:08:47 -0000
@@ -15,6 +15,7 @@
 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 @@
 	/* (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;
 	}
Index: parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNamespaceAlias.java
===================================================================
retrieving revision 1.3
diff -u -r1.3 ASTNamespaceAlias.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNamespaceAlias.java	3 Nov 2003 14:17:15 -0000	1.3
+++ parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNamespaceAlias.java	15 Dec 2003 20:08:47 -0000
@@ -147,11 +147,4 @@
 	{
 		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;
-	}
 }
Index: parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNamespaceDefinition.java
===================================================================
retrieving revision 1.4
diff -u -r1.4 ASTNamespaceDefinition.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNamespaceDefinition.java	15 Dec 2003 19:49:56 -0000	1.4
+++ parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNamespaceDefinition.java	15 Dec 2003 20:08:47 -0000
@@ -174,11 +174,4 @@
 		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;
-	}
 }
Index: parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTParameterDeclaration.java
===================================================================
retrieving revision 1.7
diff -u -r1.7 ASTParameterDeclaration.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTParameterDeclaration.java	3 Nov 2003 14:17:15 -0000	1.7
+++ parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTParameterDeclaration.java	15 Dec 2003 20:08:47 -0000
@@ -193,12 +193,5 @@
 	{
 		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;
-	}
-    
+ 
 }
Index: parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTSimpleTypeSpecifier.java
===================================================================
retrieving revision 1.3
diff -u -r1.3 ASTSimpleTypeSpecifier.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTSimpleTypeSpecifier.java	3 Nov 2003 14:17:15 -0000	1.3
+++ parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTSimpleTypeSpecifier.java	15 Dec 2003 20:08:47 -0000
@@ -13,6 +13,7 @@
 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 @@
 	/* (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;
 	}
Index: parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTSymbolOwner.java
===================================================================
retrieving revision 1.2
diff -u -r1.2 ASTSymbolOwner.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTSymbolOwner.java	11 Sep 2003 18:05:55 -0000	1.2
+++ parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTSymbolOwner.java	15 Dec 2003 20:08:47 -0000
@@ -17,7 +17,7 @@
  * @author jcamelon
  *
  */
-public class ASTSymbolOwner implements ISymbolOwner
+public class ASTSymbolOwner extends ASTNode implements ISymbolOwner
 {
     protected ISymbol symbol;
     /**
Index: parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateDeclaration.java
===================================================================
retrieving revision 1.2
diff -u -r1.2 ASTTemplateDeclaration.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateDeclaration.java	3 Nov 2003 14:17:15 -0000	1.2
+++ parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateDeclaration.java	15 Dec 2003 20:08:47 -0000
@@ -14,6 +14,7 @@
 
 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 @@
 	/* (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;
 	}
Index: parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateInstantiation.java
===================================================================
retrieving revision 1.2
diff -u -r1.2 ASTTemplateInstantiation.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateInstantiation.java	3 Nov 2003 14:17:15 -0000	1.2
+++ parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateInstantiation.java	15 Dec 2003 20:08:48 -0000
@@ -12,6 +12,7 @@
 
 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 @@
 	/* (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;
 	}
Index: parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateSpecialization.java
===================================================================
retrieving revision 1.2
diff -u -r1.2 ASTTemplateSpecialization.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateSpecialization.java	3 Nov 2003 14:17:15 -0000	1.2
+++ parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateSpecialization.java	15 Dec 2003 20:08:48 -0000
@@ -12,6 +12,7 @@
 
 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 @@
 	/* (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;
 	}
Index: parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTypedef.java
===================================================================
retrieving revision 1.5
diff -u -r1.5 ASTTypedef.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTypedef.java	3 Nov 2003 14:17:15 -0000	1.5
+++ parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTypedef.java	15 Dec 2003 20:08:48 -0000
@@ -167,12 +167,4 @@
 		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;
-	}
-	
 }
Index: parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTUsingDeclaration.java
===================================================================
retrieving revision 1.3
diff -u -r1.3 ASTUsingDeclaration.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTUsingDeclaration.java	3 Nov 2003 14:17:15 -0000	1.3
+++ parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTUsingDeclaration.java	15 Dec 2003 20:08:48 -0000
@@ -15,6 +15,7 @@
 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 @@
 	/* (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;
 	}
Index: parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTUsingDirective.java
===================================================================
retrieving revision 1.4
diff -u -r1.4 ASTUsingDirective.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTUsingDirective.java	3 Nov 2003 14:17:15 -0000	1.4
+++ parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTUsingDirective.java	15 Dec 2003 20:08:48 -0000
@@ -15,6 +15,7 @@
 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 @@
 	/* (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;
 	}
Index: parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTVariable.java
===================================================================
retrieving revision 1.7
diff -u -r1.7 ASTVariable.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTVariable.java	3 Nov 2003 14:17:15 -0000	1.7
+++ parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTVariable.java	15 Dec 2003 20:08:48 -0000
@@ -16,6 +16,7 @@
 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 @@
     {
         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;
-	}
+
 }
Index: parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java
===================================================================
retrieving revision 1.59
diff -u -r1.59 CompleteParseASTFactory.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java	3 Dec 2003 21:48:19 -0000	1.59
+++ parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java	15 Dec 2003 20:08:50 -0000
@@ -46,6 +46,7 @@
 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 @@
     {
     	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;
+		
+	}
 }
Index: parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTASMDefinition.java
===================================================================
retrieving revision 1.6
diff -u -r1.6 ASTASMDefinition.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTASMDefinition.java	3 Nov 2003 14:17:15 -0000	1.6
+++ parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTASMDefinition.java	15 Dec 2003 20:08:50 -0000
@@ -12,6 +12,7 @@
 
 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 @@
 	/* (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;
 	}
Index: parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTAbstractTypeSpecifierDeclaration.java
===================================================================
retrieving revision 1.5
diff -u -r1.5 ASTAbstractTypeSpecifierDeclaration.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTAbstractTypeSpecifierDeclaration.java	3 Nov 2003 14:17:15 -0000	1.5
+++ parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTAbstractTypeSpecifierDeclaration.java	15 Dec 2003 20:08:50 -0000
@@ -12,6 +12,7 @@
 
 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 @@
 	/* (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;
 	}
Index: parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTCompilationUnit.java
===================================================================
retrieving revision 1.6
diff -u -r1.6 ASTCompilationUnit.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTCompilationUnit.java	12 Dec 2003 02:01:50 -0000	1.6
+++ parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTCompilationUnit.java	15 Dec 2003 20:08:50 -0000
@@ -17,6 +17,7 @@
 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 @@
 	/* (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;
 	}
Index: parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTElaboratedTypeSpecifier.java
===================================================================
retrieving revision 1.9
diff -u -r1.9 ASTElaboratedTypeSpecifier.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTElaboratedTypeSpecifier.java	3 Nov 2003 14:17:15 -0000	1.9
+++ parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTElaboratedTypeSpecifier.java	15 Dec 2003 20:08:50 -0000
@@ -14,6 +14,7 @@
 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 @@
 	/* (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;
 	}
Index: parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTFunction.java
===================================================================
retrieving revision 1.14
diff -u -r1.14 ASTFunction.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTFunction.java	3 Nov 2003 14:17:15 -0000	1.14
+++ parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTFunction.java	15 Dec 2003 20:08:51 -0000
@@ -19,6 +19,7 @@
 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 @@
 	/* (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;
 	}
Index: parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTLinkageSpecification.java
===================================================================
retrieving revision 1.7
diff -u -r1.7 ASTLinkageSpecification.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTLinkageSpecification.java	3 Nov 2003 14:17:15 -0000	1.7
+++ parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTLinkageSpecification.java	15 Dec 2003 20:08:51 -0000
@@ -17,6 +17,7 @@
 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 @@
 	/* (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;
 	}
Index: parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTNamespaceAlias.java
===================================================================
retrieving revision 1.3
diff -u -r1.3 ASTNamespaceAlias.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTNamespaceAlias.java	3 Nov 2003 14:17:15 -0000	1.3
+++ parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTNamespaceAlias.java	15 Dec 2003 20:08:51 -0000
@@ -14,6 +14,7 @@
 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 @@
 	/* (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;
 	}
Index: parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTNamespaceDefinition.java
===================================================================
retrieving revision 1.9
diff -u -r1.9 ASTNamespaceDefinition.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTNamespaceDefinition.java	3 Nov 2003 14:17:15 -0000	1.9
+++ parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTNamespaceDefinition.java	15 Dec 2003 20:08:51 -0000
@@ -17,6 +17,7 @@
 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 @@
 	/* (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;
 	}
Index: parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTScopedTypeSpecifier.java
===================================================================
retrieving revision 1.4
diff -u -r1.4 ASTScopedTypeSpecifier.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTScopedTypeSpecifier.java	3 Nov 2003 14:17:15 -0000	1.4
+++ parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTScopedTypeSpecifier.java	15 Dec 2003 20:08:51 -0000
@@ -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 @@
 	/* (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;
 	}
Index: parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTSimpleTypeSpecifier.java
===================================================================
retrieving revision 1.6
diff -u -r1.6 ASTSimpleTypeSpecifier.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTSimpleTypeSpecifier.java	3 Nov 2003 14:17:15 -0000	1.6
+++ parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTSimpleTypeSpecifier.java	15 Dec 2003 20:08:51 -0000
@@ -15,6 +15,7 @@
 
 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 @@
 	/* (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;
 	}
Index: parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateDeclaration.java
===================================================================
retrieving revision 1.6
diff -u -r1.6 ASTTemplateDeclaration.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateDeclaration.java	3 Nov 2003 14:17:15 -0000	1.6
+++ parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateDeclaration.java	15 Dec 2003 20:08:51 -0000
@@ -15,6 +15,7 @@
 
 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 @@
 	/* (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;
 	}
Index: parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateInstantiation.java
===================================================================
retrieving revision 1.5
diff -u -r1.5 ASTTemplateInstantiation.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateInstantiation.java	3 Nov 2003 14:17:15 -0000	1.5
+++ parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateInstantiation.java	15 Dec 2003 20:08:51 -0000
@@ -12,6 +12,7 @@
 
 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 @@
 	/* (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;
 	}
Index: parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateSpecialization.java
===================================================================
retrieving revision 1.5
diff -u -r1.5 ASTTemplateSpecialization.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateSpecialization.java	3 Nov 2003 14:17:15 -0000	1.5
+++ parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateSpecialization.java	15 Dec 2003 20:08:51 -0000
@@ -12,6 +12,7 @@
 
 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 @@
 	/* (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;
 	}
Index: parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTypedefDeclaration.java
===================================================================
retrieving revision 1.6
diff -u -r1.6 ASTTypedefDeclaration.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTypedefDeclaration.java	3 Nov 2003 14:17:15 -0000	1.6
+++ parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTypedefDeclaration.java	15 Dec 2003 20:08:51 -0000
@@ -12,6 +12,7 @@
 
 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 @@
 	/* (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;
 	}
Index: parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTUsingDeclaration.java
===================================================================
retrieving revision 1.8
diff -u -r1.8 ASTUsingDeclaration.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTUsingDeclaration.java	3 Nov 2003 14:17:15 -0000	1.8
+++ parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTUsingDeclaration.java	15 Dec 2003 20:08:51 -0000
@@ -13,6 +13,7 @@
 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 @@
 	/* (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;
 	}
Index: parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTUsingDirective.java
===================================================================
retrieving revision 1.7
diff -u -r1.7 ASTUsingDirective.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTUsingDirective.java	3 Nov 2003 14:17:15 -0000	1.7
+++ parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTUsingDirective.java	15 Dec 2003 20:08:52 -0000
@@ -13,6 +13,7 @@
 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 @@
 	/* (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;
 	}
Index: parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTVariable.java
===================================================================
retrieving revision 1.11
diff -u -r1.11 ASTVariable.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTVariable.java	3 Nov 2003 14:17:15 -0000	1.11
+++ parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTVariable.java	15 Dec 2003 20:08:52 -0000
@@ -14,6 +14,7 @@
 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 @@
 	/* (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;
 	}   
Index: parser/org/eclipse/cdt/internal/core/parser/ast/quick/QuickParseASTFactory.java
===================================================================
retrieving revision 1.41
diff -u -r1.41 QuickParseASTFactory.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/quick/QuickParseASTFactory.java	24 Oct 2003 17:49:16 -0000	1.41
+++ parser/org/eclipse/cdt/internal/core/parser/ast/quick/QuickParseASTFactory.java	15 Dec 2003 20:08:52 -0000
@@ -38,6 +38,7 @@
 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;
@@ -315,5 +316,13 @@
     {
     	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;
+	}
 
 }
Index: parser/org/eclipse/cdt/internal/core/parser/pst/ParserSymbolTable.java
===================================================================
retrieving revision 1.29
diff -u -r1.29 ParserSymbolTable.java
--- parser/org/eclipse/cdt/internal/core/parser/pst/ParserSymbolTable.java	10 Dec 2003 00:07:26 -0000	1.29
+++ parser/org/eclipse/cdt/internal/core/parser/pst/ParserSymbolTable.java	15 Dec 2003 20:08:53 -0000
@@ -16,6 +16,7 @@
 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 @@
 	 * 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;
Index: parser/org/eclipse/cdt/internal/core/parser/pst/TypeFilter.java
===================================================================
retrieving revision 1.2
diff -u -r1.2 TypeFilter.java
--- parser/org/eclipse/cdt/internal/core/parser/pst/TypeFilter.java	12 Dec 2003 02:01:50 -0000	1.2
+++ parser/org/eclipse/cdt/internal/core/parser/pst/TypeFilter.java	15 Dec 2003 20:08:53 -0000
@@ -96,7 +96,8 @@
 	 * @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 );      }
Index: parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNode.java
===================================================================
RCS file: parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNode.java
diff -N parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNode.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNode.java	1 Jan 1970 00:00:00 -0000
@@ -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();
+		}
+	}
+}
Index: ChangeLog
===================================================================
retrieving revision 1.154
diff -u -r1.154 ChangeLog
--- ChangeLog	12 Dec 2003 19:44:42 -0000	1.154
+++ ChangeLog	15 Dec 2003 20:09:10 -0000
@@ -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.  
 
Index: parser/org/eclipse/cdt/core/parser/tests/CompleteParseBaseTest.java
===================================================================
retrieving revision 1.14
diff -u -r1.14 CompleteParseBaseTest.java
--- parser/org/eclipse/cdt/core/parser/tests/CompleteParseBaseTest.java	12 Dec 2003 02:01:36 -0000	1.14
+++ parser/org/eclipse/cdt/core/parser/tests/CompleteParseBaseTest.java	15 Dec 2003 20:09:12 -0000
@@ -52,6 +52,7 @@
 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 @@
          
             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;
 		}
Index: parser/org/eclipse/cdt/core/parser/tests/ContextualParseTest.java
===================================================================
retrieving revision 1.3
diff -u -r1.3 ContextualParseTest.java
--- parser/org/eclipse/cdt/core/parser/tests/ContextualParseTest.java	12 Dec 2003 19:44:42 -0000	1.3
+++ parser/org/eclipse/cdt/core/parser/tests/ContextualParseTest.java	15 Dec 2003 20:09:12 -0000
@@ -18,6 +18,12 @@
 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;
 
 /**
@@ -106,5 +112,133 @@
 		assertEquals( node.getCompletionKind(), IASTCompletionNode.CompletionKind.USER_SPECIFIED_NAME );
 		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" );
 	}
 }
Index: ChangeLog
===================================================================
retrieving revision 1.228
diff -u -r1.228 ChangeLog
--- ChangeLog	15 Dec 2003 19:50:46 -0000	1.228
+++ ChangeLog	15 Dec 2003 20:09:25 -0000
@@ -1,3 +1,6 @@
+2003-12-15 Andrew Niefer
+	Updated CompletionEngine to match new signature for IASTNode.lookup
+
 2003-12-15 Hoda Amer
 	Fixed [Bug 47234] new ParserMode required for a better CModel :
 	- Added a user preference to build the CModel using Structural mode
Index: src/org/eclipse/cdt/internal/ui/text/contentassist/CompletionEngine.java
===================================================================
retrieving revision 1.5
diff -u -r1.5 CompletionEngine.java
--- src/org/eclipse/cdt/internal/ui/text/contentassist/CompletionEngine.java	15 Dec 2003 19:50:46 -0000	1.5
+++ src/org/eclipse/cdt/internal/ui/text/contentassist/CompletionEngine.java	15 Dec 2003 20:09:30 -0000
@@ -301,7 +301,7 @@
 		// 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 @@
 		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 @@
 		
 		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 @@
 			// 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 @@
 		// 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 @@
 			// 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 @@
 			// 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 @@
 		// 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 @@
 		// 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 @@
 		// 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 @@
 		// 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 @@
 		// 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 )
 		{

Back to the top