Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] Applied [HEAD] Cross references and Elaborated Types

CORE
        Added X-Ref/Elaborated type support w/element requestor callbacks. 
 

TESTS
        Added CompleteParseASTTest::testForewardDeclarationWithUsage(). 

Bogdan : update the Indexer/Search callbacks as I have indicated in the 
comments. 



I Love CDT
JohnC
Index: dom/org/eclipse/cdt/internal/core/dom/DOMBuilder.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/DOMBuilder.java,v
retrieving revision 1.46
diff -u -r1.46 DOMBuilder.java
--- dom/org/eclipse/cdt/internal/core/dom/DOMBuilder.java	12 Aug 2003 18:19:39 -0000	1.46
+++ dom/org/eclipse/cdt/internal/core/dom/DOMBuilder.java	12 Aug 2003 20:36:04 -0000
@@ -951,4 +951,12 @@
         // TODO Auto-generated method stub
         
     }
+    /* (non-Javadoc)
+     * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptElaboratedForewardDeclaration(org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier)
+     */
+    public void acceptElaboratedForewardDeclaration(IASTElaboratedTypeSpecifier elaboratedType)
+    {
+        // TODO Auto-generated method stub
+        
+    }
 }
Index: index/org/eclipse/cdt/internal/core/search/indexing/SourceIndexerRequestor.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/SourceIndexerRequestor.java,v
retrieving revision 1.10
diff -u -r1.10 SourceIndexerRequestor.java
--- index/org/eclipse/cdt/internal/core/search/indexing/SourceIndexerRequestor.java	11 Aug 2003 19:10:45 -0000	1.10
+++ index/org/eclipse/cdt/internal/core/search/indexing/SourceIndexerRequestor.java	12 Aug 2003 20:36:05 -0000
@@ -22,6 +22,7 @@
 import org.eclipse.cdt.core.parser.ast.IASTClassReference;
 import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
 import org.eclipse.cdt.core.parser.ast.IASTCompilationUnit;
+import org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier;
 import org.eclipse.cdt.core.parser.ast.IASTEnumerationReference;
 import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier;
 import org.eclipse.cdt.core.parser.ast.IASTField;
@@ -403,4 +404,11 @@
 		if (reference.getReferencedElement() instanceof IASTMethod)
 		 indexer.addMethodReference((IASTMethod) reference.getReferencedElement());
 	}
+    /* (non-Javadoc)
+     * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptElaboratedForewardDeclaration(org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier)
+     */
+    public void acceptElaboratedForewardDeclaration(IASTElaboratedTypeSpecifier elaboratedType)
+    {
+        // TODO BOGDAN IMPLEMENT THIS        
+    }
 }
Index: parser/ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/ChangeLog,v
retrieving revision 1.97
diff -u -r1.97 ChangeLog
--- parser/ChangeLog	12 Aug 2003 18:19:39 -0000	1.97
+++ parser/ChangeLog	12 Aug 2003 20:36:06 -0000
@@ -1,3 +1,6 @@
+2003-08-12 John Camelon
+	Added X-Ref/Elaborated type support w/element requestor callbacks.  
+
 2003-08-11 John Camelon
 	Added Complete Parse support for ASM Definitions.  
 	Added isVolatile() to abstract declarations.
Index: parser/org/eclipse/cdt/core/parser/ISourceElementRequestor.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ISourceElementRequestor.java,v
retrieving revision 1.9
diff -u -r1.9 ISourceElementRequestor.java
--- parser/org/eclipse/cdt/core/parser/ISourceElementRequestor.java	30 Jul 2003 01:31:13 -0000	1.9
+++ parser/org/eclipse/cdt/core/parser/ISourceElementRequestor.java	12 Aug 2003 20:36:06 -0000
@@ -15,6 +15,7 @@
 import org.eclipse.cdt.core.parser.ast.IASTClassReference;
 import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
 import org.eclipse.cdt.core.parser.ast.IASTCompilationUnit;
+import org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier;
 import org.eclipse.cdt.core.parser.ast.IASTEnumerationReference;
 import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier;
 import org.eclipse.cdt.core.parser.ast.IASTField;
@@ -54,6 +55,7 @@
 	public void acceptASMDefinition( IASTASMDefinition asmDefinition );
 	public void acceptTypedefDeclaration( IASTTypedefDeclaration typedef );
 	public void acceptEnumerationSpecifier( IASTEnumerationSpecifier enumeration );
+	public void acceptElaboratedForewardDeclaration( IASTElaboratedTypeSpecifier elaboratedType );
 	public void acceptAbstractTypeSpecDeclaration( IASTAbstractTypeSpecifierDeclaration abstractDeclaration );
 
 	public void enterFunctionBody( IASTFunction function );
Index: parser/org/eclipse/cdt/core/parser/ast/IASTClassReference.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTClassReference.java,v
retrieving revision 1.2
diff -u -r1.2 IASTClassReference.java
--- parser/org/eclipse/cdt/core/parser/ast/IASTClassReference.java	18 Jul 2003 16:39:22 -0000	1.2
+++ parser/org/eclipse/cdt/core/parser/ast/IASTClassReference.java	12 Aug 2003 20:36:06 -0000
@@ -16,5 +16,5 @@
  */
 public interface IASTClassReference extends IASTReference
 {
-	
+	public boolean isResolved();
 }
Index: parser/org/eclipse/cdt/core/parser/ast/IASTElaboratedTypeSpecifier.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTElaboratedTypeSpecifier.java,v
retrieving revision 1.6
diff -u -r1.6 IASTElaboratedTypeSpecifier.java
--- parser/org/eclipse/cdt/core/parser/ast/IASTElaboratedTypeSpecifier.java	12 Aug 2003 18:19:38 -0000	1.6
+++ parser/org/eclipse/cdt/core/parser/ast/IASTElaboratedTypeSpecifier.java	12 Aug 2003 20:36:06 -0000
@@ -10,13 +10,15 @@
 ***********************************************************************/
 package org.eclipse.cdt.core.parser.ast;
 
+import org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate;
+
 
 
 /**
  * @author jcamelon
  *
  */
-public interface IASTElaboratedTypeSpecifier extends IASTTypeSpecifier, IASTOffsetableElement {
+public interface IASTElaboratedTypeSpecifier extends IASTTypeSpecifier, IASTOffsetableElement, IASTQualifiedNameElement, ISourceElementCallbackDelegate {
 
 	public String getName(); 
 	public ASTClassKind getClassKind();
Index: parser/org/eclipse/cdt/internal/core/parser/NullSourceElementRequestor.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/NullSourceElementRequestor.java,v
retrieving revision 1.9
diff -u -r1.9 NullSourceElementRequestor.java
--- parser/org/eclipse/cdt/internal/core/parser/NullSourceElementRequestor.java	30 Jul 2003 01:31:14 -0000	1.9
+++ parser/org/eclipse/cdt/internal/core/parser/NullSourceElementRequestor.java	12 Aug 2003 20:36:07 -0000
@@ -7,6 +7,7 @@
 import org.eclipse.cdt.core.parser.ast.IASTClassReference;
 import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
 import org.eclipse.cdt.core.parser.ast.IASTCompilationUnit;
+import org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier;
 import org.eclipse.cdt.core.parser.ast.IASTEnumerationReference;
 import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier;
 import org.eclipse.cdt.core.parser.ast.IASTField;
@@ -392,6 +393,15 @@
      * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptMethodReference(org.eclipse.cdt.core.parser.ast.IASTMethodReference)
      */
     public void acceptMethodReference(IASTMethodReference reference)
+    {
+        // TODO Auto-generated method stub
+        
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptElaboratedForewardDeclaration(org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier)
+     */
+    public void acceptElaboratedForewardDeclaration(IASTElaboratedTypeSpecifier elaboratedType)
     {
         // TODO Auto-generated method stub
         
Index: parser/org/eclipse/cdt/internal/core/parser/Parser.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java,v
retrieving revision 1.88
diff -u -r1.88 Parser.java
--- parser/org/eclipse/cdt/internal/core/parser/Parser.java	12 Aug 2003 18:19:38 -0000	1.88
+++ parser/org/eclipse/cdt/internal/core/parser/Parser.java	12 Aug 2003 20:36:11 -0000
@@ -1493,7 +1493,8 @@
  
         ITokenDuple d = name();
         IASTElaboratedTypeSpecifier elaboratedTypeSpec = null;
-        
+		final boolean isForewardDecl = ( LT(1) == IToken.tSEMI );
+		
         try
         {
             elaboratedTypeSpec =
@@ -1503,7 +1504,7 @@
                     d,
                     t.getOffset(),
                     d.getLastToken().getEndOffset(), 
-                    ( LT(1) == IToken.tSEMI ) );
+                    isForewardDecl );
         }
         catch (ASTSemanticException e)
         {
@@ -1511,6 +1512,9 @@
 			throw backtrack;
         }
         sdw.setTypeSpecifier(elaboratedTypeSpec);
+        
+        if( isForewardDecl )
+        	elaboratedTypeSpec.acceptElement( requestor );
     }
     /**
      * Consumes template parameters.  
Index: parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTClassReference.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTClassReference.java,v
retrieving revision 1.2
diff -u -r1.2 ASTClassReference.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTClassReference.java	22 Jul 2003 22:02:20 -0000	1.2
+++ parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTClassReference.java	12 Aug 2003 20:36:11 -0000
@@ -14,6 +14,7 @@
 import org.eclipse.cdt.core.parser.ISourceElementRequestor;
 import org.eclipse.cdt.core.parser.ast.IASTClassReference;
 import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
+import org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier;
 
 /**
  * @author jcamelon
@@ -23,13 +24,13 @@
     extends ASTReference
     implements IASTClassReference
 {
-	private final IASTClassSpecifier reference; 
+    private final IASTTypeSpecifier reference; 
     /**
      * @param i
      * @param string
      * @param specifier
      */
-    public ASTClassReference(int i, String string, IASTClassSpecifier specifier)
+    public ASTClassReference(int i, String string, IASTTypeSpecifier specifier)
     {
     	super( i, string );
 		reference = specifier;
@@ -39,7 +40,7 @@
      */
     public ISourceElementCallbackDelegate getReferencedElement()
     {
-        return reference;
+        return (ISourceElementCallbackDelegate)reference;
     }
     /* (non-Javadoc)
      * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
@@ -59,5 +60,12 @@
      */
     public void exitScope(ISourceElementRequestor requestor)
     {
+    }
+    /* (non-Javadoc)
+     * @see org.eclipse.cdt.core.parser.ast.IASTClassReference#isResolved()
+     */
+    public boolean isResolved()
+    {
+        return ( reference instanceof IASTClassSpecifier );
     }
 }
Index: parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTElaboratedTypeSpecifier.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTElaboratedTypeSpecifier.java,v
retrieving revision 1.2
diff -u -r1.2 ASTElaboratedTypeSpecifier.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTElaboratedTypeSpecifier.java	12 Aug 2003 18:19:39 -0000	1.2
+++ parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTElaboratedTypeSpecifier.java	12 Aug 2003 20:36:11 -0000
@@ -10,10 +10,13 @@
 ***********************************************************************/
 package org.eclipse.cdt.internal.core.parser.ast.complete;
 
+import java.util.List;
+
 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.internal.core.parser.ast.ASTQualifiedNamedElement;
 import org.eclipse.cdt.internal.core.parser.ast.Offsets;
 import org.eclipse.cdt.internal.core.parser.pst.ISymbol;
 
@@ -23,8 +26,11 @@
  */
 public class ASTElaboratedTypeSpecifier extends ASTSymbol implements IASTElaboratedTypeSpecifier
 {
-	private final ASTClassKind kind;
+	private final boolean isForwardDeclaration;
+    private final ASTClassKind kind;
+	private final ASTQualifiedNamedElement qualifiedName;
     private Offsets offsets = new Offsets();
+    private final ASTReferenceStore store; 
 	
     /**
      * @param checkSymbol
@@ -32,12 +38,16 @@
      * @param startingOffset
      * @param endOffset
      */
-    public ASTElaboratedTypeSpecifier(ISymbol checkSymbol, ASTClassKind kind, int startingOffset, int endOffset)
+    public ASTElaboratedTypeSpecifier(ISymbol checkSymbol, ASTClassKind kind, int startingOffset, int endOffset, List references, boolean isDecl )
     {
         super( checkSymbol );
         this.kind = kind;
         setStartingOffset( startingOffset );
         setEndingOffset( endOffset );
+        qualifiedName = new ASTQualifiedNamedElement( getOwnerScope(), checkSymbol.getName() );
+        store = new ASTReferenceStore( references );
+        isForwardDeclaration = isDecl;
+        
     }
     /* (non-Javadoc)
      * @see org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier#getName()
@@ -93,6 +103,9 @@
      */
     public void acceptElement(ISourceElementRequestor requestor)
     {
+    	if( isForwardDeclaration )
+			requestor.acceptElaboratedForewardDeclaration(this);
+		store.processReferences(requestor);
     }
     /* (non-Javadoc)
      * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
@@ -105,5 +118,12 @@
      */
     public void exitScope(ISourceElementRequestor requestor)
     {
+    }
+    /* (non-Javadoc)
+     * @see org.eclipse.cdt.core.parser.ast.IASTQualifiedNameElement#getFullyQualifiedName()
+     */
+    public String[] getFullyQualifiedName()
+    {
+        return qualifiedName.getFullyQualifiedName();
     }
 }
Index: parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java,v
retrieving revision 1.12
diff -u -r1.12 CompleteParseASTFactory.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java	12 Aug 2003 18:19:39 -0000	1.12
+++ parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java	12 Aug 2003 20:36:12 -0000
@@ -400,6 +400,9 @@
 
 		IDerivableContainerSymbol newSymbol = pst.newDerivableContainerSymbol( lastToken.getImage(), pstType );
 		
+		if( classSymbol != null )
+			classSymbol.setTypeSymbol( newSymbol );
+			
 		try
         {
             currentScopeSymbol.addSymbol( newSymbol );
@@ -408,9 +411,6 @@
         {
         	throw new ASTSemanticException();
         }
-		
-		if( classSymbol != null )
-			classSymbol.setTypeSymbol( newSymbol );
 			
         ASTClassSpecifier classSpecifier = new ASTClassSpecifier( newSymbol, kind, type, access, startingOffset, nameOffset, references );
         try
@@ -500,7 +500,7 @@
 				 symbol.getType() == TypeInfo.t_struct || 
 				 symbol.getType() == TypeInfo.t_union ) 
 		{  
-			return new ASTClassReference( offset, string, (IASTClassSpecifier)symbol.getASTExtension().getPrimaryDeclaration() );
+			return new ASTClassReference( offset, string, (IASTTypeSpecifier)symbol.getASTExtension().getPrimaryDeclaration() );
 		}
 		else if( symbol.getTypeInfo().checkBit( TypeInfo.isTypedef ))
 		{
@@ -1296,7 +1296,7 @@
 	            }
 	            
 	            ASTElaboratedTypeSpecifier elab = 
-	            	new ASTElaboratedTypeSpecifier( checkSymbol, kind, startingOffset, endOffset );
+	            	new ASTElaboratedTypeSpecifier( checkSymbol, kind, startingOffset, endOffset, references, isForewardDecl );
 	            	
 	            try
                 {
Index: parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTElaboratedTypeSpecifier.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTElaboratedTypeSpecifier.java,v
retrieving revision 1.5
diff -u -r1.5 ASTElaboratedTypeSpecifier.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTElaboratedTypeSpecifier.java	12 Aug 2003 18:19:38 -0000	1.5
+++ parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTElaboratedTypeSpecifier.java	12 Aug 2003 20:36:13 -0000
@@ -10,9 +10,12 @@
 ***********************************************************************/
 package org.eclipse.cdt.internal.core.parser.ast.quick;
 
+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.IASTScope;
+import org.eclipse.cdt.internal.core.parser.ast.ASTQualifiedNamedElement;
 import org.eclipse.cdt.internal.core.parser.ast.Offsets;
 
 /**
@@ -24,19 +27,21 @@
 
 	private Offsets offsets = new Offsets();
 	private final String typeName;
-	private final ASTClassKind classKind;  
+	private final ASTClassKind classKind;
+	private final ASTQualifiedNamedElement qualifiedName;   
     /**
      * @param elaboratedClassKind
      * @param typeName
      * @param startingOffset
      * @param endOffset
      */
-    public ASTElaboratedTypeSpecifier(ASTClassKind elaboratedClassKind, String typeName, int startingOffset, int endOffset)
+    public ASTElaboratedTypeSpecifier(IASTScope scope, ASTClassKind elaboratedClassKind, String typeName, int startingOffset, int endOffset)
     {
     	classKind = elaboratedClassKind; 
     	this.typeName = typeName;
     	offsets.setStartingOffset( startingOffset );
     	offsets.setEndingOffset( endOffset );
+    	qualifiedName = new ASTQualifiedNamedElement( scope, typeName );
     }
     /* (non-Javadoc)
      * @see org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier#getTypeName()
@@ -87,5 +92,31 @@
     public boolean isResolved() throws ASTNotImplementedException
     {
     	throw new ASTNotImplementedException();
+    }
+    /* (non-Javadoc)
+     * @see org.eclipse.cdt.core.parser.ast.IASTQualifiedNameElement#getFullyQualifiedName()
+     */
+    public String[] getFullyQualifiedName()
+    {
+        return qualifiedName.getFullyQualifiedName();
+    }
+    /* (non-Javadoc)
+     * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
+     */
+    public void acceptElement(ISourceElementRequestor requestor)
+    {
+    	requestor.acceptElaboratedForewardDeclaration(this);
+    }
+    /* (non-Javadoc)
+     * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
+     */
+    public void enterScope(ISourceElementRequestor requestor)
+    {
+    }
+    /* (non-Javadoc)
+     * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
+     */
+    public void exitScope(ISourceElementRequestor requestor)
+    {
     }
 }
Index: parser/org/eclipse/cdt/internal/core/parser/ast/quick/QuickParseASTFactory.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/QuickParseASTFactory.java,v
retrieving revision 1.20
diff -u -r1.20 QuickParseASTFactory.java
--- parser/org/eclipse/cdt/internal/core/parser/ast/quick/QuickParseASTFactory.java	12 Aug 2003 18:19:38 -0000	1.20
+++ parser/org/eclipse/cdt/internal/core/parser/ast/quick/QuickParseASTFactory.java	12 Aug 2003 20:36:13 -0000
@@ -280,6 +280,6 @@
 
     public IASTElaboratedTypeSpecifier createElaboratedTypeSpecifier(IASTScope scope, ASTClassKind elaboratedClassKind, ITokenDuple typeName, int startingOffset, int endOffset, boolean isForewardDecl)
     {
-        return new ASTElaboratedTypeSpecifier( elaboratedClassKind, typeName.toString(), startingOffset, endOffset );
+        return new ASTElaboratedTypeSpecifier( scope, elaboratedClassKind, typeName.toString(), startingOffset, endOffset );
     }
 }
Index: search/org/eclipse/cdt/internal/core/search/matching/MatchLocator.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/matching/MatchLocator.java,v
retrieving revision 1.18
diff -u -r1.18 MatchLocator.java
--- search/org/eclipse/cdt/internal/core/search/matching/MatchLocator.java	12 Aug 2003 14:29:07 -0000	1.18
+++ search/org/eclipse/cdt/internal/core/search/matching/MatchLocator.java	12 Aug 2003 20:36:14 -0000
@@ -35,6 +35,7 @@
 import org.eclipse.cdt.core.parser.ast.IASTClassReference;
 import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
 import org.eclipse.cdt.core.parser.ast.IASTCompilationUnit;
+import org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier;
 import org.eclipse.cdt.core.parser.ast.IASTEnumerationReference;
 import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier;
 import org.eclipse.cdt.core.parser.ast.IASTField;
@@ -413,6 +414,13 @@
 	
 	private IASTScope				currentScope = null;
 	private LinkedList				scopeStack = new LinkedList();
+    /* (non-Javadoc)
+     * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptElaboratedForewardDeclaration(org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier)
+     */
+    public void acceptElaboratedForewardDeclaration(IASTElaboratedTypeSpecifier elaboratedType)
+    {
+		//TODO BOGDAN IMPLEMENT THIS
+    }
 
 
 }
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/ChangeLog,v
retrieving revision 1.55
diff -u -r1.55 ChangeLog
--- ChangeLog	12 Aug 2003 20:19:47 -0000	1.55
+++ ChangeLog	12 Aug 2003 20:34:52 -0000
@@ -1,4 +1,7 @@
-2003-08-12
+2003-08-12 John Camelon
+	Added CompleteParseASTTest::testForewardDeclarationWithUsage(). 
+
+2003-08-12 Hoda Amer
 	Added CompletionProposalsTest to the suit to test the generation 
 	of completion proposals.
 
Index: parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java,v
retrieving revision 1.10
diff -u -r1.10 CompleteParseASTTest.java
--- parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java	12 Aug 2003 18:19:54 -0000	1.10
+++ parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java	12 Aug 2003 20:34:54 -0000
@@ -104,6 +104,7 @@
 	public class FullParseCallback implements ISourceElementRequestor 
 	{
 		private List references = new ArrayList(); 
+		private List forewardDecls = new ArrayList();
         private Stack inclusions = new Stack();
         private Scope compilationUnit;
         
@@ -499,6 +500,22 @@
         {
         	return references;
         }
+
+        /* (non-Javadoc)
+         * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptElaboratedForewardDeclaration(org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier)
+         */
+        public void acceptElaboratedForewardDeclaration(IASTElaboratedTypeSpecifier elaboratedType)
+        {
+            forewardDecls.add( elaboratedType );
+        }
+        /**
+         * @return
+         */
+        public List getForewardDecls()
+        {
+            return forewardDecls;
+        }
+
 	}
 	
 	protected Iterator getDeclarations( IASTScope scope )
@@ -851,6 +868,25 @@
 		assertEquals( variableA.getName(), "a");
 		assertEquals( variableA.getAbstractDeclaration().getTypeSpecifier(), elab ); 
 	}
+	
+	public void testForewardDeclarationWithUsage() throws Exception
+	{
+		Iterator declarations = parse( "class A; A * anA;class A { };").getDeclarations();
+		IASTAbstractTypeSpecifierDeclaration forewardDecl = (IASTAbstractTypeSpecifierDeclaration)declarations.next(); 
+		IASTVariable variable = (IASTVariable)declarations.next();
+		IASTAbstractTypeSpecifierDeclaration classDecl = (IASTAbstractTypeSpecifierDeclaration)declarations.next();
+		IASTElaboratedTypeSpecifier elab = (IASTElaboratedTypeSpecifier)forewardDecl.getTypeSpecifier();
+		IASTClassSpecifier clasSpec = (IASTClassSpecifier)classDecl.getTypeSpecifier();
+		assertEquals( elab.getName(), clasSpec.getName() );
+		String [] fqnClass = clasSpec.getFullyQualifiedName();
+		String [] fqnElab = elab.getFullyQualifiedName();
+		assertEquals( fqnClass.length, fqnElab.length );
+		for( int i = 0; i < fqnClass.length; ++i )
+			assertEquals( fqnClass[i], fqnElab[i]);
+		assertEquals( callback.getReferences().size(), 1 );
+		assertEquals( callback.getForewardDecls().size(), 1 );
+	}
+		
 	
 	public void testASM() throws Exception
 	{

Back to the top