diff --git a/core/org.eclipse.cdt.core.tests/.cdtproject b/core/org.eclipse.cdt.core.tests/.cdtproject
new file mode 100644
index 00000000000..1b2ea839404
--- /dev/null
+++ b/core/org.eclipse.cdt.core.tests/.cdtproject
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTemplateTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTemplateTest.java
index d713ad41c16..6a07613046c 100644
--- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTemplateTest.java
+++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTemplateTest.java
@@ -928,12 +928,12 @@ public class CompleteParseASTTemplateTest extends CompleteParseBaseTest {
public void testBug64753() throws Exception{
Writer writer = new StringWriter();
- writer.write( "template < class _T > void foo () { \n" );
- writer.write( " if( 1 ) { \n" );
- writer.write( " _T p1, p2; \n" );
- writer.write( " int n = p1 - p2; \n" );
- writer.write( " } \n" );
- writer.write( "} \n" );
+ writer.write( "template < class _T > void foo () { \n" ); //$NON-NLS-1$
+ writer.write( " if( 1 ) { \n" ); //$NON-NLS-1$
+ writer.write( " _T p1, p2; \n" ); //$NON-NLS-1$
+ writer.write( " int n = p1 - p2; \n" ); //$NON-NLS-1$
+ writer.write( " } \n" ); //$NON-NLS-1$
+ writer.write( "} \n" ); //$NON-NLS-1$
Iterator i = parse( writer.toString() ).getDeclarations();
@@ -942,13 +942,13 @@ public class CompleteParseASTTemplateTest extends CompleteParseBaseTest {
public void testBug64919() throws Exception{
Writer writer = new StringWriter();
- writer.write("class Foo{}; ");
- writer.write("class Bar{}; ");
- writer.write("template class A {}; ");
- writer.write("template < class X > class A < X, X > : public A< X, Bar> ");
- writer.write("{ typedef int TYPE; }; ");
- writer.write("template < class X > class A < X, Foo > : public A< X, X > ");
- writer.write("{ void f ( TYPE ); }; ");
+ writer.write("class Foo{}; "); //$NON-NLS-1$
+ writer.write("class Bar{}; "); //$NON-NLS-1$
+ writer.write("template class A {}; "); //$NON-NLS-1$
+ writer.write("template < class X > class A < X, X > : public A< X, Bar> "); //$NON-NLS-1$
+ writer.write("{ typedef int TYPE; }; "); //$NON-NLS-1$
+ writer.write("template < class X > class A < X, Foo > : public A< X, X > "); //$NON-NLS-1$
+ writer.write("{ void f ( TYPE ); }; "); //$NON-NLS-1$
Iterator i = parse( writer.toString() ).getDeclarations();
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java
index 5afaabab02a..6300f762d85 100644
--- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java
+++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java
@@ -148,7 +148,8 @@ public class CompleteParseASTTest extends CompleteParseBaseTest
IASTClassSpecifier classA = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)declarations.next()).getTypeSpecifier();
IASTVariable v = (IASTVariable)declarations.next();
assertEquals( v.getName(), "x"); //$NON-NLS-1$
- assertEquals( ((IASTSimpleTypeSpecifier)v.getAbstractDeclaration().getTypeSpecifier()).getTypeSpecifier(), classA );
+ assertEquals( ((IASTSimpleTypeSpecifier)v.getAbstractDeclaration().getTypeSpecifier()).getTypeSpecifier(), classA );
+ assertAllReferences( 1, createTaskList( new Task( classA )));
}
public void testNestedClassReferenceVariable() throws Exception
@@ -241,8 +242,10 @@ public class CompleteParseASTTest extends CompleteParseBaseTest
{
Iterator declarations = parse( "class A { public: \n class B { }; }; const A::B & foo( A * myParam );").getDeclarations(); //$NON-NLS-1$
IASTClassSpecifier classA = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)declarations.next()).getTypeSpecifier();
+ Iterator classDecls = getDeclarations(classA);
+ IASTClassSpecifier classB = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)classDecls.next()).getTypeSpecifier();
IASTFunction function = (IASTFunction)declarations.next();
- assertEquals( callback.getReferences().size(), 3 );
+ assertAllReferences( 3, createTaskList( new Task( classA ,2), new Task(classB)));
}
public void testSimpleMethod() throws Exception
@@ -457,11 +460,7 @@ public class CompleteParseASTTest extends CompleteParseBaseTest
IASTField fieldA = (IASTField)s.next();
IASTMethod methodA = (IASTMethod)s.next();
assertFalse( s.hasNext() );
- assertEquals( callback.getReferences().size(), 2 );
- IASTFieldReference reference1 = (IASTFieldReference)callback.getReferences().get(0);
- IASTVariableReference reference2 = (IASTVariableReference)callback.getReferences().get(1);
- assertEquals( reference1.getReferencedElement(), fieldA );
- assertEquals( reference2.getReferencedElement(), variableX );
+ assertAllReferences( 2, createTaskList( new Task( fieldA), new Task( variableX )));
}
public void testArrayModExpression() throws Exception
@@ -535,26 +534,18 @@ public class CompleteParseASTTest extends CompleteParseBaseTest
public void testQualifiedNameReferences() throws Exception
{
- try { // This is to prove that there are no exceptions
// Used to cause AST Semantic exception
Iterator i = parse( "class A{ class B{ class C { public: int cMethod(); }; }; }; \n int A::B::C::cMethod() {}; \n" ).getDeclarations(); //$NON-NLS-1$
IASTClassSpecifier classA = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier();
Iterator j = getDeclarations(classA);
IASTClassSpecifier classB = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)j.next()).getTypeSpecifier();
Iterator k = getDeclarations(classB);
- IASTClassSpecifier classC = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)k.next()).getTypeSpecifier();
-
+ IASTClassSpecifier classC = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)k.next()).getTypeSpecifier();
// Note : this used to be considered a function, not a method
IASTMethod method = (IASTMethod)i.next();
- assertEquals( callback.getReferences().size(), 3 );
- Iterator references = callback.getReferences().iterator();
- assertEquals( ((IASTClassReference)references.next()).getReferencedElement(), classA );
- assertEquals( ((IASTClassReference)references.next()).getReferencedElement(), classB );
- assertEquals( ((IASTClassReference)references.next()).getReferencedElement(), classC );
- }catch (Exception e){
- fail();
- }
+ assertAllReferences( 3, createTaskList( new Task( classA ), new Task( classB ), new Task( classC )));
+
}
public void testIsConstructor() throws Exception
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseBaseTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseBaseTest.java
index 5ff36345c2a..f456de6f066 100644
--- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseBaseTest.java
+++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseBaseTest.java
@@ -43,6 +43,7 @@ import org.eclipse.cdt.core.parser.ast.IASTDeclaration;
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.IASTEnumerator;
import org.eclipse.cdt.core.parser.ast.IASTEnumeratorReference;
import org.eclipse.cdt.core.parser.ast.IASTExpression;
import org.eclipse.cdt.core.parser.ast.IASTField;
@@ -57,21 +58,29 @@ 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.IASTOffsetableNamedElement;
+import org.eclipse.cdt.core.parser.ast.IASTParameterDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTParameterReference;
import org.eclipse.cdt.core.parser.ast.IASTQualifiedNameElement;
import org.eclipse.cdt.core.parser.ast.IASTReference;
import org.eclipse.cdt.core.parser.ast.IASTScope;
import org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTTemplateInstantiation;
+import org.eclipse.cdt.core.parser.ast.IASTTemplateParameter;
import org.eclipse.cdt.core.parser.ast.IASTTemplateParameterReference;
import org.eclipse.cdt.core.parser.ast.IASTTemplateSpecialization;
+import org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier;
import org.eclipse.cdt.core.parser.ast.IASTTypedefDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTTypedefReference;
import org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTUsingDirective;
import org.eclipse.cdt.core.parser.ast.IASTVariable;
import org.eclipse.cdt.core.parser.ast.IASTVariableReference;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
+import org.eclipse.cdt.internal.core.parser.CompleteParser;
import org.eclipse.cdt.internal.core.parser.ParserException;
+import org.eclipse.cdt.internal.core.parser.ast.complete.ReferenceCache;
+import org.eclipse.cdt.internal.core.parser.ast.complete.ReferenceCache.ASTTypedefReference;
/**
* @author jcamelon
@@ -170,21 +179,21 @@ public class CompleteParseBaseTest extends TestCase
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
@@ -315,9 +324,9 @@ public class CompleteParseBaseTest extends TestCase
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterCompilationUnit(org.eclipse.cdt.core.parser.ast.IASTCompilationUnit)
*/
- public void enterCompilationUnit(IASTCompilationUnit compilationUnit)
+ public void enterCompilationUnit(IASTCompilationUnit cu)
{
- pushScope( compilationUnit );
+ pushScope( cu );
this.compilationUnit = getCurrentScope();
}
@@ -494,7 +503,7 @@ public class CompleteParseBaseTest extends TestCase
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitCompilationUnit(org.eclipse.cdt.core.parser.ast.IASTCompilationUnit)
*/
- public void exitCompilationUnit(IASTCompilationUnit compilationUnit)
+ public void exitCompilationUnit(IASTCompilationUnit cu )
{
}
@@ -610,7 +619,41 @@ public class CompleteParseBaseTest extends TestCase
protected void processReference(IASTReference reference)
{
- references.add( reference );
+ ISourceElementCallbackDelegate referencedElement = reference.getReferencedElement();
+ IASTReference r = null;
+ if (referencedElement instanceof IASTTypedefDeclaration)
+ r = new ASTTypedefReference(reference.getOffset(),
+ (IASTTypedefDeclaration) referencedElement);
+ if (referencedElement instanceof IASTEnumerationSpecifier)
+ r = new ReferenceCache.ASTEnumerationReference(reference.getOffset(),
+ (IASTEnumerationSpecifier) referencedElement);
+ if (referencedElement instanceof IASTTemplateParameter)
+ r = new ReferenceCache.ASTTemplateParameterReference(reference.getOffset(),
+ (IASTTemplateParameter) referencedElement);
+ if (referencedElement instanceof IASTParameterDeclaration)
+ r = new ReferenceCache.ASTParameterReference(reference.getOffset(),
+ (IASTParameterDeclaration) referencedElement);
+ if (referencedElement instanceof IASTTypeSpecifier)
+ r = new ReferenceCache.ASTClassReference(reference.getOffset(),
+ (IASTTypeSpecifier) referencedElement);
+ if (referencedElement instanceof IASTNamespaceDefinition)
+ r = new ReferenceCache.ASTNamespaceReference(reference.getOffset(),
+ (IASTNamespaceDefinition) referencedElement);
+ if (referencedElement instanceof IASTFunction)
+ r = new ReferenceCache.ASTFunctionReference(reference.getOffset(),
+ (IASTFunction) referencedElement);
+ if (referencedElement instanceof IASTMethod)
+ r = new ReferenceCache.ASTMethodReference(reference.getOffset(), (IASTMethod) referencedElement);
+ if (referencedElement instanceof IASTField)
+ r = new ReferenceCache.ASTFieldReference(reference.getOffset(), (IASTField) referencedElement);
+ if (referencedElement instanceof IASTVariable)
+ r = new ReferenceCache.ASTVariableReference(reference.getOffset(),
+ (IASTVariable) referencedElement);
+ if (referencedElement instanceof IASTEnumerator)
+ r = new ReferenceCache.ASTEnumeratorReference(reference.getOffset(),
+ (IASTEnumerator) referencedElement);
+ if( r != null )
+ references.add( r );
// System.out.println( "Callback received Reference to " + reference.getName() + " @ offset " + reference.getOffset() );
}
@@ -757,6 +800,7 @@ public class CompleteParseBaseTest extends TestCase
ParserMode.COMPLETE_PARSE, language, callback, new NullLogService(), null ), callback, ParserMode.COMPLETE_PARSE, language, null
);
if( ! parser.parse() && throwOnError ) throw new ParserException( "FAILURE"); //$NON-NLS-1$
+ assertTrue( ((CompleteParser)parser).validateCaches());
return callback.getCompilationUnit();
}
@@ -772,6 +816,7 @@ public class CompleteParseBaseTest extends TestCase
IASTReference r = (IASTReference)allReferences.next();
if( r.getReferencedElement() == element )
{
+ assertEquals( r.getName(), ((IASTOffsetableNamedElement)element).getName() );
if( ! matches.add( r ) && ! allowDuplicates )
fail( "Duplicate reference found for ISourceElementCallbackDelegate: " + element + " @ offset " + r.getOffset() ); //$NON-NLS-1$ //$NON-NLS-2$
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ISourceElementCallbackDelegate.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ISourceElementCallbackDelegate.java
index b6e2c82705d..f28b2dce3c8 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ISourceElementCallbackDelegate.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ISourceElementCallbackDelegate.java
@@ -10,13 +10,15 @@
***********************************************************************/
package org.eclipse.cdt.core.parser;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
+
/**
* @author jcamelon
*
*/
public interface ISourceElementCallbackDelegate
{
- public void acceptElement( ISourceElementRequestor requestor );
- public void enterScope( ISourceElementRequestor requestor );
- public void exitScope( ISourceElementRequestor requestor );
+ public void acceptElement( ISourceElementRequestor requestor, IReferenceManager manager );
+ public void enterScope( ISourceElementRequestor requestor, IReferenceManager manager );
+ public void exitScope( ISourceElementRequestor requestor, IReferenceManager manager );
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ITokenDuple.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ITokenDuple.java
index 6346a4a989c..c1cd71960a1 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ITokenDuple.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ITokenDuple.java
@@ -13,6 +13,8 @@ package org.eclipse.cdt.core.parser;
import java.util.Iterator;
import java.util.List;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
+
/**
* @author jcamelon
@@ -61,4 +63,7 @@ public interface ITokenDuple {
* @return
*/
public abstract String [] toQualifiedName();
+
+ public void freeReferences( IReferenceManager manager );
+ public void acceptElement( ISourceElementRequestor requestor, IReferenceManager manager );
}
\ No newline at end of file
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTDesignator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTDesignator.java
index 161eeac6c4f..a7005c46ae4 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTDesignator.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTDesignator.java
@@ -11,12 +11,13 @@
package org.eclipse.cdt.core.parser.ast;
import org.eclipse.cdt.core.parser.Enum;
+import org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate;
/**
* @author jcamelon
*
*/
-public interface IASTDesignator
+public interface IASTDesignator extends ISourceElementCallbackDelegate
{
public static class DesignatorKind extends Enum
{
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTExceptionSpecification.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTExceptionSpecification.java
index d00509cb06f..d079b7ec802 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTExceptionSpecification.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTExceptionSpecification.java
@@ -12,13 +12,11 @@ package org.eclipse.cdt.core.parser.ast;
import java.util.Iterator;
-import org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate;
-
/**
* @author jcamelon
*
*/
-public interface IASTExceptionSpecification extends ISourceElementCallbackDelegate
+public interface IASTExceptionSpecification
{
public Iterator getTypeIds();
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTExpression.java
index a8616b942ed..34b21493482 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTExpression.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTExpression.java
@@ -261,6 +261,7 @@ public interface IASTExpression extends ISourceElementCallbackDelegate, IASTNode
public Iterator getNewPlacementExpressions();
public Iterator getNewTypeIdExpressions();
public Iterator getNewInitializerExpressions();
+ public void freeReferences( IReferenceManager manager );
}
@@ -277,5 +278,10 @@ public interface IASTExpression extends ISourceElementCallbackDelegate, IASTNode
public long evaluateExpression() throws ASTExpressionEvaluationException;
public void reconcileReferences() throws ASTNotImplementedException;
public void purgeReferences() throws ASTNotImplementedException;
+ /**
+ * @param manager TODO
+ *
+ */
+ public void freeReferences(IReferenceManager manager);
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTFactory.java
index 7f668ae2707..25ff8507f29 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTFactory.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTFactory.java
@@ -272,5 +272,8 @@ public interface IASTFactory
public boolean validateDirectMemberOperation(IASTNode node);
public void constructExpressions( boolean flag );
+
+ public IReferenceManager getReferenceManager();
+
}
\ No newline at end of file
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTSimpleTypeSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTSimpleTypeSpecifier.java
index ac942be2cb7..c864e512095 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTSimpleTypeSpecifier.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTSimpleTypeSpecifier.java
@@ -53,5 +53,9 @@ public interface IASTSimpleTypeSpecifier extends IASTTypeSpecifier
public boolean isComplex();
public boolean isImaginary();
- public IASTTypeSpecifier getTypeSpecifier() throws ASTNotImplementedException;
+ public IASTTypeSpecifier getTypeSpecifier() throws ASTNotImplementedException;
+ /**
+ * @param referenceManager
+ */
+ public void releaseReferences(IReferenceManager referenceManager);
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTTypeId.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTTypeId.java
index 4eb4fb12db8..2d492f23ce9 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTTypeId.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTTypeId.java
@@ -36,5 +36,9 @@ public interface IASTTypeId extends ISourceElementCallbackDelegate
public String getFullSignature();
- public ISymbol getTypeSymbol() throws ASTNotImplementedException;
+ public ISymbol getTypeSymbol() throws ASTNotImplementedException;
+ /**
+ * @param manager
+ */
+ public void freeReferences(IReferenceManager manager);
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IReferenceManager.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IReferenceManager.java
new file mode 100644
index 00000000000..e15b2137ce5
--- /dev/null
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IReferenceManager.java
@@ -0,0 +1,28 @@
+/**********************************************************************
+ * Copyright (c) 2002-2004 Rational Software 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 Rational Software - Initial API and implementation
+ ***********************************************************************/
+package org.eclipse.cdt.core.parser.ast;
+
+import java.util.List;
+
+import org.eclipse.cdt.core.parser.ISourceElementRequestor;
+
+/**
+ * @author jcamelon
+ *
+ */
+public interface IReferenceManager {
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTReferenceStore#processReferences()
+ */
+ public void processReferences(List references,
+ ISourceElementRequestor requestor);
+ public void returnReference(IASTReference reference);
+}
\ No newline at end of file
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/CompleteParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/CompleteParser.java
index 812dad330f8..56c27ca166c 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/CompleteParser.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/CompleteParser.java
@@ -22,6 +22,7 @@ import org.eclipse.cdt.core.parser.ParserMode;
import org.eclipse.cdt.core.parser.ast.IASTCompletionNode;
import org.eclipse.cdt.core.parser.ast.IASTScope;
import org.eclipse.cdt.core.parser.extension.IParserExtension;
+import org.eclipse.cdt.internal.core.parser.ast.complete.CompleteParseASTFactory;
/**
* @author jcamelon
@@ -74,4 +75,13 @@ public class CompleteParser extends Parser {
astFactory.setLogger(log);
}
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.internal.core.parser.ExpressionParser#validateCaches()
+ */
+ public boolean validateCaches() {
+ if( super.validateCaches() && astFactory instanceof CompleteParseASTFactory)
+ return ((CompleteParseASTFactory)astFactory).validateCaches();
+ return false;
+ }
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ExpressionParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ExpressionParser.java
index 337fefe78c2..28f627925bf 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ExpressionParser.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ExpressionParser.java
@@ -351,6 +351,8 @@ public class ExpressionParser implements IExpressionParser, IParserData {
}
if( failed ) {
+ if( expression != null )
+ expression.freeReferences(astFactory.getReferenceManager());
throw backtrack;
}
@@ -1401,6 +1403,7 @@ public class ExpressionParser implements IExpressionParser, IParserData {
}
catch (ASTSemanticException e)
{
+ firstExpression.freeReferences(astFactory.getReferenceManager());
throw backtrack;
} catch (Exception e)
{
@@ -1483,6 +1486,8 @@ public class ExpressionParser implements IExpressionParser, IParserData {
catch( BacktrackException bte )
{
backup( mark );
+ if( typeId != null )
+ typeId.freeReferences(astFactory.getReferenceManager());
throw bte;
}
mark = null; // clean up mark so that we can garbage collect
@@ -2971,4 +2976,9 @@ public class ExpressionParser implements IExpressionParser, IParserData {
public String getFilenameForIndex(int index) {
return scanner.getFilenameForIndex(index);
}
+
+ public boolean validateCaches()
+ {
+ return true;
+ }
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java
index 2dc9c8660fc..fa16f1cd9e9 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java
@@ -62,7 +62,6 @@ import org.eclipse.cdt.core.parser.extension.IParserExtension;
import org.eclipse.cdt.internal.core.parser.token.KeywordSets;
import org.eclipse.cdt.internal.core.parser.token.TokenFactory;
import org.eclipse.cdt.internal.core.parser.token.KeywordSets.Key;
-import org.eclipse.cdt.internal.core.parser.util.TraceUtil;
/**
* This is our first implementation of the IParser interface, serving as a parser for
@@ -133,11 +132,11 @@ public abstract class Parser extends ExpressionParser implements IParser
return;
}
- compilationUnit.enterScope( requestor );
+ compilationUnit.enterScope( requestor, astFactory.getReferenceManager() );
try {
setCompletionValues(compilationUnit, CompletionKind.VARIABLE_TYPE, Key.DECLARATION );
} catch (EndOfFileException e1) {
- compilationUnit.exitScope( requestor );
+ compilationUnit.exitScope( requestor, astFactory.getReferenceManager() );
return;
}
@@ -186,7 +185,7 @@ public abstract class Parser extends ExpressionParser implements IParser
failParse();
}
}
- compilationUnit.exitScope( requestor );
+ compilationUnit.exitScope( requestor, astFactory.getReferenceManager() );
}
/**
* This function is called whenever we encounter and error that we cannot backtrack out of and we
@@ -264,7 +263,7 @@ public abstract class Parser extends ExpressionParser implements IParser
logException( "usingClause:createUsingDirective", e1 ); //$NON-NLS-1$
throw backtrack;
}
- astUD.acceptElement(requestor);
+ astUD.acceptElement(requestor, astFactory.getReferenceManager());
return astUD;
}
throw backtrack;
@@ -308,7 +307,7 @@ public abstract class Parser extends ExpressionParser implements IParser
logException( "usingClause:createUsingDeclaration", e1 ); //$NON-NLS-1$
throw backtrack;
}
- declaration.acceptElement( requestor );
+ declaration.acceptElement( requestor, astFactory.getReferenceManager() );
setCompletionValues(scope, getCompletionKindForDeclaration(scope, null), Key.DECLARATION );
return declaration;
}
@@ -352,7 +351,7 @@ public abstract class Parser extends ExpressionParser implements IParser
throw backtrack;
}
- linkage.enterScope( requestor );
+ linkage.enterScope( requestor, astFactory.getReferenceManager() );
linkageDeclarationLoop : while (LT(1) != IToken.tRBRACE)
{
int checkToken = LA(1).hashCode();
@@ -379,7 +378,7 @@ public abstract class Parser extends ExpressionParser implements IParser
// consume the }
IToken lastTokenConsumed = consume();
linkage.setEndingOffsetAndLineNumber(lastTokenConsumed.getEndOffset(), lastTokenConsumed.getLineNumber());
- linkage.exitScope( requestor );
+ linkage.exitScope( requestor, astFactory.getReferenceManager() );
return linkage;
}
// single declaration
@@ -398,9 +397,9 @@ public abstract class Parser extends ExpressionParser implements IParser
logException( "linkageSpecification_2:createLinkageSpecification", e ); //$NON-NLS-1$
throw backtrack;
}
- linkage.enterScope( requestor );
+ linkage.enterScope( requestor, astFactory.getReferenceManager() );
declaration(linkage, null, null);
- linkage.exitScope( requestor );
+ linkage.exitScope( requestor, astFactory.getReferenceManager() );
return linkage;
}
@@ -448,10 +447,10 @@ public abstract class Parser extends ExpressionParser implements IParser
backup( mark );
throw backtrack;
}
- templateInstantiation.enterScope( requestor );
+ templateInstantiation.enterScope( requestor, astFactory.getReferenceManager() );
declaration(templateInstantiation, templateInstantiation, null);
templateInstantiation.setEndingOffsetAndLineNumber(lastToken.getEndOffset(), lastToken.getLineNumber());
- templateInstantiation.exitScope( requestor );
+ templateInstantiation.exitScope( requestor, astFactory.getReferenceManager() );
return templateInstantiation;
}
@@ -475,11 +474,11 @@ public abstract class Parser extends ExpressionParser implements IParser
backup( mark );
throw backtrack;
}
- templateSpecialization.enterScope(requestor);
+ templateSpecialization.enterScope(requestor, astFactory.getReferenceManager());
declaration(templateSpecialization, templateSpecialization, null);
templateSpecialization.setEndingOffsetAndLineNumber(
lastToken.getEndOffset(), lastToken.getLineNumber());
- templateSpecialization.exitScope(requestor);
+ templateSpecialization.exitScope(requestor, astFactory.getReferenceManager());
return templateSpecialization;
}
@@ -503,16 +502,16 @@ public abstract class Parser extends ExpressionParser implements IParser
logException( "templateDeclaration:createTemplateDeclaration", e ); //$NON-NLS-1$
throw backtrack;
}
- templateDecl.enterScope( requestor );
+ templateDecl.enterScope( requestor, astFactory.getReferenceManager() );
try{
declaration(templateDecl, templateDecl, null );
} catch( EndOfFileException e ){
templateDecl.setEndingOffsetAndLineNumber( lastToken.getEndOffset(), lastToken.getLineNumber() );
- templateDecl.exitScope( requestor );
+ templateDecl.exitScope( requestor, astFactory.getReferenceManager() );
throw e;
}
templateDecl.setEndingOffsetAndLineNumber( lastToken.getEndOffset(), lastToken.getLineNumber() );
- templateDecl.exitScope( requestor );
+ templateDecl.exitScope( requestor, astFactory.getReferenceManager() );
return templateDecl;
}
catch (BacktrackException bt)
@@ -757,7 +756,7 @@ public abstract class Parser extends ExpressionParser implements IParser
}
// if we made it this far, then we have all we need
// do the callback
- resultDeclaration.acceptElement(requestor);
+ resultDeclaration.acceptElement(requestor, astFactory.getReferenceManager());
setCompletionValues(scope, kind, Key.DECLARATION );
break;
case IToken.t_namespace :
@@ -887,7 +886,7 @@ public abstract class Parser extends ExpressionParser implements IParser
logException( "namespaceDefinition:createNamespaceDefinition", e1 ); //$NON-NLS-1$
throw backtrack;
}
- namespaceDefinition.enterScope( requestor );
+ namespaceDefinition.enterScope( requestor, astFactory.getReferenceManager() );
setCompletionValues(scope,CompletionKind.VARIABLE_TYPE, Key.DECLARATION );
namespaceDeclarationLoop : while (LT(1) != IToken.tRBRACE)
{
@@ -919,7 +918,7 @@ public abstract class Parser extends ExpressionParser implements IParser
namespaceDefinition.setEndingOffsetAndLineNumber(
last.getOffset() + last.getLength(), last.getLineNumber());
setCompletionValues(scope, kind, Key.DECLARATION );
- namespaceDefinition.exitScope( requestor );
+ namespaceDefinition.exitScope( requestor, astFactory.getReferenceManager() );
return namespaceDefinition;
}
else if( LT(1) == IToken.tASSIGN )
@@ -985,11 +984,11 @@ public abstract class Parser extends ExpressionParser implements IParser
CompletionKind completionKindForDeclaration = getCompletionKindForDeclaration(scope, overideKind);
setCompletionValues( scope, completionKindForDeclaration, Key.DECL_SPECIFIER_SEQUENCE );
declSpecifierSeq(sdw, false, strategy == SimpleDeclarationStrategy.TRY_CONSTRUCTOR, completionKindForDeclaration, overrideKey );
+ IASTSimpleTypeSpecifier simpleTypeSpecifier = null;
if (sdw.getTypeSpecifier() == null && sdw.getSimpleType() != IASTSimpleTypeSpecifier.Type.UNSPECIFIED )
try
{
- sdw.setTypeSpecifier(
- astFactory.createSimpleTypeSpecifier(
+ simpleTypeSpecifier = astFactory.createSimpleTypeSpecifier(
scope,
sdw.getSimpleType(),
sdw.getName(),
@@ -1000,7 +999,9 @@ public abstract class Parser extends ExpressionParser implements IParser
sdw.isTypeNamed(),
sdw.isComplex(),
sdw.isImaginary(),
- sdw.isGloballyQualified(), sdw.getExtensionParameters()));
+ sdw.isGloballyQualified(), sdw.getExtensionParameters());
+ sdw.setTypeSpecifier(
+ simpleTypeSpecifier);
sdw.setTypeName( null );
}
catch (Exception e1)
@@ -1009,139 +1010,157 @@ public abstract class Parser extends ExpressionParser implements IParser
throw backtrack;
}
- Declarator declarator = null;
- if (LT(1) != IToken.tSEMI)
- {
- declarator = initDeclarator(sdw, strategy, completionKindForDeclaration, constructInitializersInDeclarations
- );
-
- while (LT(1) == IToken.tCOMMA)
- {
- consume();
- initDeclarator(sdw, strategy, completionKindForDeclaration, constructInitializersInDeclarations );
- }
- }
+ try {
+ Declarator declarator = null;
+ if (LT(1) != IToken.tSEMI)
+ {
+ declarator = initDeclarator(sdw, strategy, completionKindForDeclaration, constructInitializersInDeclarations
+ );
+
+ while (LT(1) == IToken.tCOMMA)
+ {
+ consume();
+ initDeclarator(sdw, strategy, completionKindForDeclaration, constructInitializersInDeclarations );
+ }
+ }
- boolean hasFunctionBody = false;
- boolean hasFunctionTryBlock = false;
- boolean consumedSemi = false;
-
- switch (LT(1))
- {
- case IToken.tSEMI :
- consume(IToken.tSEMI);
- consumedSemi = true;
- break;
- case IToken.t_try :
- consume( IToken.t_try );
- if( LT(1) == IToken.tCOLON )
- ctorInitializer( declarator );
- hasFunctionTryBlock = true;
- declarator.setFunctionTryBlock( true );
- break;
- case IToken.tCOLON :
- ctorInitializer(declarator);
- break;
- case IToken.tLBRACE:
- break;
- case IToken.tRPAREN:
- if( ! fromCatchHandler )
- throw backtrack;
- break;
- default:
- throw backtrack;
- }
-
- if( ! consumedSemi )
- {
- if( LT(1) == IToken.tLBRACE )
- {
- declarator.setHasFunctionBody(true);
- hasFunctionBody = true;
- }
-
- if( fromCatchHandler )
- return null;
-
- if( hasFunctionTryBlock && ! hasFunctionBody )
- throw backtrack;
- }
-
- List l = null;
- try
- {
- l = sdw.createASTNodes(astFactory);
- }
- catch (ASTSemanticException e)
- {
- throw backtrack;
- }
- catch( Exception e )
- {
- logException( "simpleDecl", e ); //$NON-NLS-1$
- throw backtrack;
- }
- Iterator i = l.iterator();
- if (hasFunctionBody && l.size() != 1)
- {
- throw backtrack; //TODO Should be an IProblem
- }
- if (i.hasNext()) // no need to do this unless we have a declarator
- {
- if (!hasFunctionBody)
- {
- IASTDeclaration declaration = null;
- while (i.hasNext())
- {
- declaration = (IASTDeclaration)i.next();
- ((IASTOffsetableElement)declaration).setEndingOffsetAndLineNumber(
- lastToken.getEndOffset(), lastToken.getLineNumber());
- declaration.acceptElement( requestor );
- }
- return declaration;
- }
- IASTDeclaration declaration = (IASTDeclaration)i.next();
- endDeclaration( declaration );
- declaration.enterScope( requestor );
-
- if ( !( declaration instanceof IASTScope ) )
- throw backtrack;
+ boolean hasFunctionBody = false;
+ boolean hasFunctionTryBlock = false;
+ boolean consumedSemi = false;
+
+ switch (LT(1))
+ {
+ case IToken.tSEMI :
+ consume(IToken.tSEMI);
+ consumedSemi = true;
+ break;
+ case IToken.t_try :
+ consume( IToken.t_try );
+ if( LT(1) == IToken.tCOLON )
+ ctorInitializer( declarator );
+ hasFunctionTryBlock = true;
+ declarator.setFunctionTryBlock( true );
+ break;
+ case IToken.tCOLON :
+ ctorInitializer(declarator);
+ break;
+ case IToken.tLBRACE:
+ break;
+ case IToken.tRPAREN:
+ if( ! fromCatchHandler )
+ throw backtrack;
+ break;
+ default:
+ throw backtrack;
+ }
+
+ if( ! consumedSemi )
+ {
+ if( LT(1) == IToken.tLBRACE )
+ {
+ declarator.setHasFunctionBody(true);
+ hasFunctionBody = true;
+ }
+
+ if( fromCatchHandler )
+ return null;
+
+ if( hasFunctionTryBlock && ! hasFunctionBody )
+ throw backtrack;
+ }
+
+ List l = null;
+ try
+ {
+ l = sdw.createASTNodes(astFactory);
+ }
+ catch (ASTSemanticException e)
+ {
+ throw backtrack;
+ }
+ catch( Exception e )
+ {
+ logException( "simpleDecl", e ); //$NON-NLS-1$
+ throw backtrack;
+ }
+ Iterator i = l.iterator();
+ if (hasFunctionBody && l.size() != 1)
+ {
+ throw backtrack; //TODO Should be an IProblem
+ }
+ if (i.hasNext()) // no need to do this unless we have a declarator
+ {
+ if (!hasFunctionBody)
+ {
+ IASTDeclaration declaration = null;
+ while (i.hasNext())
+ {
+ declaration = (IASTDeclaration)i.next();
+ ((IASTOffsetableElement)declaration).setEndingOffsetAndLineNumber(
+ lastToken.getEndOffset(), lastToken.getLineNumber());
+ declaration.acceptElement( requestor, astFactory.getReferenceManager() );
+ if( sdw.getTypeSpecifier() instanceof IASTSimpleTypeSpecifier )
+ ((IASTSimpleTypeSpecifier)sdw.getTypeSpecifier()).releaseReferences( astFactory.getReferenceManager() );
+
+ }
+ return declaration;
+ }
+ IASTDeclaration declaration = (IASTDeclaration)i.next();
+ endDeclaration( declaration );
+ declaration.enterScope( requestor, astFactory.getReferenceManager() );
+ if( sdw.getTypeSpecifier() instanceof IASTSimpleTypeSpecifier )
+ ((IASTSimpleTypeSpecifier)sdw.getTypeSpecifier()).releaseReferences( astFactory.getReferenceManager() );
+
+ if ( !( declaration instanceof IASTScope ) )
+ throw backtrack;
- handleFunctionBody((IASTScope)declaration );
- ((IASTOffsetableElement)declaration).setEndingOffsetAndLineNumber(
- lastToken.getEndOffset(), lastToken.getLineNumber());
+ handleFunctionBody((IASTScope)declaration );
+ ((IASTOffsetableElement)declaration).setEndingOffsetAndLineNumber(
+ lastToken.getEndOffset(), lastToken.getLineNumber());
- declaration.exitScope( requestor );
-
- if( hasFunctionTryBlock )
- catchHandlerSequence( scope );
-
- return declaration;
-
- }
-
- try
- {
- if( sdw.getTypeSpecifier() != null )
- {
- IASTAbstractTypeSpecifierDeclaration declaration = astFactory.createTypeSpecDeclaration(
- sdw.getScope(),
- sdw.getTypeSpecifier(),
- ownerTemplate,
- sdw.getStartingOffset(),
- sdw.getStartingLine(), lastToken.getEndOffset(), lastToken.getLineNumber(),
- sdw.isFriend());
- declaration.acceptElement(requestor);
+ declaration.exitScope( requestor, astFactory.getReferenceManager() );
+
+ if( hasFunctionTryBlock )
+ catchHandlerSequence( scope );
+
return declaration;
- }
- }
- catch (Exception e1)
- {
- logException( "simpleDeclaration:createTypeSpecDeclaration", e1 ); //$NON-NLS-1$
- throw backtrack;
- }
+
+ }
+
+ try
+ {
+ if( sdw.getTypeSpecifier() != null )
+ {
+ IASTAbstractTypeSpecifierDeclaration declaration = astFactory.createTypeSpecDeclaration(
+ sdw.getScope(),
+ sdw.getTypeSpecifier(),
+ ownerTemplate,
+ sdw.getStartingOffset(),
+ sdw.getStartingLine(), lastToken.getEndOffset(), lastToken.getLineNumber(),
+ sdw.isFriend());
+ declaration.acceptElement(requestor, astFactory.getReferenceManager());
+ return declaration;
+ }
+ }
+ catch (Exception e1)
+ {
+ logException( "simpleDeclaration:createTypeSpecDeclaration", e1 ); //$NON-NLS-1$
+ throw backtrack;
+ }
- return null;
+ return null;
+ } catch( BacktrackException be )
+ {
+ if( simpleTypeSpecifier != null )
+ simpleTypeSpecifier.releaseReferences(astFactory.getReferenceManager());
+ throw be;
+ }
+ catch( EndOfFileException eof )
+ {
+ if( simpleTypeSpecifier != null )
+ simpleTypeSpecifier.releaseReferences(astFactory.getReferenceManager());
+ throw eof;
+ }
}
@@ -1358,51 +1377,71 @@ public abstract class Parser extends ExpressionParser implements IParser
IToken mark = mark();
Declarator d = new Declarator( sdw );
try
- {
- consumeTemplatedOperatorName( d, kind );
- }
- catch (BacktrackException e)
- {
- backup( mark );
- return false;
- }
- catch ( EndOfFileException eof )
{
- backup( mark );
- return false;
+ try
+ {
+ consumeTemplatedOperatorName( d, kind );
+ }
+ catch (BacktrackException e)
+ {
+ backup( mark );
+ return false;
+ }
+ catch ( EndOfFileException eof )
+ {
+ backup( mark );
+ return false;
+ }
+
+ ITokenDuple duple = d.getNameDuple();
+ if( duple == null )
+ {
+ backup( mark );
+ return false;
+ }
+
+ int lastColon = duple.findLastTokenType(IToken.tCOLON);
+ if( lastColon == -1 )
+ {
+ int lt1 = LT(1);
+ backup( mark );
+ return flags.isForConstructor() && (lt1 == IToken.tLPAREN);
+ }
+
+ IToken className = null;
+ int index = lastColon - 1;
+ if( duple.getToken( index ).getType() == IToken.tGT )
+ {
+ int depth = -1;
+ while( depth == -1 )
+ {
+ if( duple.getToken( --index ).getType() == IToken.tLT )
+ ++depth;
+ }
+ className = duple.getToken( index );
+ }
+
+ boolean result = className.getImage().equals( duple.getLastToken());
+ backup( mark );
+ return result;
+ }
+ finally
+ {
+ if( d.getNameDuple() != null && d.getNameDuple().getTemplateIdArgLists() != null )
+ {
+ List [] arrayOfLists = d.getNameDuple().getTemplateIdArgLists();
+ for( int i = 0; i < arrayOfLists.length; ++i )
+ {
+ if( arrayOfLists[i] == null ) continue;
+ for( int j = 0; j < arrayOfLists[i].size(); ++j )
+ {
+ IASTExpression e = (IASTExpression) arrayOfLists[i].get(j);
+ e.freeReferences( astFactory.getReferenceManager());
+
+ }
+ }
+ }
}
-
- ITokenDuple duple = d.getNameDuple();
- if( duple == null )
- {
- backup( mark );
- return false;
- }
-
- int lastColon = duple.findLastTokenType(IToken.tCOLON);
- if( lastColon == -1 )
- {
- int lt1 = LT(1);
- backup( mark );
- return flags.isForConstructor() && (lt1 == IToken.tLPAREN);
- }
-
- IToken className = null;
- int index = lastColon - 1;
- if( duple.getToken( index ).getType() == IToken.tGT )
- {
- int depth = -1;
- while( depth == -1 )
- {
- if( duple.getToken( --index ).getType() == IToken.tLT )
- ++depth;
- }
- className = duple.getToken( index );
- }
-
- boolean result = className.getImage().equals( duple.getLastToken());
- backup( mark );
- return result;
}
/**
* @param flags input flags that are used to make our decision
@@ -1794,7 +1833,7 @@ public abstract class Parser extends ExpressionParser implements IParser
sdw.setTypeSpecifier(elaboratedTypeSpec);
if( isForewardDecl )
- ((IASTElaboratedTypeSpecifier)elaboratedTypeSpec).acceptElement( requestor );
+ ((IASTElaboratedTypeSpecifier)elaboratedTypeSpec).acceptElement( requestor, astFactory.getReferenceManager() );
}
/**
* Parses the initDeclarator construct of the ANSI C++ spec.
@@ -2259,7 +2298,7 @@ public abstract class Parser extends ExpressionParser implements IParser
consume(); // throw
consume(IToken.tLPAREN); // (
boolean done = false;
- IASTTypeId duple = null;
+ IASTTypeId exceptionTypeId = null;
while (!done)
{
switch (LT(1))
@@ -2272,16 +2311,15 @@ public abstract class Parser extends ExpressionParser implements IParser
consume();
break;
default :
- String image = LA(1).getImage();
try
{
- duple = typeId(scope, false, CompletionKind.EXCEPTION_REFERENCE );
- exceptionSpecIds.add(duple);
+ exceptionTypeId = typeId(scope, false, CompletionKind.EXCEPTION_REFERENCE );
+ exceptionSpecIds.add(exceptionTypeId);
+ exceptionTypeId.acceptElement( requestor, astFactory.getReferenceManager() );
}
catch (BacktrackException e)
{
failParse();
- TraceUtil.outputTrace( log, "Unexpected Token =", null, image, null, null ); //$NON-NLS-1$
consume();
// eat this token anyway
continue;
@@ -2544,7 +2582,7 @@ public abstract class Parser extends ExpressionParser implements IParser
}
IToken t = consume(IToken.tRBRACE);
enumeration.setEndingOffsetAndLineNumber(t.getEndOffset(), t.getLineNumber());
- enumeration.acceptElement( requestor );
+ enumeration.acceptElement( requestor, astFactory.getReferenceManager() );
sdw.setTypeSpecifier(enumeration);
}
else
@@ -2647,7 +2685,7 @@ public abstract class Parser extends ExpressionParser implements IParser
{
consume(IToken.tLBRACE);
setCompletionValues(astClassSpecifier, CompletionKind.FIELD_TYPE, Key.DECLARATION );
- astClassSpecifier.enterScope( requestor );
+ astClassSpecifier.enterScope( requestor, astFactory.getReferenceManager() );
handleClassSpecifier( astClassSpecifier );
memberDeclarationLoop : while (LT(1) != IToken.tRBRACE)
{
@@ -2702,7 +2740,7 @@ public abstract class Parser extends ExpressionParser implements IParser
throw backtrack;
}
- astClassSpecifier.exitScope( requestor );
+ astClassSpecifier.exitScope( requestor, astFactory.getReferenceManager() );
}
@@ -2829,7 +2867,7 @@ public abstract class Parser extends ExpressionParser implements IParser
case IToken.t_case :
consume(IToken.t_case);
IASTExpression constant_expression = constantExpression(scope, CompletionKind.SINGLE_NAME_REFERENCE, Key.EXPRESSION );
- constant_expression.acceptElement(requestor);
+ constant_expression.acceptElement(requestor, astFactory.getReferenceManager());
endExpression(constant_expression);
consume(IToken.tCOLON);
statement(scope);
@@ -2909,7 +2947,7 @@ public abstract class Parser extends ExpressionParser implements IParser
if (LT(1) != IToken.tRPAREN)
{
IASTExpression finalExpression = expression(scope, CompletionKind.SINGLE_NAME_REFERENCE, Key.DECLARATION);
- finalExpression.acceptElement(requestor);
+ finalExpression.acceptElement(requestor, astFactory.getReferenceManager());
endExpression(finalExpression);
}
consume(IToken.tRPAREN);
@@ -2931,7 +2969,7 @@ public abstract class Parser extends ExpressionParser implements IParser
if (LT(1) != IToken.tSEMI)
{
IASTExpression retVal = expression(scope, CompletionKind.SINGLE_NAME_REFERENCE, Key.EXPRESSION);
- retVal.acceptElement(requestor);
+ retVal.acceptElement(requestor, astFactory.getReferenceManager());
endExpression(retVal);
}
consume(IToken.tSEMI);
@@ -2969,17 +3007,20 @@ public abstract class Parser extends ExpressionParser implements IParser
// Note: the function style cast ambiguity is handled in expression
// Since it only happens when we are in a statement
IToken mark = mark();
+ IASTExpression expressionStatement = null;
try
{
- IASTExpression expressionStatement = expression(scope, CompletionKind.SINGLE_NAME_REFERENCE, Key.STATEMENT);
+ expressionStatement = expression(scope, CompletionKind.SINGLE_NAME_REFERENCE, Key.STATEMENT);
consume(IToken.tSEMI);
- expressionStatement.acceptElement( requestor );
+ expressionStatement.acceptElement( requestor, astFactory.getReferenceManager() );
endExpression(expressionStatement);
return;
}
catch (BacktrackException b)
{
backup( mark );
+ if( expressionStatement != null )
+ expressionStatement.freeReferences(astFactory.getReferenceManager());
}
// declarationStatement
@@ -3020,14 +3061,14 @@ public abstract class Parser extends ExpressionParser implements IParser
logException( "singleStatementScope:createNewCodeBlock", e ); //$NON-NLS-1$
throw backtrack;
}
- newScope.enterScope( requestor );
+ newScope.enterScope( requestor, astFactory.getReferenceManager() );
try
{
statement( newScope );
}
finally
{
- newScope.exitScope( requestor );
+ newScope.exitScope( requestor, astFactory.getReferenceManager() );
}
}
@@ -3037,7 +3078,8 @@ public abstract class Parser extends ExpressionParser implements IParser
protected void condition( IASTScope scope ) throws BacktrackException, EndOfFileException
{
IASTExpression someExpression = expression( scope, CompletionKind.SINGLE_NAME_REFERENCE, Key.EXPRESSION );
- someExpression.acceptElement(requestor);
+ someExpression.acceptElement(requestor, astFactory.getReferenceManager());
+
endExpression(someExpression);
}
@@ -3050,9 +3092,10 @@ public abstract class Parser extends ExpressionParser implements IParser
try
{
IASTExpression e = expression( scope, CompletionKind.SINGLE_NAME_REFERENCE, Key.DECLARATION );
- e.acceptElement(requestor);
+ consume( IToken.tSEMI );
+ e.acceptElement(requestor, astFactory.getReferenceManager());
+
- consume( IToken.tSEMI );
}
catch( BacktrackException bt )
{
@@ -3088,7 +3131,7 @@ public abstract class Parser extends ExpressionParser implements IParser
logException( "compoundStatement:createNewCodeBlock", e ); //$NON-NLS-1$
throw backtrack;
}
- newScope.enterScope( requestor );
+ newScope.enterScope( requestor, astFactory.getReferenceManager() );
}
setCompletionValues(
@@ -3116,7 +3159,7 @@ public abstract class Parser extends ExpressionParser implements IParser
consume(IToken.tRBRACE);
if( createNewScope )
- newScope.exitScope( requestor );
+ newScope.exitScope( requestor, astFactory.getReferenceManager() );
}
protected IASTCompilationUnit compilationUnit;
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/ASTAbstractDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/ASTAbstractDeclaration.java
index b9c16ab2bf7..9931bac3495 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/ASTAbstractDeclaration.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/ASTAbstractDeclaration.java
@@ -18,6 +18,7 @@ import org.eclipse.cdt.core.parser.ast.ASTPointerOperator;
import org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTArrayModifier;
import org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
/**
* @author jcamelon
@@ -116,22 +117,22 @@ public class ASTAbstractDeclaration implements IASTAbstractDeclaration
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
Iterator arrayMods = getArrayModifiers();
while( arrayMods.hasNext() )
- ((IASTArrayModifier)arrayMods.next()).acceptElement(requestor);
+ ((IASTArrayModifier)arrayMods.next()).acceptElement(requestor, manager);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/ASTArrayModifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/ASTArrayModifier.java
index bd0839088a0..8e91f1c44ab 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/ASTArrayModifier.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/ASTArrayModifier.java
@@ -13,6 +13,7 @@ package org.eclipse.cdt.internal.core.parser.ast;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ast.IASTArrayModifier;
import org.eclipse.cdt.core.parser.ast.IASTExpression;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
/**
* @author jcamelon
@@ -40,23 +41,23 @@ public class ASTArrayModifier implements IASTArrayModifier
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
if( expression != null )
- expression.acceptElement( requestor );
+ expression.acceptElement( requestor, manager );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/ASTDesignator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/ASTDesignator.java
index 39f1af97226..659b5a7d2c4 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/ASTDesignator.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/ASTDesignator.java
@@ -13,6 +13,7 @@ package org.eclipse.cdt.internal.core.parser.ast;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ast.IASTDesignator;
import org.eclipse.cdt.core.parser.ast.IASTExpression;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
/**
* @author jcamelon
@@ -61,21 +62,21 @@ public class ASTDesignator implements IASTDesignator
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
if( constantExpression != null )
- constantExpression.acceptElement(requestor);
+ constantExpression.acceptElement(requestor, manager);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager )
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager )
{
}
/* (non-Javadoc)
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/ASTInclusion.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/ASTInclusion.java
index 82ca93e712b..9911ac3c63b 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/ASTInclusion.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/ASTInclusion.java
@@ -12,6 +12,7 @@ package org.eclipse.cdt.internal.core.parser.ast;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ast.IASTInclusion;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
/**
* @author jcamelon
@@ -104,7 +105,7 @@ public class ASTInclusion implements IASTInclusion {
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
// TODO Auto-generated method stub
@@ -113,7 +114,7 @@ public class ASTInclusion implements IASTInclusion {
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
@@ -128,7 +129,7 @@ public class ASTInclusion implements IASTInclusion {
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/ASTMacro.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/ASTMacro.java
index ec717aba677..d3d13f7be93 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/ASTMacro.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/ASTMacro.java
@@ -15,6 +15,7 @@ import org.eclipse.cdt.core.parser.IMacroDescriptor;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.IToken;
import org.eclipse.cdt.core.parser.ast.IASTMacro;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
/**
* @author jcamelon
@@ -85,7 +86,7 @@ public class ASTMacro implements IASTMacro {
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
@@ -99,13 +100,13 @@ public class ASTMacro implements IASTMacro {
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTASMDefinition.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTASMDefinition.java
index f67d36da1bf..13286e059b1 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTASMDefinition.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTASMDefinition.java
@@ -12,6 +12,7 @@ package org.eclipse.cdt.internal.core.parser.ast.complete;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ast.IASTASMDefinition;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.internal.core.parser.ast.Offsets;
import org.eclipse.cdt.internal.core.parser.pst.IContainerSymbol;
@@ -72,7 +73,7 @@ public class ASTASMDefinition extends ASTAnonymousDeclaration implements IASTASM
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
@@ -86,13 +87,13 @@ public class ASTASMDefinition extends ASTAnonymousDeclaration implements IASTASM
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTAbstractTypeSpecifierDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTAbstractTypeSpecifierDeclaration.java
index 667c2731edf..63030e00e8e 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTAbstractTypeSpecifierDeclaration.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTAbstractTypeSpecifierDeclaration.java
@@ -14,6 +14,7 @@ import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ast.IASTAbstractTypeSpecifierDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTTemplate;
import org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.internal.core.parser.ast.Offsets;
import org.eclipse.cdt.internal.core.parser.pst.IContainerSymbol;
@@ -46,7 +47,7 @@ public class ASTAbstractTypeSpecifierDeclaration
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
@@ -64,14 +65,14 @@ public class ASTAbstractTypeSpecifierDeclaration
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTBaseSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTBaseSpecifier.java
index cfb0c6df036..5d884af5001 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTBaseSpecifier.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTBaseSpecifier.java
@@ -16,6 +16,7 @@ import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility;
import org.eclipse.cdt.core.parser.ast.IASTBaseSpecifier;
import org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.internal.core.parser.pst.ISymbol;
/**
@@ -85,23 +86,23 @@ public class ASTBaseSpecifier implements IASTBaseSpecifier
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
- ASTReferenceStore.processReferences( references, requestor );
+ manager.processReferences( references, requestor );
references = null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTBinaryExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTBinaryExpression.java
index 077d8ecda3a..c2bfbd3d167 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTBinaryExpression.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTBinaryExpression.java
@@ -16,6 +16,7 @@ import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ITokenDuple;
import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException;
import org.eclipse.cdt.core.parser.ast.IASTExpression;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
/**
* @author jcamelon
@@ -75,9 +76,16 @@ public class ASTBinaryExpression extends ASTUnaryExpression {
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.ast.complete.ASTExpression#processCallbacks()
*/
- protected void processCallbacks( ISourceElementRequestor requestor ) {
- super.processCallbacks(requestor);
- rhs.acceptElement( requestor );
+ protected void processCallbacks( ISourceElementRequestor requestor, IReferenceManager manager ) {
+ super.processCallbacks(requestor, manager);
+ rhs.acceptElement( requestor, manager );
}
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTExpression#freeReferences(org.eclipse.cdt.core.parser.ast.IReferenceManager)
+ */
+ public void freeReferences(IReferenceManager manager) {
+ super.freeReferences(manager);
+ rhs.freeReferences(manager);
+ }
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTClassReference.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTClassReference.java
deleted file mode 100644
index 99424e8ac63..00000000000
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTClassReference.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2002,2003 Rational Software 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 Rational Software - Initial API and implementation
-***********************************************************************/
-package org.eclipse.cdt.internal.core.parser.ast.complete;
-
-import org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate;
-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
- *
- */
-public class ASTClassReference
- extends ASTReference
- implements IASTClassReference
-{
- private final IASTTypeSpecifier reference;
- /**
- * @param i
- * @param string
- * @param specifier
- */
- public ASTClassReference(int i, String string, IASTTypeSpecifier specifier)
- {
- super( i, string );
- reference = specifier;
- }
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.parser.ast.IASTReference#getReferencedElement()
- */
- public ISourceElementCallbackDelegate getReferencedElement()
- {
- return (ISourceElementCallbackDelegate)reference;
- }
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
- */
- public void acceptElement(ISourceElementRequestor requestor)
- {
- try
- {
- requestor.acceptClassReference( this );
- }
- catch (Exception e)
- {
- /* do nothing */
- }
- }
- /* (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)
- {
- }
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.parser.ast.IASTClassReference#isResolved()
- */
- public boolean isResolved()
- {
- return ( reference instanceof IASTClassSpecifier );
- }
-}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTClassSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTClassSpecifier.java
index ffa1a25844e..ab4291c51e4 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTClassSpecifier.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTClassSpecifier.java
@@ -23,6 +23,7 @@ import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
import org.eclipse.cdt.core.parser.ast.IASTDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTReference;
import org.eclipse.cdt.core.parser.ast.IASTScope;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.internal.core.parser.ast.ASTQualifiedNamedElement;
import org.eclipse.cdt.internal.core.parser.ast.NamedOffsets;
import org.eclipse.cdt.internal.core.parser.ast.SymbolIterator;
@@ -166,15 +167,16 @@ public class ASTClassSpecifier extends ASTScope implements IASTClassSpecifier
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
+
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
- ASTReferenceStore.processReferences( references, requestor );
+ manager.processReferences( references, requestor );
references = null;
try
{
@@ -188,18 +190,18 @@ public class ASTClassSpecifier extends ASTScope implements IASTClassSpecifier
while( i.hasNext() )
{
IASTBaseSpecifier baseSpec = (IASTBaseSpecifier)i.next();
- baseSpec.acceptElement(requestor);
+ baseSpec.acceptElement(requestor, manager);
}
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
Iterator i = resolvedCrossReferences.iterator();
while( i.hasNext() )
{
- ((IASTReference)i.next()).acceptElement( requestor );
+ ((IASTReference)i.next()).acceptElement( requestor, manager );
}
try
{
@@ -327,8 +329,16 @@ public class ASTClassSpecifier extends ASTScope implements IASTClassSpecifier
/**
* @param references2
*/
- public void setExtraReferences(List references) {
- resolvedCrossReferences.addAll( references );
+ public void setExtraReferences(List references, ReferenceCache cache ) {
+ if( references != null && !references.isEmpty())
+ {
+ for( int i = 0; i < references.size(); ++i )
+ {
+ IASTReference r = (IASTReference)references.get(i);
+ resolvedCrossReferences.add( cache.getReference(r.getOffset(), r.getReferencedElement()));
+ }
+ }
+
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTClassSpecifier#getFriends()
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTCodeScope.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTCodeScope.java
index 611e0330a3e..be03cecbb2c 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTCodeScope.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTCodeScope.java
@@ -14,6 +14,7 @@ import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ast.IASTCodeScope;
import org.eclipse.cdt.core.parser.ast.IASTDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTFunction;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.internal.core.parser.pst.IContainerSymbol;
/**
@@ -38,13 +39,13 @@ public class ASTCodeScope extends ASTScope implements IASTCodeScope {
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor) {
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor) {
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager) {
try
{
requestor.enterCodeBlock( this );
@@ -58,7 +59,7 @@ public class ASTCodeScope extends ASTScope implements IASTCodeScope {
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor) {
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager) {
try
{
requestor.exitCodeBlock( this );
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTCompilationUnit.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTCompilationUnit.java
index 5a280c46db6..9a5be66ee6e 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTCompilationUnit.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTCompilationUnit.java
@@ -17,6 +17,7 @@ import java.util.List;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ast.IASTCompilationUnit;
import org.eclipse.cdt.core.parser.ast.IASTDeclaration;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.internal.core.parser.pst.ISymbol;
/**
@@ -39,13 +40,13 @@ public class ASTCompilationUnit
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
@@ -59,7 +60,7 @@ public class ASTCompilationUnit
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTConditionalExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTConditionalExpression.java
index 9a9eb795090..77c3c4e1d59 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTConditionalExpression.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTConditionalExpression.java
@@ -16,6 +16,7 @@ import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ITokenDuple;
import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException;
import org.eclipse.cdt.core.parser.ast.IASTExpression;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
/**
* @author jcamelon
@@ -78,10 +79,17 @@ public class ASTConditionalExpression extends ASTBinaryExpression {
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.ast.complete.ASTExpression#processCallbacks()
*/
- protected void processCallbacks( ISourceElementRequestor requestor ) {
- super.processCallbacks(requestor);
- thirdExpression.acceptElement( requestor );
+ protected void processCallbacks( ISourceElementRequestor requestor, IReferenceManager manager ) {
+ super.processCallbacks(requestor, manager);
+ thirdExpression.acceptElement( requestor, manager );
}
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTExpression#freeReferences(org.eclipse.cdt.core.parser.ast.IReferenceManager)
+ */
+ public void freeReferences(IReferenceManager manager) {
+ super.freeReferences(manager);
+ thirdExpression.freeReferences(manager);
+ }
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTConstructorMemberInitializer.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTConstructorMemberInitializer.java
index fb6a24fa792..2c657db8053 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTConstructorMemberInitializer.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTConstructorMemberInitializer.java
@@ -15,6 +15,7 @@ import java.util.List;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ast.IASTConstructorMemberInitializer;
import org.eclipse.cdt.core.parser.ast.IASTExpression;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
/**
* @author jcamelon
@@ -56,21 +57,23 @@ public class ASTConstructorMemberInitializer
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
- ASTReferenceStore.processReferences( references, requestor );
+ manager.processReferences( references, requestor );
references = null;
+ if( expression != null )
+ expression.freeReferences(manager);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/**
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTElaboratedTypeSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTElaboratedTypeSpecifier.java
index c3af3ed51c5..d8f8024ba56 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTElaboratedTypeSpecifier.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTElaboratedTypeSpecifier.java
@@ -15,6 +15,7 @@ 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.IASTElaboratedTypeSpecifier;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.internal.core.parser.ast.ASTQualifiedNamedElement;
import org.eclipse.cdt.internal.core.parser.ast.NamedOffsets;
import org.eclipse.cdt.internal.core.parser.pst.ISymbol;
@@ -101,7 +102,7 @@ public class ASTElaboratedTypeSpecifier extends ASTSymbol implements IASTElabora
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
if( isForwardDeclaration )
try
@@ -112,18 +113,18 @@ public class ASTElaboratedTypeSpecifier extends ASTSymbol implements IASTElabora
{
/* do nothing */
}
- ASTReferenceStore.processReferences( references, requestor );
+ manager.processReferences( references, requestor );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTEmptyExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTEmptyExpression.java
index 9ddd22dc1fe..1dac71a7d1d 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTEmptyExpression.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTEmptyExpression.java
@@ -12,6 +12,8 @@ package org.eclipse.cdt.internal.core.parser.ast.complete;
import java.util.List;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
+
/**
* @author jcamelon
*
@@ -24,4 +26,10 @@ public class ASTEmptyExpression extends ASTExpression {
public ASTEmptyExpression(Kind kind, List references) {
super( kind, references );
}
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTExpression#freeReferences(org.eclipse.cdt.core.parser.ast.IReferenceManager)
+ */
+ public void freeReferences(IReferenceManager manager) {
+ }
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTEnumerationReference.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTEnumerationReference.java
deleted file mode 100644
index d7d503aa3d1..00000000000
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTEnumerationReference.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2002,2003 Rational Software 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 Rational Software - Initial API and implementation
-***********************************************************************/
-package org.eclipse.cdt.internal.core.parser.ast.complete;
-
-import org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate;
-import org.eclipse.cdt.core.parser.ISourceElementRequestor;
-import org.eclipse.cdt.core.parser.ast.IASTEnumerationReference;
-import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier;
-
-/**
- * @author jcamelon
- *
- */
-public class ASTEnumerationReference
- extends ASTReference
- implements IASTEnumerationReference
-{
- private final IASTEnumerationSpecifier referencedElement;
- /**
- * @param offset
- * @param string
- * @param specifier
- */
- public ASTEnumerationReference(int offset, String string, IASTEnumerationSpecifier specifier)
- {
- super( offset, string );
- referencedElement = specifier;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.parser.ast.IASTReference#getReferencedElement()
- */
- public ISourceElementCallbackDelegate getReferencedElement()
- {
- return referencedElement;
- }
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
- */
- public void acceptElement(ISourceElementRequestor requestor)
- {
- try
- {
- requestor.acceptEnumerationReference( this );
- }
- catch (Exception e)
- {
- /* do nothing */
- }
- }
- /* (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)
- {
- }
-}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTEnumerationSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTEnumerationSpecifier.java
index 213df097de1..4eb0c9a2f08 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTEnumerationSpecifier.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTEnumerationSpecifier.java
@@ -17,6 +17,7 @@ import java.util.List;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier;
import org.eclipse.cdt.core.parser.ast.IASTEnumerator;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.internal.core.parser.ast.ASTQualifiedNamedElement;
import org.eclipse.cdt.internal.core.parser.ast.NamedOffsets;
import org.eclipse.cdt.internal.core.parser.pst.ISymbol;
@@ -61,7 +62,7 @@ public class ASTEnumerationSpecifier
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
@@ -75,13 +76,13 @@ public class ASTEnumerationSpecifier
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTEnumerator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTEnumerator.java
index b65b78abf12..04cfd754b54 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTEnumerator.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTEnumerator.java
@@ -14,6 +14,7 @@ import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier;
import org.eclipse.cdt.core.parser.ast.IASTEnumerator;
import org.eclipse.cdt.core.parser.ast.IASTExpression;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.internal.core.parser.ast.NamedOffsets;
import org.eclipse.cdt.internal.core.parser.pst.ISymbol;
@@ -80,19 +81,19 @@ public class ASTEnumerator extends ASTSymbol implements IASTEnumerator
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTEnumeratorReference.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTEnumeratorReference.java
deleted file mode 100644
index 7c68f7efe10..00000000000
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTEnumeratorReference.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2002,2003 Rational Software 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 Rational Software - Initial API and implementation
-***********************************************************************/
-package org.eclipse.cdt.internal.core.parser.ast.complete;
-
-import org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate;
-import org.eclipse.cdt.core.parser.ISourceElementRequestor;
-import org.eclipse.cdt.core.parser.ast.IASTEnumerator;
-import org.eclipse.cdt.core.parser.ast.IASTEnumeratorReference;
-
-/**
- * @author jcamelon
- *
- */
-public class ASTEnumeratorReference extends ASTReference implements IASTEnumeratorReference
-{
-
- private final IASTEnumerator enumerator;
- /**
- * @param offset
- * @param string
- * @param enumerator
- */
- public ASTEnumeratorReference(int offset, String string, IASTEnumerator enumerator)
- {
- super( offset, string );
- this.enumerator = enumerator;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.parser.ast.IASTReference#getReferencedElement()
- */
- public ISourceElementCallbackDelegate getReferencedElement()
- {
- return enumerator;
- }
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
- */
- public void acceptElement(ISourceElementRequestor requestor)
- {
- try
- {
- requestor.acceptEnumeratorReference( this );
- }
- catch (Exception e)
- {
- /* do nothing */
- }
- }
- /* (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)
- {
- }
-}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTExceptionSpecification.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTExceptionSpecification.java
index d3722d3acfb..ef2ce4fc9c7 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTExceptionSpecification.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTExceptionSpecification.java
@@ -13,7 +13,6 @@ package org.eclipse.cdt.internal.core.parser.ast.complete;
import java.util.Iterator;
import java.util.List;
-import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ast.IASTExceptionSpecification;
import org.eclipse.cdt.internal.core.parser.ast.EmptyIterator;
@@ -24,15 +23,12 @@ import org.eclipse.cdt.internal.core.parser.ast.EmptyIterator;
public class ASTExceptionSpecification implements IASTExceptionSpecification
{
private final List typeIds;
- private List references;
/**
* @param newTypeIds
- * @param references
*/
- public ASTExceptionSpecification(List newTypeIds, List references)
+ public ASTExceptionSpecification(List newTypeIds)
{
this.typeIds = newTypeIds;
- this.references = references;
}
/* (non-Javadoc)
@@ -43,27 +39,4 @@ public class ASTExceptionSpecification implements IASTExceptionSpecification
if( typeIds == null ) return EmptyIterator.EMPTY_ITERATOR;
return typeIds.iterator();
}
-
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
- */
- public void acceptElement(ISourceElementRequestor requestor)
- {
- ASTReferenceStore.processReferences( references, requestor );
- references = null;
- }
-
- /* (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)
- {
- }
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTExpression.java
index 243aaa97da6..20b30e13e4b 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTExpression.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTExpression.java
@@ -20,6 +20,7 @@ import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException;
import org.eclipse.cdt.core.parser.ast.IASTExpression;
import org.eclipse.cdt.core.parser.ast.IASTReference;
import org.eclipse.cdt.core.parser.ast.IASTTypeId;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
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.TypeInfo;
@@ -65,7 +66,7 @@ public abstract class ASTExpression extends ASTNode implements IASTExpression
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
@@ -75,10 +76,10 @@ public abstract class ASTExpression extends ASTNode implements IASTExpression
{
// will not get thrown
}
- ASTReferenceStore.processReferences( references, requestor );
+ manager.processReferences( references, requestor );
references = null;
- processCallbacks(requestor);
+ processCallbacks(requestor, manager);
try
{
@@ -92,21 +93,22 @@ public abstract class ASTExpression extends ASTNode implements IASTExpression
/**
* @param requestor TODO
+ * @param manager TODO
*
*/
- protected void processCallbacks(ISourceElementRequestor requestor) {
+ protected void processCallbacks(ISourceElementRequestor requestor, IReferenceManager manager) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
@@ -172,37 +174,41 @@ public abstract class ASTExpression extends ASTNode implements IASTExpression
public IContainerSymbol getLookupQualificationSymbol() throws LookupError {
ExpressionResult result = getResultType();
TypeInfo type = (result != null ) ? result.getResult() : null;
- IContainerSymbol symbol = null;
-
+ IContainerSymbol containerSymbol = null;
if( type != null ){
type = type.getFinalType(true);
if( type.isType( TypeInfo.t_type ) &&
type.getTypeSymbol() != null && type.getTypeSymbol() instanceof IContainerSymbol )
{
- symbol = (IContainerSymbol) type.getTypeSymbol();
+ containerSymbol = (IContainerSymbol) type.getTypeSymbol();
}
type.release();
}
- return symbol;
+ return containerSymbol;
}
public boolean shouldFilterLookupResult( ISymbol symbol ){
ExpressionResult result = getResultType();
TypeInfo type = ( result != null ) ? result.getResult() : null;
- boolean shouldFilter = false;
if( type != null ){
- type = type.getFinalType(false);
+ boolean answer = false;
+ type = type.getFinalType(true);
if( type.checkBit( TypeInfo.isConst ) && !symbol.getTypeInfo().checkBit( TypeInfo.isConst ) )
- shouldFilter = true;
+ {
+
+ answer = true;
+ }
if( type.checkBit( TypeInfo.isVolatile ) && !symbol.getTypeInfo().checkBit( TypeInfo.isVolatile ) )
- shouldFilter = true;
-
+ {
+ answer = true;
+ }
type.release();
+ return answer;
}
- return shouldFilter;
+ return false;
}
/**
@@ -279,4 +285,11 @@ public abstract class ASTExpression extends ASTNode implements IASTExpression
public IASTExpression findNewDescriptor(ITokenDuple finalDuple) {
return null;
}
+
+ public void freeReferences( IReferenceManager manager )
+ {
+ if( references == null || references.isEmpty() ) return;
+ for (int i = 0; i < references.size(); ++i)
+ manager.returnReference( (IASTReference) references.get(i));
+ }
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTField.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTField.java
index 90fd87246a0..c8f5314bedc 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTField.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTField.java
@@ -18,6 +18,7 @@ import org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTExpression;
import org.eclipse.cdt.core.parser.ast.IASTField;
import org.eclipse.cdt.core.parser.ast.IASTInitializerClause;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.internal.core.parser.pst.ISymbol;
/**
@@ -51,7 +52,7 @@ public class ASTField extends ASTVariable implements IASTField
return visibility;
}
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
@@ -61,12 +62,12 @@ public class ASTField extends ASTVariable implements IASTField
{
/* do nothing */
}
- ASTReferenceStore.processReferences(references, requestor);
+ manager.processReferences(references, requestor);
references = null;
if( getInitializerClause() != null )
- getInitializerClause().acceptElement(requestor);
+ getInitializerClause().acceptElement(requestor, manager);
if( getAbstractDeclaration() != null )
- getAbstractDeclaration().acceptElement(requestor);
+ getAbstractDeclaration().acceptElement(requestor, manager);
}
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTFieldReference.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTFieldReference.java
deleted file mode 100644
index 287cd8c3bc7..00000000000
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTFieldReference.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2002,2003 Rational Software 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 Rational Software - Initial API and implementation
-***********************************************************************/
-package org.eclipse.cdt.internal.core.parser.ast.complete;
-
-import org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate;
-import org.eclipse.cdt.core.parser.ISourceElementRequestor;
-import org.eclipse.cdt.core.parser.ast.IASTField;
-import org.eclipse.cdt.core.parser.ast.IASTFieldReference;
-import org.eclipse.cdt.core.parser.ast.IASTReference;
-
-/**
- * @author jcamelon
- *
- */
-public class ASTFieldReference
- extends ASTReference
- implements IASTReference, IASTFieldReference
-{
- private final IASTField referencedElement;
- /**
- * @param offset
- * @param string
- * @param field
- */
- public ASTFieldReference(int offset, String string, IASTField field)
- {
- super(offset, string);
- referencedElement = field;
- }
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.parser.ast.IASTReference#getReferencedElement()
- */
- public ISourceElementCallbackDelegate getReferencedElement()
- {
- return referencedElement;
- }
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
- */
- public void acceptElement(ISourceElementRequestor requestor)
- {
- try
- {
- requestor.acceptFieldReference(this);
- }
- catch (Exception e)
- {
- /* do nothing */
- }
- }
- /* (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)
- {
- }
-}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTFunction.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTFunction.java
index c5654135fae..28e596819e9 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTFunction.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTFunction.java
@@ -23,6 +23,7 @@ import org.eclipse.cdt.core.parser.ast.IASTExceptionSpecification;
import org.eclipse.cdt.core.parser.ast.IASTFunction;
import org.eclipse.cdt.core.parser.ast.IASTParameterDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTTemplate;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.internal.core.parser.ast.ASTQualifiedNamedElement;
import org.eclipse.cdt.internal.core.parser.ast.NamedOffsets;
import org.eclipse.cdt.internal.core.parser.pst.IParameterizedSymbol;
@@ -197,7 +198,7 @@ public class ASTFunction extends ASTScope implements IASTFunction
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
@@ -210,34 +211,33 @@ public class ASTFunction extends ASTScope implements IASTFunction
{
/* do nothing */
}
- functionCallbacks(requestor);
+ functionCallbacks(requestor, manager);
}
- protected void functionCallbacks(ISourceElementRequestor requestor)
+ protected void functionCallbacks(ISourceElementRequestor requestor, IReferenceManager manager)
{
- ASTReferenceStore.processReferences(references, requestor);
+ manager.processReferences(references, requestor);
references = null;
- processParameterInitializersAndArrayMods(requestor);
+ processParameterInitializersAndArrayMods(requestor, manager);
if( getReturnType() != null )
- getReturnType().acceptElement(requestor);
- if( getExceptionSpec() != null )
- getExceptionSpec().acceptElement(requestor);
+ getReturnType().acceptElement(requestor, manager);
}
/**
* @param requestor
+ * @param manager
*/
- protected void processParameterInitializersAndArrayMods(ISourceElementRequestor requestor)
+ protected void processParameterInitializersAndArrayMods(ISourceElementRequestor requestor, IReferenceManager manager)
{
Iterator i = parameters.iterator();
while( i.hasNext() )
{
IASTParameterDeclaration parm = (IASTParameterDeclaration)i.next();
if( parm.getDefaultValue() != null )
- parm.getDefaultValue().acceptElement(requestor);
+ parm.getDefaultValue().acceptElement(requestor, manager);
Iterator arrays = parm.getArrayModifiers();
while( arrays.hasNext() )
{
- ((IASTArrayModifier)arrays.next()).acceptElement(requestor);
+ ((IASTArrayModifier)arrays.next()).acceptElement(requestor, manager);
}
}
}
@@ -246,7 +246,7 @@ public class ASTFunction extends ASTScope implements IASTFunction
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
@@ -256,12 +256,12 @@ public class ASTFunction extends ASTScope implements IASTFunction
{
/* do nothing */
}
- functionCallbacks( requestor );
+ functionCallbacks( requestor, manager );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTFunctionReference.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTFunctionReference.java
deleted file mode 100644
index d359dd38e12..00000000000
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTFunctionReference.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2002,2003 Rational Software 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 Rational Software - Initial API and implementation
-***********************************************************************/
-package org.eclipse.cdt.internal.core.parser.ast.complete;
-
-import org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate;
-import org.eclipse.cdt.core.parser.ISourceElementRequestor;
-import org.eclipse.cdt.core.parser.ast.IASTFunction;
-import org.eclipse.cdt.core.parser.ast.IASTFunctionReference;
-import org.eclipse.cdt.core.parser.ast.IASTReference;
-
-/**
- * @author jcamelon
- *
- */
-public class ASTFunctionReference
- extends ASTReference
- implements IASTReference, IASTFunctionReference
-{
- private final IASTFunction declaration;
- /**
- * @param offset
- * @param name
- */
- public ASTFunctionReference(int offset, String name, IASTFunction referencedDeclaration )
- {
- super(offset, name);
- this.declaration = referencedDeclaration;
- }
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.parser.ast.IASTReference#getReferencedElement()
- */
- public ISourceElementCallbackDelegate getReferencedElement()
- {
- return declaration;
- }
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
- */
- public void acceptElement(ISourceElementRequestor requestor)
- {
- try
- {
- requestor.acceptFunctionReference( this );
- }
- catch (Exception e)
- {
- /* do nothing */
- }
- }
- /* (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)
- {
-
- }
-}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTInitializerClause.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTInitializerClause.java
index 37a5910137a..3ff90dc7e2d 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTInitializerClause.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTInitializerClause.java
@@ -20,6 +20,7 @@ import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException;
import org.eclipse.cdt.core.parser.ast.IASTExpression;
import org.eclipse.cdt.core.parser.ast.IASTInitializerClause;
import org.eclipse.cdt.core.parser.ast.IASTVariable;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.internal.core.parser.ast.EmptyIterator;
/**
@@ -74,29 +75,29 @@ public class ASTInitializerClause implements IASTInitializerClause
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
Iterator i = getInitializers();
while( i.hasNext() )
- ((IASTInitializerClause)i.next()).acceptElement(requestor);
+ ((IASTInitializerClause)i.next()).acceptElement(requestor, manager);
if( assignmentExpression != null )
- assignmentExpression.acceptElement( requestor );
+ assignmentExpression.acceptElement( requestor, manager );
- ASTReferenceStore.processReferences(references, requestor);
+ manager.processReferences(references, requestor);
references = null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTLinkageSpecification.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTLinkageSpecification.java
index 8d57657da91..85bd2810a8c 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTLinkageSpecification.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTLinkageSpecification.java
@@ -18,6 +18,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.IASTLinkageSpecification;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.internal.core.parser.ast.Offsets;
import org.eclipse.cdt.internal.core.parser.pst.IContainerSymbol;
@@ -85,13 +86,13 @@ public class ASTLinkageSpecification extends ASTAnonymousDeclaration implements
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
@@ -105,7 +106,7 @@ public class ASTLinkageSpecification extends ASTAnonymousDeclaration implements
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTMethod.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTMethod.java
index 2c20daeabbc..037ed86559d 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTMethod.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTMethod.java
@@ -22,6 +22,7 @@ import org.eclipse.cdt.core.parser.ast.IASTExceptionSpecification;
import org.eclipse.cdt.core.parser.ast.IASTMethod;
import org.eclipse.cdt.core.parser.ast.IASTTemplate;
import org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.internal.core.parser.ast.EmptyIterator;
import org.eclipse.cdt.internal.core.parser.pst.IContainerSymbol;
import org.eclipse.cdt.internal.core.parser.pst.IParameterizedSymbol;
@@ -132,7 +133,7 @@ public class ASTMethod extends ASTFunction implements IASTMethod
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
@@ -145,15 +146,15 @@ public class ASTMethod extends ASTFunction implements IASTMethod
{
/* do nothing */
}
- methodCallbacks(requestor);
+ methodCallbacks(requestor, manager);
}
- protected void methodCallbacks(ISourceElementRequestor requestor)
+ protected void methodCallbacks(ISourceElementRequestor requestor, IReferenceManager manager)
{
- functionCallbacks(requestor);
- processConstructorChain(requestor);
+ functionCallbacks(requestor, manager);
+ processConstructorChain(requestor, manager);
}
- protected void processConstructorChain(ISourceElementRequestor requestor)
+ protected void processConstructorChain(ISourceElementRequestor requestor, IReferenceManager manager)
{
if( constructorChain != null )
{
@@ -161,14 +162,14 @@ public class ASTMethod extends ASTFunction implements IASTMethod
while( i.hasNext() )
{
IASTConstructorMemberInitializer c = (IASTConstructorMemberInitializer)i.next();
- c.acceptElement(requestor);
+ c.acceptElement(requestor, manager);
}
}
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
@@ -178,12 +179,12 @@ public class ASTMethod extends ASTFunction implements IASTMethod
{
/* do nothing */
}
- methodCallbacks( requestor );
+ methodCallbacks( requestor, manager );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTMethodReference.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTMethodReference.java
deleted file mode 100644
index 59bdd4160df..00000000000
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTMethodReference.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2002,2003 Rational Software 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 Rational Software - Initial API and implementation
-***********************************************************************/
-package org.eclipse.cdt.internal.core.parser.ast.complete;
-
-import org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate;
-import org.eclipse.cdt.core.parser.ISourceElementRequestor;
-import org.eclipse.cdt.core.parser.ast.IASTMethod;
-import org.eclipse.cdt.core.parser.ast.IASTMethodReference;
-
-/**
- * @author jcamelon
- *
- */
-public class ASTMethodReference
- extends ASTReference
- implements IASTMethodReference
-{
- private final IASTMethod method;
- /**
- * @param offset
- * @param name
- */
- public ASTMethodReference(int offset, String name, IASTMethod method )
- {
- super(offset, name);
- this.method = method;
- }
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.parser.ast.IASTReference#getReferencedElement()
- */
- public ISourceElementCallbackDelegate getReferencedElement()
- {
- return method;
- }
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
- */
- public void acceptElement(ISourceElementRequestor requestor)
- {
- try
- {
- requestor.acceptMethodReference( this );
- }
- catch (Exception e)
- {
- /* do nothing */
- }
- }
- /* (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)
- {
- }
-}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNamespaceAlias.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNamespaceAlias.java
index 14ab50be00c..2ac3329e673 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNamespaceAlias.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNamespaceAlias.java
@@ -15,6 +15,7 @@ import java.util.List;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ast.IASTNamespaceAlias;
import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.internal.core.parser.ast.NamedOffsets;
import org.eclipse.cdt.internal.core.parser.pst.ISymbol;
@@ -63,22 +64,22 @@ public class ASTNamespaceAlias extends ASTSymbol implements IASTNamespaceAlias
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
- ASTReferenceStore.processReferences(references, requestor);
+ manager.processReferences(references, requestor);
references = null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNamespaceDefinition.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNamespaceDefinition.java
index d1013fc562a..b5c290c0763 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNamespaceDefinition.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNamespaceDefinition.java
@@ -17,6 +17,7 @@ import java.util.List;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ast.IASTDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.internal.core.parser.ast.ASTQualifiedNamedElement;
import org.eclipse.cdt.internal.core.parser.ast.NamedOffsets;
import org.eclipse.cdt.internal.core.parser.pst.ISymbol;
@@ -107,14 +108,14 @@ public class ASTNamespaceDefinition
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
@@ -130,7 +131,7 @@ public class ASTNamespaceDefinition
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNamespaceReference.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNamespaceReference.java
deleted file mode 100644
index 99821946456..00000000000
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNamespaceReference.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2002,2003 Rational Software 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 Rational Software - Initial API and implementation
-***********************************************************************/
-package org.eclipse.cdt.internal.core.parser.ast.complete;
-
-import org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate;
-import org.eclipse.cdt.core.parser.ISourceElementRequestor;
-import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition;
-import org.eclipse.cdt.core.parser.ast.IASTNamespaceReference;
-
-/**
- * @author jcamelon
- *
- */
-public class ASTNamespaceReference
- extends ASTReference
- implements IASTNamespaceReference
-{
- private final IASTNamespaceDefinition reference;
-
- /**
- * @param offset
- * @param referencedElementName
- * @param definition
- */
- public ASTNamespaceReference(int offset, String referencedElementName, IASTNamespaceDefinition definition)
- {
- super(offset, referencedElementName);
- reference = definition;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.parser.ast.IASTReference#getReferencedElement()
- */
- public ISourceElementCallbackDelegate getReferencedElement()
- {
- return reference;
- }
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
- */
- public void acceptElement(ISourceElementRequestor requestor)
- {
- try
- {
- requestor.acceptNamespaceReference( this );
- }
- catch (Exception e)
- {
- /* do nothing */
- }
- }
- /* (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)
- {
- }
-}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNewDescriptor.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNewDescriptor.java
index 0ac32f98e48..15d8324a317 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNewDescriptor.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNewDescriptor.java
@@ -15,6 +15,7 @@ import java.util.List;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ast.IASTExpression;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.core.parser.ast.IASTExpression.IASTNewExpressionDescriptor;
/**
@@ -25,11 +26,11 @@ import org.eclipse.cdt.core.parser.ast.IASTExpression.IASTNewExpressionDescripto
*/
public class ASTNewDescriptor implements IASTNewExpressionDescriptor {
- List newPlacementExpressions;
- List newTypeIdExpressions;
- List newInitializerExpressions;
+ private List newPlacementExpressions;
+ private List newTypeIdExpressions;
+ private List newInitializerExpressions;
+
public ASTNewDescriptor(List newPlacementExpressions, List newTypeIdExpressions, List newInitializerExpressions) {
- super();
this.newPlacementExpressions = newPlacementExpressions;
this.newTypeIdExpressions = newTypeIdExpressions;
this.newInitializerExpressions = newInitializerExpressions;
@@ -53,29 +54,30 @@ public class ASTNewDescriptor implements IASTNewExpressionDescriptor {
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
- accept( requestor, getNewPlacementExpressions() );
- accept( requestor, getNewTypeIdExpressions() );
- accept( requestor, getNewInitializerExpressions() );
+ accept( requestor, getNewPlacementExpressions(), manager );
+ accept( requestor, getNewTypeIdExpressions() , manager);
+ accept( requestor, getNewInitializerExpressions() , manager);
}
/**
* @param requestor
* @param iterator
+ * @param manager
*/
- protected void accept(ISourceElementRequestor requestor, Iterator iterator)
+ protected void accept(ISourceElementRequestor requestor, Iterator iterator, IReferenceManager manager)
{
while( iterator.hasNext() )
- ((IASTExpression)iterator.next()).acceptElement(requestor);
+ ((IASTExpression)iterator.next()).acceptElement(requestor, manager);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
@@ -83,8 +85,29 @@ public class ASTNewDescriptor implements IASTNewExpressionDescriptor {
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTExpression.IASTNewExpressionDescriptor#freeReferences(org.eclipse.cdt.core.parser.ast.IReferenceManager)
+ */
+ public void freeReferences(IReferenceManager manager) {
+ free( newPlacementExpressions, manager );
+ free( newTypeIdExpressions , manager);
+ free( newInitializerExpressions , manager);
+ }
+
+
+ /**
+ * @param list
+ * @param manager
+ */
+ private void free(List list, IReferenceManager manager) {
+ if( list == null || list.isEmpty() ) return;
+ for( int i = 0; i < list.size(); ++i)
+ ((IASTExpression)list.get(i)).freeReferences(manager);
+ }
+
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNewExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNewExpression.java
index ee8928e63ee..75cd20407bd 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNewExpression.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNewExpression.java
@@ -16,6 +16,7 @@ import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ITokenDuple;
import org.eclipse.cdt.core.parser.ast.IASTExpression;
import org.eclipse.cdt.core.parser.ast.IASTTypeId;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
/**
* @author jcamelon
@@ -55,10 +56,10 @@ public class ASTNewExpression extends ASTExpression {
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.ast.complete.ASTExpression#processCallbacks(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- protected void processCallbacks(ISourceElementRequestor requestor) {
- super.processCallbacks(requestor);
- typeId.acceptElement(requestor);
- newDescriptor.acceptElement(requestor);
+ protected void processCallbacks(ISourceElementRequestor requestor, IReferenceManager manager) {
+ super.processCallbacks(requestor, manager);
+ typeId.acceptElement(requestor, manager);
+ newDescriptor.acceptElement(requestor, manager);
}
@@ -70,4 +71,13 @@ public class ASTNewExpression extends ASTExpression {
return this;
return null;
}
+
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTExpression#freeReferences(org.eclipse.cdt.core.parser.ast.IReferenceManager)
+ */
+ public void freeReferences(IReferenceManager manager) {
+ super.freeReferences(manager);
+ typeId.freeReferences( manager );
+ }
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTParameterDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTParameterDeclaration.java
index eb3eb8d661e..9ee1a9bfdb3 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTParameterDeclaration.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTParameterDeclaration.java
@@ -21,6 +21,7 @@ import org.eclipse.cdt.core.parser.ast.IASTFunction;
import org.eclipse.cdt.core.parser.ast.IASTInitializerClause;
import org.eclipse.cdt.core.parser.ast.IASTParameterDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.internal.core.parser.ast.ASTAbstractDeclaration;
import org.eclipse.cdt.internal.core.parser.ast.NamedOffsets;
import org.eclipse.cdt.internal.core.parser.pst.ISymbol;
@@ -125,20 +126,20 @@ public class ASTParameterDeclaration extends ASTSymbol implements IASTParameterD
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTParameterReference.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTParameterReference.java
deleted file mode 100644
index 3f196073e08..00000000000
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTParameterReference.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2002,2003 Rational Software 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 Rational Software - Initial API and implementation
-***********************************************************************/
-package org.eclipse.cdt.internal.core.parser.ast.complete;
-
-import org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate;
-import org.eclipse.cdt.core.parser.ISourceElementRequestor;
-import org.eclipse.cdt.core.parser.ast.IASTParameterDeclaration;
-import org.eclipse.cdt.core.parser.ast.IASTParameterReference;
-
-/**
- * @author jcamelon
- *
- */
-public class ASTParameterReference extends ASTReference implements IASTParameterReference
-{
- private final IASTParameterDeclaration parm;
-
- /**
- * @param offset
- * @param string
- * @param declaration
- */
- public ASTParameterReference(int offset, String string, IASTParameterDeclaration declaration)
- {
- super( offset, string );
- parm = declaration;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.parser.ast.IASTReference#getReferencedElement()
- */
- public ISourceElementCallbackDelegate getReferencedElement()
- {
- return parm;
- }
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
- */
- public void acceptElement(ISourceElementRequestor requestor)
- {
- try
- {
- requestor.acceptParameterReference( this );
- }
- catch (Exception e)
- {
- /* do nothing */
- }
- }
- /* (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)
- {
-
- }
-}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTReference.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTReference.java
deleted file mode 100644
index 21dda293009..00000000000
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTReference.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2002,2003 Rational Software 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 Rational Software - Initial API and implementation
-***********************************************************************/
-package org.eclipse.cdt.internal.core.parser.ast.complete;
-
-import org.eclipse.cdt.core.parser.ast.IASTReference;
-
-
-/**
- * @author jcamelon
- *
- */
-public abstract class ASTReference implements IASTReference
-{
- protected final String name;
- protected final int offset;
- /**
- *
- */
- public ASTReference(int offset, String name)
- {
- this.offset = offset;
- this.name = name;
- }
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.parser.ast.IASTReference#getOffset()
- */
- public int getOffset()
- {
- return offset;
- }
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.parser.ast.IASTReference#getName()
- */
- public String getName()
- {
- return name;
- }
-
- public boolean equals(Object obj)
- {
- if( obj == null )
- return false;
- if( ! (obj instanceof IASTReference ) )
- return false;
-
- if( ((IASTReference)obj).getName().equals( getName() ) &&
- ((IASTReference)obj).getOffset() == getOffset() )
- return true;
- return false;
- }
-}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTReferenceStore.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTReferenceStore.java
deleted file mode 100644
index 3aa30d85fdd..00000000000
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTReferenceStore.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2002,2003 Rational Software 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 Rational Software - Initial API and implementation
-***********************************************************************/
-package org.eclipse.cdt.internal.core.parser.ast.complete;
-
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.cdt.core.parser.ISourceElementRequestor;
-import org.eclipse.cdt.core.parser.ast.IASTReference;
-
-/**
- * @author jcamelon
- *
- */
-public class ASTReferenceStore
-{
-
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.parser.ast.IASTReferenceStore#processReferences()
- */
- public static void processReferences(List references, ISourceElementRequestor requestor)
- {
- if( references == null || references == Collections.EMPTY_LIST || references.isEmpty() )
- return;
- Iterator i = references.iterator();
- while( i.hasNext() )
- ((IASTReference)i.next()).acceptElement(requestor);
- references.clear();
- }
-}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTSimpleTypeSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTSimpleTypeSpecifier.java
index 3cd3ca22cf6..38daa26267d 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTSimpleTypeSpecifier.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTSimpleTypeSpecifier.java
@@ -14,6 +14,8 @@ import java.util.List;
import org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier;
import org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
+import org.eclipse.cdt.internal.core.parser.ast.complete.ReferenceCache.ASTReference;
import org.eclipse.cdt.internal.core.parser.pst.ISymbol;
import org.eclipse.cdt.internal.core.parser.pst.TypeInfo;
@@ -146,4 +148,14 @@ public class ASTSimpleTypeSpecifier extends ASTNode implements IASTSimpleTypeSpe
{
return symbol.getTypeInfo().checkBit( TypeInfo.isImaginary );
}
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier#releaseReferences(org.eclipse.cdt.core.parser.ast.IReferenceManager)
+ */
+ public void releaseReferences(IReferenceManager referenceManager) {
+ if( refs == null || refs.isEmpty() ) return;
+ for( int i = 0; i < refs.size(); ++i )
+ referenceManager.returnReference( (ASTReference)refs.get(i));
+
+ }
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateDeclaration.java
index ad67645a40f..ad05b64d343 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateDeclaration.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateDeclaration.java
@@ -19,6 +19,8 @@ import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException;
import org.eclipse.cdt.core.parser.ast.IASTDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTScope;
import org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration;
+import org.eclipse.cdt.core.parser.ast.IASTTemplateParameter;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.internal.core.parser.ast.NamedOffsets;
import org.eclipse.cdt.internal.core.parser.pst.IContainerSymbol;
import org.eclipse.cdt.internal.core.parser.pst.ISymbol;
@@ -160,14 +162,14 @@ public class ASTTemplateDeclaration extends ASTSymbol implements IASTTemplateDec
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
@@ -177,11 +179,14 @@ public class ASTTemplateDeclaration extends ASTSymbol implements IASTTemplateDec
{
/* do nothing */
}
+ if( templateParameters == null || templateParameters.isEmpty()) return;
+ for( int i = 0; i < templateParameters.size(); ++i )
+ ((IASTTemplateParameter)templateParameters.get(i)).acceptElement(requestor, manager );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateInstantiation.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateInstantiation.java
index afc48ca99ba..bc55ee4a0c9 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateInstantiation.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateInstantiation.java
@@ -18,6 +18,7 @@ import org.eclipse.cdt.core.parser.ast.IASTDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTScope;
import org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTTemplateInstantiation;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.internal.core.parser.ast.NamedOffsets;
import org.eclipse.cdt.internal.core.parser.pst.IContainerSymbol;
import org.eclipse.cdt.internal.core.parser.pst.ISymbol;
@@ -140,14 +141,14 @@ public class ASTTemplateInstantiation extends ASTSymbol implements IASTTemplateI
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
@@ -161,7 +162,7 @@ public class ASTTemplateInstantiation extends ASTSymbol implements IASTTemplateI
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateParameter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateParameter.java
index 8113aa25cf0..eb90ec9c250 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateParameter.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateParameter.java
@@ -14,6 +14,7 @@ import org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement;
import org.eclipse.cdt.core.parser.ast.IASTParameterDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTTemplateParameter;
import org.eclipse.cdt.core.parser.ast.IASTTypeId;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.internal.core.parser.ast.NamedOffsets;
import org.eclipse.cdt.internal.core.parser.pst.ISymbol;
import org.eclipse.cdt.internal.core.parser.pst.TypeInfo;
@@ -93,21 +94,24 @@ public class ASTTemplateParameter extends ASTSymbol implements IASTTemplateParam
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor) {
- // TODO Auto-generated method stub
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager) {
+ if( defaultValue != null )
+ defaultValue.acceptElement( requestor, manager );
+ if( parameter != null )
+ parameter.acceptElement( requestor, manager );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor) {
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor) {
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager) {
// TODO Auto-generated method stub
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateParameterReference.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateParameterReference.java
deleted file mode 100644
index 63af58e5152..00000000000
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateParameterReference.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Created on Mar 8, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.cdt.internal.core.parser.ast.complete;
-
-import org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate;
-import org.eclipse.cdt.core.parser.ISourceElementRequestor;
-import org.eclipse.cdt.core.parser.ast.IASTTemplateParameter;
-import org.eclipse.cdt.core.parser.ast.IASTTemplateParameterReference;
-
-/**
- * @author aniefer
- *
- * To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-public class ASTTemplateParameterReference extends ASTReference implements IASTTemplateParameterReference {
- private final IASTTemplateParameter parameter;
- /**
- * @param offset
- * @param name
- */
- public ASTTemplateParameterReference(int offset, String name, IASTTemplateParameter param) {
- super(offset, name);
- parameter = param;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.parser.ast.IASTReference#getReferencedElement()
- */
- public ISourceElementCallbackDelegate getReferencedElement() {
- return parameter;
- }
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
- */
- public void acceptElement(ISourceElementRequestor requestor)
- {
- try
- {
- requestor.acceptTemplateParameterReference( this );
- }
- catch (Exception e)
- {
- /* do nothing */
- }
- }
- /* (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) {
- }
-}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTypeId.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTypeId.java
index fcefb27f27e..8d27b8bb221 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTypeId.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTypeId.java
@@ -17,7 +17,9 @@ import java.util.List;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ITokenDuple;
import org.eclipse.cdt.core.parser.ast.IASTArrayModifier;
+import org.eclipse.cdt.core.parser.ast.IASTReference;
import org.eclipse.cdt.core.parser.ast.IASTTypeId;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier.Type;
import org.eclipse.cdt.internal.core.parser.pst.ISymbol;
@@ -183,36 +185,54 @@ public class ASTTypeId implements IASTTypeId
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
- ASTReferenceStore.processReferences(references, requestor);
+ manager.processReferences(references, requestor);
references = null;
+ if( tokenDuple != null )
+ tokenDuple.acceptElement( requestor, manager );
+
Iterator arrayMods = getArrayModifiers();
while( arrayMods.hasNext() )
{
- ((IASTArrayModifier)arrayMods.next()).acceptElement(requestor);
+ ((IASTArrayModifier)arrayMods.next()).acceptElement(requestor, manager);
}
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/**
* @param list
*/
- public void addReferences(List list)
+ public void addReferences(List list, ReferenceCache cache)
{
- references.addAll( list );
+ for( int i = 0; i < list.size(); ++i )
+ references.add( list.get(i) );
}
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTTypeId#freeReferences(org.eclipse.cdt.core.parser.ast.IReferenceManager)
+ */
+ public void freeReferences(IReferenceManager manager) {
+ if( tokenDuple != null )
+ tokenDuple.freeReferences( manager );
+
+ if( references.isEmpty() ) return;
+ for( int i =0; i < references.size(); ++i)
+ manager.returnReference( (IASTReference) references.get(i));
+
+ }
+
+
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTypeIdExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTypeIdExpression.java
index b8e9e88318b..d09a4988e16 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTypeIdExpression.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTypeIdExpression.java
@@ -14,6 +14,7 @@ import java.util.List;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ast.IASTTypeId;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
/**
* @author jcamelon
@@ -37,8 +38,17 @@ public class ASTTypeIdExpression extends ASTExpression {
return typeId;
}
- protected void processCallbacks(ISourceElementRequestor requestor) {
- super.processCallbacks(requestor);
- typeId.acceptElement(requestor);
+ protected void processCallbacks(ISourceElementRequestor requestor, IReferenceManager manager) {
+ super.processCallbacks(requestor, manager);
+ typeId.acceptElement(requestor, manager);
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTExpression#freeReferences(org.eclipse.cdt.core.parser.ast.IReferenceManager)
+ */
+ public void freeReferences(IReferenceManager manager) {
+ super.freeReferences(manager);
+ typeId.freeReferences(manager);
}
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTypedef.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTypedef.java
index 355b3cbd6d3..b54662321e4 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTypedef.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTypedef.java
@@ -18,6 +18,7 @@ import org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier;
import org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier;
import org.eclipse.cdt.core.parser.ast.IASTTypedefDeclaration;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.internal.core.parser.ast.ASTQualifiedNamedElement;
import org.eclipse.cdt.internal.core.parser.ast.NamedOffsets;
import org.eclipse.cdt.internal.core.parser.pst.ISymbol;
@@ -71,7 +72,7 @@ public class ASTTypedef extends ASTSymbol implements IASTTypedefDeclaration
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
@@ -81,22 +82,22 @@ public class ASTTypedef extends ASTSymbol implements IASTTypedefDeclaration
{
/* do nothing */
}
- ASTReferenceStore.processReferences(references, requestor);
+ manager.processReferences(references, requestor);
references = null;
- getAbstractDeclarator().acceptElement( requestor );
+ getAbstractDeclarator().acceptElement( requestor, manager );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTypedefReference.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTypedefReference.java
deleted file mode 100644
index 91e557dfec1..00000000000
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTypedefReference.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2002,2003 Rational Software 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 Rational Software - Initial API and implementation
-***********************************************************************/
-package org.eclipse.cdt.internal.core.parser.ast.complete;
-
-import org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate;
-import org.eclipse.cdt.core.parser.ISourceElementRequestor;
-import org.eclipse.cdt.core.parser.ast.IASTTypedefDeclaration;
-import org.eclipse.cdt.core.parser.ast.IASTTypedefReference;
-
-/**
- * @author jcamelon
- *
- */
-public class ASTTypedefReference
- extends ASTReference
- implements IASTTypedefReference
-{
- private final IASTTypedefDeclaration referencedItem;
- /**
- * @param offset
- * @param name
- */
- public ASTTypedefReference(int offset, String name, IASTTypedefDeclaration referencedItem )
- {
- super(offset, name);
- this.referencedItem = referencedItem;
- }
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.parser.ast.IASTReference#getReferencedElement()
- */
- public ISourceElementCallbackDelegate getReferencedElement()
- {
- return referencedItem;
- }
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
- */
- public void acceptElement(ISourceElementRequestor requestor)
- {
- try
- {
- requestor.acceptTypedefReference(this);
- }
- catch (Exception e)
- {
- /* do nothing */
- }
- }
- /* (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)
- {
- }
-}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTUnaryExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTUnaryExpression.java
index 4e1a93245a6..d00a82f14c9 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTUnaryExpression.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTUnaryExpression.java
@@ -16,6 +16,7 @@ import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ITokenDuple;
import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException;
import org.eclipse.cdt.core.parser.ast.IASTExpression;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
/**
* @author jcamelon
@@ -70,8 +71,17 @@ public class ASTUnaryExpression extends ASTExpression {
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.ast.complete.ASTExpression#processCallbacks()
*/
- protected void processCallbacks( ISourceElementRequestor requestor ) {
- super.processCallbacks(requestor);
- lhs.acceptElement( requestor );
+ protected void processCallbacks( ISourceElementRequestor requestor, IReferenceManager manager ) {
+ super.processCallbacks(requestor, manager);
+ lhs.acceptElement( requestor, manager );
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTExpression#freeReferences(org.eclipse.cdt.core.parser.ast.IReferenceManager)
+ */
+ public void freeReferences(IReferenceManager manager) {
+ super.freeReferences(manager);
+ lhs.freeReferences(manager);
}
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTUnaryTypeIdExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTUnaryTypeIdExpression.java
index 96f6fa74b35..c39438b527b 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTUnaryTypeIdExpression.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTUnaryTypeIdExpression.java
@@ -15,12 +15,20 @@ import java.util.List;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ast.IASTExpression;
import org.eclipse.cdt.core.parser.ast.IASTTypeId;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
/**
* @author jcamelon
*
*/
public class ASTUnaryTypeIdExpression extends ASTUnaryExpression {
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTExpression#freeReferences(org.eclipse.cdt.core.parser.ast.IReferenceManager)
+ */
+ public void freeReferences(IReferenceManager manager) {
+ super.freeReferences(manager);
+ typeId.freeReferences(manager);
+ }
private final IASTTypeId typeId;
/**
@@ -44,9 +52,9 @@ public class ASTUnaryTypeIdExpression extends ASTUnaryExpression {
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.ast.complete.ASTExpression#processCallbacks()
*/
- protected void processCallbacks( ISourceElementRequestor requestor ) {
- super.processCallbacks(requestor);
- typeId.acceptElement( requestor );
+ protected void processCallbacks( ISourceElementRequestor requestor, IReferenceManager manager ) {
+ super.processCallbacks(requestor, manager);
+ typeId.acceptElement( requestor, manager );
}
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTUsingDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTUsingDeclaration.java
index e5889b3746b..947170b356c 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTUsingDeclaration.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTUsingDeclaration.java
@@ -17,6 +17,7 @@ import java.util.List;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ast.IASTScope;
import org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.internal.core.parser.ast.Offsets;
import org.eclipse.cdt.internal.core.parser.ast.SymbolIterator;
@@ -98,7 +99,7 @@ public class ASTUsingDeclaration extends ASTNode implements IASTUsingDeclaration
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
@@ -108,19 +109,19 @@ public class ASTUsingDeclaration extends ASTNode implements IASTUsingDeclaration
{
/* do nothing */
}
- ASTReferenceStore.processReferences(references, requestor);
+ manager.processReferences(references, requestor);
references = null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTUsingDirective.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTUsingDirective.java
index ee6d3d3131a..e8a010ff167 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTUsingDirective.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTUsingDirective.java
@@ -15,6 +15,7 @@ import java.util.List;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition;
import org.eclipse.cdt.core.parser.ast.IASTUsingDirective;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.internal.core.parser.ast.Offsets;
import org.eclipse.cdt.internal.core.parser.pst.IContainerSymbol;
import org.eclipse.cdt.internal.core.parser.pst.IUsingDirectiveSymbol;
@@ -92,7 +93,7 @@ public class ASTUsingDirective extends ASTAnonymousDeclaration implements IASTUs
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
@@ -102,19 +103,19 @@ public class ASTUsingDirective extends ASTAnonymousDeclaration implements IASTUs
{
/* do nothing */
}
- ASTReferenceStore.processReferences(references, requestor);
+ manager.processReferences(references, requestor);
references = null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTVariable.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTVariable.java
index 19ecef7bf70..ea100559091 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTVariable.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTVariable.java
@@ -18,6 +18,7 @@ import org.eclipse.cdt.core.parser.ast.IASTExpression;
import org.eclipse.cdt.core.parser.ast.IASTInitializerClause;
import org.eclipse.cdt.core.parser.ast.IASTScope;
import org.eclipse.cdt.core.parser.ast.IASTVariable;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.internal.core.parser.ast.ASTQualifiedNamedElement;
import org.eclipse.cdt.internal.core.parser.ast.NamedOffsets;
import org.eclipse.cdt.internal.core.parser.pst.ISymbol;
@@ -159,7 +160,7 @@ public class ASTVariable extends ASTSymbol implements IASTVariable
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
@@ -169,26 +170,26 @@ public class ASTVariable extends ASTSymbol implements IASTVariable
{
/* do nothing */
}
- ASTReferenceStore.processReferences(references, requestor);
+ manager.processReferences(references, requestor);
references = null;
if( initializerClause != null )
- initializerClause.acceptElement(requestor);
+ initializerClause.acceptElement(requestor, manager);
if( constructorExpression != null )
- constructorExpression.acceptElement(requestor);
+ constructorExpression.acceptElement(requestor, manager);
if( getAbstractDeclaration() != null )
- getAbstractDeclaration().acceptElement(requestor);
+ getAbstractDeclaration().acceptElement(requestor, manager);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTVariableReference.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTVariableReference.java
deleted file mode 100644
index 83663af42ce..00000000000
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTVariableReference.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2002,2003 Rational Software 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 Rational Software - Initial API and implementation
-***********************************************************************/
-package org.eclipse.cdt.internal.core.parser.ast.complete;
-
-import org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate;
-import org.eclipse.cdt.core.parser.ISourceElementRequestor;
-import org.eclipse.cdt.core.parser.ast.IASTReference;
-import org.eclipse.cdt.core.parser.ast.IASTVariable;
-import org.eclipse.cdt.core.parser.ast.IASTVariableReference;
-
-/**
- * @author jcamelon
- *
- */
-public class ASTVariableReference
- extends ASTReference
- implements IASTReference, IASTVariableReference
-{
-
- private final IASTVariable referencedElement;
- /**
- * @param offset
- * @param string
- * @param variable
- */
- public ASTVariableReference(int offset, String string, IASTVariable variable)
- {
- super( offset, string );
- referencedElement = variable;
- }
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.parser.ast.IASTReference#getReferencedElement()
- */
- public ISourceElementCallbackDelegate getReferencedElement()
- {
- return referencedElement;
- }
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
- */
- public void acceptElement(ISourceElementRequestor requestor)
- {
- try
- {
- requestor.acceptVariableReference( this );
- }
- catch (Exception e)
- {
- /* do nothing */
- }
- }
- /* (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)
- {
- }
-}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java
index 33d09c30ce0..6aac3953eed 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java
@@ -21,6 +21,7 @@ import java.util.Stack;
import org.eclipse.cdt.core.parser.Enum;
import org.eclipse.cdt.core.parser.IFilenameProvider;
import org.eclipse.cdt.core.parser.IProblem;
+import org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate;
import org.eclipse.cdt.core.parser.IToken;
import org.eclipse.cdt.core.parser.ITokenDuple;
import org.eclipse.cdt.core.parser.ParserLanguage;
@@ -67,6 +68,7 @@ import org.eclipse.cdt.core.parser.ast.IASTTypedefDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTUsingDirective;
import org.eclipse.cdt.core.parser.ast.IASTVariable;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
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;
@@ -117,6 +119,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
private final static IProblemFactory problemFactory = new ASTProblemFactory();
private final IFilenameProvider fileProvider;
private final ParserMode mode;
+ private final ReferenceCache cache = new ReferenceCache();
static
{
@@ -150,7 +153,13 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
* Overrides an existing reference if it has the same name and offset
*/
protected void addReference(List references, IASTReference reference){
- if( references == null || reference == null ) return;
+ if( reference == null )
+ return;
+ if( references == null )
+ {
+ cache.returnReference( reference );
+ return;
+ }
Iterator i = references.iterator();
while (i.hasNext()){
IASTReference ref = (IASTReference)i.next();
@@ -158,6 +167,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
if( (ref.getName().equals(reference.getName()))
&& (ref.getOffset() == reference.getOffset())
){
+ cache.returnReference( ref );
i.remove();
break;
}
@@ -179,7 +189,8 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
else
j = exp.getReferences().iterator();
while( j.hasNext() ){
- addReference( references, (IASTReference) j.next() );
+ IASTReference r = (IASTReference) j.next();
+ addReference( references, cache.getReference(r.getOffset(), r.getReferencedElement()));
}
}
}
@@ -326,7 +337,10 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
if( references != null )
addReference( references, createReference( result, image, name.getStartOffset() ));
if( args != null && references != null )
+ {
addTemplateIdReferences( references, templateArgLists[0] );
+ name.freeReferences( cache );
+ }
}
else
{
@@ -393,7 +407,10 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
if( references != null )
addReference( references, createReference( result, image, offset ));
if( references != null && templateArgLists != null && templateArgLists[idx] != null )
+ {
addTemplateIdReferences( references, templateArgLists[idx] );
+ name.freeReferences(cache);
+ }
}
else
break;
@@ -892,6 +909,13 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
//Its possible that the parent is not an IContainerSymbol if its a template parameter or some kinds of template instances
ISymbol symbol = lookupQualifiedName( classSymbol, parentClassName, references, true );
+ List [] templateArgumentLists = parentClassName.getTemplateIdArgLists();
+ if( templateArgumentLists != null )
+ {
+ for( int i = 0; i < templateArgumentLists.length; ++i )
+ addTemplateIdReferences( references, templateArgumentLists[i]);
+ }
+ parentClassName.freeReferences(cache);
classSymbol.addParent( symbol, isVirtual, visibility, parentClassName.getFirstToken().getOffset(), references );
}
@@ -917,24 +941,24 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
// assert (symbol != null ) : "createReference cannot be called on null symbol ";
if( symbol.getTypeInfo().checkBit( TypeInfo.isTypedef ) ||
symbol.getASTExtension().getPrimaryDeclaration() instanceof IASTTypedefDeclaration )
- return new ASTTypedefReference( offset, referenceElementName, (IASTTypedefDeclaration)declaration);
+ return cache.getReference( offset, declaration);
else if( symbol.getType() == TypeInfo.t_namespace )
- return new ASTNamespaceReference( offset, referenceElementName, (IASTNamespaceDefinition)declaration);
+ return cache.getReference( offset, declaration);
else if( symbol.getType() == TypeInfo.t_class ||
symbol.getType() == TypeInfo.t_struct ||
symbol.getType() == TypeInfo.t_union )
- return new ASTClassReference( offset, referenceElementName, (IASTTypeSpecifier)symbol.getASTExtension().getPrimaryDeclaration() );
+ return cache.getReference( offset, (ISourceElementCallbackDelegate)symbol.getASTExtension().getPrimaryDeclaration() );
else if( symbol.getType() == TypeInfo.t_enumeration )
- return new ASTEnumerationReference( offset, referenceElementName, (IASTEnumerationSpecifier)symbol.getASTExtension().getPrimaryDeclaration() );
+ return cache.getReference( offset, (IASTEnumerationSpecifier)symbol.getASTExtension().getPrimaryDeclaration() );
else if( symbol.getType() == TypeInfo.t_enumerator )
- return new ASTEnumeratorReference( offset, referenceElementName, (IASTEnumerator)declaration );
+ return cache.getReference( offset, declaration );
else if(( symbol.getType() == TypeInfo.t_function ) || (symbol.getType() == TypeInfo.t_constructor))
{
ASTNode referenced = (definition != null) ? definition : declaration;
if( referenced instanceof IASTMethod )
- return new ASTMethodReference( offset, referenceElementName, (IASTMethod)referenced );
- return new ASTFunctionReference( offset, referenceElementName, (IASTFunction)referenced );
+ return cache.getReference( offset, (IASTMethod)referenced );
+ return cache.getReference( offset, (IASTFunction)referenced );
}
else if( ( symbol.getType() == TypeInfo.t_type ) ||
( symbol.getType() == TypeInfo.t_bool )||
@@ -952,7 +976,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
symbol.getContainingSymbol().getType() == TypeInfo.t_struct ||
symbol.getContainingSymbol().getType() == TypeInfo.t_union )
{
- return new ASTFieldReference( offset, referenceElementName, (IASTField)(definition != null ? definition : declaration ));
+ return cache.getReference( offset, (definition != null ? definition : declaration ));
}
else if( ( symbol.getContainingSymbol().getType() == TypeInfo.t_function ||
symbol.getContainingSymbol().getType() == TypeInfo.t_constructor ) &&
@@ -960,17 +984,17 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
((IParameterizedSymbol)symbol.getContainingSymbol()).getParameterList() != null &&
((IParameterizedSymbol)symbol.getContainingSymbol()).getParameterList().contains( symbol ) )
{
- return new ASTParameterReference( offset, referenceElementName, (IASTParameterDeclaration)declaration );
+ return cache.getReference( offset, declaration );
}
else
{
ASTNode s = (definition != null) ? definition : declaration;
if(s instanceof IASTVariable)
- return new ASTVariableReference( offset, referenceElementName, (IASTVariable)s);
+ return cache.getReference( offset, (IASTVariable)s);
else if (s instanceof IASTParameterDeclaration)
- return new ASTParameterReference( offset, referenceElementName, (IASTParameterDeclaration)s);
+ return cache.getReference( offset, (IASTParameterDeclaration)s);
else if (s instanceof IASTTemplateParameter )
- return new ASTTemplateParameterReference( offset, referenceElementName, (IASTTemplateParameter)s );
+ return cache.getReference( offset, (IASTTemplateParameter)s );
}
}
// assert false : "Unreachable code : createReference()";
@@ -1116,10 +1140,11 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
i = ((ASTTypeId)typeId).getReferences().iterator();
while( i.hasNext() )
{
- ASTReference ref = (ASTReference) i.next();
+ ReferenceCache.ASTReference ref = (ReferenceCache.ASTReference) i.next();
if( ref.getName().equals( duple.toString() ) &&
ref.getOffset() == duple.getStartOffset() )
{
+ cache.returnReference( ref );
i.remove();
}
}
@@ -1801,7 +1826,15 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
{
if( expression != null )
{
- references.addAll( ((ASTExpression)expression).getReferences() );
+ List eRefs = ((ASTExpression)expression).getReferences();
+ if( eRefs != null && !eRefs.isEmpty())
+ {
+ for( int i = 0; i < eRefs.size(); ++i )
+ {
+ IASTReference r = (IASTReference)eRefs.get(i);
+ references.add( cache.getReference( r.getOffset(), r.getReferencedElement() ));
+ }
+ }
if( expression.getLHSExpression() != null )
getExpressionReferences( expression.getLHSExpression(), references );
if( expression.getRHSExpression() != null )
@@ -1821,22 +1854,15 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
*/
public IASTExceptionSpecification createExceptionSpecification(IASTScope scope, List typeIds) throws ASTSemanticException
{
- List references = new ArrayList();
List newTypeIds = new ArrayList();
if( typeIds != null )
{
Iterator iter =typeIds.iterator();
while( iter.hasNext() )
- {
- IASTTypeId duple = (IASTTypeId)iter.next();
- if( duple != null )
- {
- lookupQualifiedName( scopeToSymbol( scope ), ((ASTTypeId)duple).getTokenDuple(), references, false );
- newTypeIds.add( duple.toString() );
- }
- }
+ newTypeIds.add( ((IASTTypeId)iter.next()).toString() );
+
}
- return new ASTExceptionSpecification( newTypeIds, references );
+ return new ASTExceptionSpecification( newTypeIds );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createConstructorMemberInitializer(org.eclipse.cdt.core.parser.ITokenDuple, org.eclipse.cdt.core.parser.ast.IASTExpression)
@@ -1959,7 +1985,10 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
{
addReference( references, createReference( typeSymbol, image, offset ));
if( argLists != null && argLists[idx] != null )
+ {
addTemplateIdReferences( references, argLists[idx] );
+ typeName.freeReferences(cache);
+ }
}
else
handleProblem( IProblem.SEMANTIC_NAME_NOT_FOUND, image, -1, -1, current.getLineNumber() );
@@ -2230,8 +2259,13 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
{
ASTElaboratedTypeSpecifier elab = (ASTElaboratedTypeSpecifier)absDecl.getTypeSpecifier();
xrefSymbol = elab.getSymbol();
- newReferences = new ArrayList();
- newReferences.addAll( elab.getReferences() );
+ List elabReferences = elab.getReferences();
+ newReferences = new ArrayList(elabReferences.size());
+ for( int i = 0; i < elabReferences.size(); ++i )
+ {
+ IASTReference r = (IASTReference)elabReferences.get(i);
+ newReferences.add( cache.getReference(r.getOffset(), r.getReferencedElement()));
+ }
if( xrefSymbol != null )
addReference( newReferences, createReference( xrefSymbol, elab.getName(), elab.getNameOffset()) );
}
@@ -2260,7 +2294,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
else
symbol.setReturnType( paramSymbol );
- if( newReferences != null )
+ if( newReferences != null && !newReferences.isEmpty())
references.addAll( newReferences );
if( absDecl instanceof ASTParameterDeclaration )
@@ -2513,7 +2547,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
((ASTConstructorMemberInitializer)initializer).requiresNameResolution() )
{
ASTConstructorMemberInitializer realInitializer = ((ASTConstructorMemberInitializer)initializer);
- IDerivableContainerSymbol container = (IDerivableContainerSymbol) symbol.getContainingSymbol();
+ IDerivableContainerSymbol container = (IDerivableContainerSymbol) symbol.getContainingSymbol();
lookupQualifiedName(container, initializer.getName(), TypeInfo.t_any, null, realInitializer.getNameOffset(), realInitializer.getReferences(), false, LookupType.QUALIFIED);
// TODO try and resolve parameter references now in the expression list
}
@@ -2742,7 +2776,14 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
{
symbolToBeCloned = ((ASTSimpleTypeSpecifier)abstractDeclaration.getTypeSpecifier()).getSymbol();
if( references != null )
- references.addAll( ((ASTSimpleTypeSpecifier)abstractDeclaration.getTypeSpecifier()).getReferences() );
+ {
+ List absRefs = ((ASTSimpleTypeSpecifier)abstractDeclaration.getTypeSpecifier()).getReferences();
+ for( int i = 0; i < absRefs.size(); ++i )
+ {
+ IASTReference r = (IASTReference) absRefs.get(i);
+ references.add( cache.getReference( r.getOffset(), r.getReferencedElement() ));
+ }
+ }
}
else if( abstractDeclaration.getTypeSpecifier() instanceof ASTClassSpecifier )
{
@@ -3012,7 +3053,15 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
List references = new ArrayList();
if( mapping.getTypeSpecifier() instanceof ASTSimpleTypeSpecifier )
{
- references.addAll( ((ASTSimpleTypeSpecifier)mapping.getTypeSpecifier()).getReferences() );
+ List mappingReferences = ((ASTSimpleTypeSpecifier)mapping.getTypeSpecifier()).getReferences();
+ if( mappingReferences != null && !mappingReferences.isEmpty() )
+ {
+ for( int i = 0; i < mappingReferences.size(); ++i )
+ {
+ IASTReference r = (IASTReference) mappingReferences.get(i);
+ references.add( cache.getReference(r.getOffset(), r.getReferencedElement()));
+ }
+ }
}
try
@@ -3231,13 +3280,12 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
public IASTScope getDeclaratorScope(IASTScope scope, ITokenDuple duple){
if( duple != null && duple.getSegmentCount() > 1){
- List refs = new ArrayList();
IContainerSymbol ownerScope = scopeToSymbol( scope );
ISymbol symbol;
try {
- symbol = lookupQualifiedName( ownerScope, duple.getLeadingSegments(), refs, false, LookupType.FORDEFINITION );
+ symbol = lookupQualifiedName( ownerScope, duple.getLeadingSegments(), null, false, LookupType.FORDEFINITION );
} catch (ASTSemanticException e) {
return scope;
}
@@ -3355,16 +3403,29 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
{
ISymbol typeSymbol = lookupQualifiedName( scopeToSymbol(scope), typeId.getTokenDuple(), refs, true );
if( typeSymbol == null || typeSymbol.getType() == TypeInfo.t_type )
+ {
+ freeReferences( refs );
handleProblem( scope, IProblem.SEMANTIC_INVALID_TYPE, id.getTypeOrClassName() );
+ }
result.setTypeSymbol( typeSymbol );
- typeId.addReferences( refs );
+ typeId.addReferences( refs, cache );
}
setPointerOperators( result, id.getPointerOperators(), id.getArrayModifiers() );
return result;
}
- /* (non-Javadoc)
+ /**
+ * @param refs
+ */
+ private void freeReferences(List refs) {
+ if( refs == null || refs.isEmpty() ) return;
+ for( int i =0; i < refs.size(); ++i)
+ cache.returnReference((IASTReference) refs.get(i));
+
+ }
+
+ /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#signalEndOfClassSpecifier(org.eclipse.cdt.core.parser.ast.IASTClassSpecifier)
*/
public void signalEndOfClassSpecifier(IASTClassSpecifier astClassSpecifier)
@@ -3396,8 +3457,13 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
{
}
- if( s != null )
- references.addAll( subReferences );
+ if( s != null && subReferences != null && !subReferences.isEmpty())
+ for( int j = 0; j < subReferences.size(); ++j )
+ {
+ IASTReference r = (IASTReference) subReferences.get(j);
+ references.add( cache.getReference( r.getOffset(), r.getReferencedElement()));
+ }
+
}
@@ -3405,7 +3471,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
astImplementation.setProcessingUnresolvedReferences( false );
if( ! references.isEmpty() )
- astImplementation.setExtraReferences( references );
+ astImplementation.setExtraReferences( references, cache );
}
@@ -3534,30 +3600,38 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
*/
public boolean validateIndirectMemberOperation(IASTNode node) {
List pointerOps = null;
+ TypeInfo typeInfo = null;
if( ( node instanceof ISymbolOwner ) )
{
ISymbol symbol = ((ISymbolOwner) node).getSymbol();
- TypeInfo info = symbol.getTypeInfo().getFinalType( true );
- pointerOps = info.getPtrOperators();
- info.release();
+ typeInfo = symbol.getTypeInfo().getFinalType(true);
+ pointerOps = typeInfo.getPtrOperators();
+ typeInfo.release();
}
else if( node instanceof ASTExpression )
{
ISymbol typeSymbol = ((ASTExpression)node).getResultType().getResult().getTypeSymbol();
- if( typeSymbol != null ){
- TypeInfo info = typeSymbol.getTypeInfo().getFinalType( true );
- pointerOps = info.getPtrOperators();
- info.release();
+ if( typeSymbol != null )
+ {
+ typeInfo = typeSymbol.getTypeInfo().getFinalType(true);
+ pointerOps = typeInfo.getPtrOperators();
}
}
else
return false;
-
- if( pointerOps == null || pointerOps.isEmpty() ) return false;
- TypeInfo.PtrOp lastOperator = (PtrOp) pointerOps.get( pointerOps.size() - 1 );
- if( lastOperator.getType() == TypeInfo.PtrOp.t_array || lastOperator.getType() == TypeInfo.PtrOp.t_pointer ) return true;
- return false;
+ try
+ {
+ if( pointerOps == null || pointerOps.isEmpty() ) return false;
+ TypeInfo.PtrOp lastOperator = (PtrOp) pointerOps.get( pointerOps.size() - 1 );
+ if( lastOperator.getType() == TypeInfo.PtrOp.t_array || lastOperator.getType() == TypeInfo.PtrOp.t_pointer ) return true;
+ return false;
+ }
+ finally
+ {
+ if( typeInfo != null )
+ typeInfo.release();
+ }
}
/* (non-Javadoc)
@@ -3568,15 +3642,17 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
if( ( node instanceof ISymbolOwner ) )
{
ISymbol symbol = ((ISymbolOwner) node).getSymbol();
- TypeInfo info = symbol.getTypeInfo().getFinalType( true );
- pointerOps = info.getPtrOperators();
- info.release();
+ TypeInfo typeInfo = symbol.getTypeInfo().getFinalType(true);
+ pointerOps = typeInfo.getPtrOperators();
+ typeInfo.release();
}
else if( node instanceof ASTExpression )
{
ISymbol typeSymbol = ((ASTExpression)node).getResultType().getResult().getTypeSymbol();
if( typeSymbol != null )
+ {
pointerOps = typeSymbol.getPtrOperators();
+ }
}
else
return false;
@@ -3594,4 +3670,18 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
//ignore
}
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTFactory#getReferenceManager()
+ */
+ public IReferenceManager getReferenceManager() {
+ return cache;
+ }
+
+ /**
+ * @return
+ */
+ public boolean validateCaches() {
+ return cache.isBalanced();
+ }
+
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ReferenceCache.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ReferenceCache.java
new file mode 100644
index 00000000000..76488f4d95a
--- /dev/null
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ReferenceCache.java
@@ -0,0 +1,879 @@
+/**********************************************************************
+ * Copyright (c) 2002-2004 Rational Software 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 Rational Software - Initial API and implementation
+ ***********************************************************************/
+package org.eclipse.cdt.internal.core.parser.ast.complete;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate;
+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.IASTEnumerationReference;
+import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier;
+import org.eclipse.cdt.core.parser.ast.IASTEnumerator;
+import org.eclipse.cdt.core.parser.ast.IASTEnumeratorReference;
+import org.eclipse.cdt.core.parser.ast.IASTField;
+import org.eclipse.cdt.core.parser.ast.IASTFieldReference;
+import org.eclipse.cdt.core.parser.ast.IASTFunction;
+import org.eclipse.cdt.core.parser.ast.IASTFunctionReference;
+import org.eclipse.cdt.core.parser.ast.IASTMethod;
+import org.eclipse.cdt.core.parser.ast.IASTMethodReference;
+import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition;
+import org.eclipse.cdt.core.parser.ast.IASTNamespaceReference;
+import org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement;
+import org.eclipse.cdt.core.parser.ast.IASTParameterDeclaration;
+import org.eclipse.cdt.core.parser.ast.IASTParameterReference;
+import org.eclipse.cdt.core.parser.ast.IASTReference;
+import org.eclipse.cdt.core.parser.ast.IASTTemplateParameter;
+import org.eclipse.cdt.core.parser.ast.IASTTemplateParameterReference;
+import org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier;
+import org.eclipse.cdt.core.parser.ast.IASTTypedefDeclaration;
+import org.eclipse.cdt.core.parser.ast.IASTTypedefReference;
+import org.eclipse.cdt.core.parser.ast.IASTVariable;
+import org.eclipse.cdt.core.parser.ast.IASTVariableReference;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
+
+/**
+ * @author jcamelon
+ *
+ */
+public class ReferenceCache implements IReferenceManager {
+
+ /**
+ * @author jcamelon
+ *
+ */
+ private interface IReferenceFactory {
+ ASTReference createReference();
+ ASTReference [] createReferenceArray( int size );
+ }
+
+ private static final int DEFAULT_CACHE_SIZE = 16;
+
+ private boolean[] classReferencesAvailable;
+ private ASTReference[] classReferences;
+ private boolean[] variableReferencesAvailable;
+ private ASTReference[] variableReferences;
+
+ private abstract static class BaseReferenceFactory implements IReferenceFactory
+ {
+ public ASTReference[] createReferenceArray(int size) {
+ return new ASTReference[ size ];
+ }
+ }
+
+ private static final IReferenceFactory CLASSREF_FACTORY =
+ new BaseReferenceFactory() {
+ public ASTReference createReference() { return new ASTClassReference(); }
+
+
+ };
+
+ private static final IReferenceFactory VARIABLEREF_FACTORY =
+ new BaseReferenceFactory() {
+
+ public ASTReference createReference() {
+ return new ASTVariableReference();
+ }
+
+ };
+
+
+ {
+ classReferences = CLASSREF_FACTORY.createReferenceArray(DEFAULT_CACHE_SIZE);
+ variableReferences = VARIABLEREF_FACTORY.createReferenceArray(DEFAULT_CACHE_SIZE);
+ classReferencesAvailable = new boolean[DEFAULT_CACHE_SIZE];
+ variableReferencesAvailable = new boolean[DEFAULT_CACHE_SIZE];
+ for (int i = 0; i < DEFAULT_CACHE_SIZE; ++i) {
+ classReferencesAvailable[i] = true;
+ variableReferencesAvailable[i] = true;
+ classReferences[i] = CLASSREF_FACTORY.createReference();
+ variableReferences[i] = VARIABLEREF_FACTORY.createReference();
+ }
+ }
+
+ public void returnReference(IASTReference reference) {
+ if (reference instanceof IASTClassReference)
+ {
+ returnReference(classReferencesAvailable, classReferences,
+ reference);
+ return;
+ }
+ if( reference instanceof IASTVariableReference )
+ {
+ returnReference( variableReferencesAvailable, variableReferences, reference );
+ return;
+ }
+
+ }
+
+ /**
+ * @param referencesAvailable
+ * @param references
+ * @param reference
+ */
+ private void returnReference(boolean[] referencesAvailable,
+ ASTReference[] references, IASTReference reference) {
+ for (int i = 0; i < referencesAvailable.length; ++i)
+ if (references[i] == reference) {
+ referencesAvailable[i] = true;
+ references[i].reset();
+ break;
+ }
+
+ }
+
+ public IASTReference getReference(int offset,
+ ISourceElementCallbackDelegate referencedElement) {
+ if (referencedElement instanceof IASTTypedefDeclaration)
+ return getTypedefReference(offset,
+ (IASTTypedefDeclaration) referencedElement);
+ if (referencedElement instanceof IASTEnumerationSpecifier)
+ return getEnumerationReference(offset,
+ (IASTEnumerationSpecifier) referencedElement);
+ if (referencedElement instanceof IASTTemplateParameter)
+ return getTemplateParameterReference(offset,
+ (IASTTemplateParameter) referencedElement);
+ if (referencedElement instanceof IASTParameterDeclaration)
+ return getParameterReference(offset,
+ (IASTParameterDeclaration) referencedElement);
+ if (referencedElement instanceof IASTTypeSpecifier)
+ return getClassReference(offset, referencedElement);
+ if (referencedElement instanceof IASTNamespaceDefinition)
+ return getNamespaceReference(offset,
+ (IASTNamespaceDefinition) referencedElement);
+ if (referencedElement instanceof IASTMethod)
+ return getMethodReference(offset, (IASTMethod) referencedElement);
+ if (referencedElement instanceof IASTFunction)
+ return getFunctionReference(offset,
+ (IASTFunction) referencedElement);
+ if (referencedElement instanceof IASTField)
+ return getFieldReference(offset, (IASTField) referencedElement);
+ if (referencedElement instanceof IASTVariable)
+ return getVariableReference(offset,
+ (IASTVariable) referencedElement);
+ if (referencedElement instanceof IASTEnumerator)
+ return getEnumeratorReference(offset,
+ (IASTEnumerator) referencedElement);
+ return null;
+ }
+
+ private IASTReference getClassReference(int offset,
+ ISourceElementCallbackDelegate referencedElement) {
+ for (int i = 0; i < classReferencesAvailable.length; ++i) {
+ if (classReferencesAvailable[i]) {
+ classReferencesAvailable[i] = false;
+ classReferences[i].initialize(offset, referencedElement);
+ return classReferences[i];
+ }
+ }
+ int currentSize = classReferences.length;
+ GrowResult g = growArrays(classReferences, classReferencesAvailable, CLASSREF_FACTORY );
+ classReferences = g.getReferences();
+ classReferencesAvailable = g.getAvailables();
+ classReferencesAvailable[currentSize] = false;
+ classReferences[currentSize].initialize(offset, referencedElement);
+ return classReferences[currentSize];
+ }
+
+ protected static class GrowResult
+ {
+ private boolean[] b;
+ private ASTReference[] r;
+
+ public void initialize( boolean [] bools, ASTReference [] refs )
+ {
+ this.b = bools;
+ this.r = refs;
+ }
+ /**
+ * @return Returns the b.
+ */
+ public boolean[] getAvailables() {
+ return b;
+ }
+ /**
+ * @return Returns the r.
+ */
+ public ASTReference[] getReferences() {
+ return r;
+ }
+ }
+
+ protected static final GrowResult growResult = new GrowResult();
+
+ /**
+ * @param inReferences, boolean [] inReferencesAvailable, IReferenceFactory factory
+ * @return
+ */
+ protected static GrowResult growArrays(ASTReference[] inReferences, boolean [] inReferencesAvailable, IReferenceFactory factory ) {
+ int currentSize = inReferences.length;
+ boolean[] availables = new boolean[currentSize * 2];
+ System.arraycopy(inReferencesAvailable, 0, availables, 0, currentSize);
+ ASTReference[] refs = factory.createReferenceArray(currentSize * 2);
+ System.arraycopy(inReferences, 0, refs, 0, currentSize);
+ for (int i = currentSize; i < availables.length; ++i) {
+ refs[i] = factory.createReference();
+ availables[i] = true;
+ }
+ growResult.initialize( availables, refs );
+ return growResult;
+ }
+
+ /**
+ * @param offset
+ * @param declaration
+ * @return
+ */
+ private IASTReference getTypedefReference(int offset,
+ IASTTypedefDeclaration declaration) {
+ return new ASTTypedefReference(offset, declaration);
+ }
+
+ /**
+ * @param offset
+ * @param variable
+ * @return
+ */
+ private IASTReference getVariableReference(int offset, IASTVariable referencedElement) {
+ for (int i = 0; i < variableReferencesAvailable.length; ++i) {
+ if (variableReferencesAvailable[i]) {
+ variableReferencesAvailable[i] = false;
+ variableReferences[i].initialize(offset, referencedElement);
+ return variableReferences[i];
+ }
+ }
+ int currentSize = variableReferences.length;
+ GrowResult g = growArrays( variableReferences, variableReferencesAvailable, VARIABLEREF_FACTORY );
+ variableReferencesAvailable = g.getAvailables();
+ variableReferences = g.getReferences();
+ variableReferencesAvailable[currentSize] = false;
+ variableReferences[currentSize].initialize(offset, referencedElement);
+ return variableReferences[currentSize];
+
+ }
+
+ /**
+ * @param offset
+ * @param declaration
+ * @return
+ */
+ private IASTReference getParameterReference(int offset,
+ IASTParameterDeclaration declaration) {
+ return new ASTParameterReference(offset, declaration);
+ }
+
+ /**
+ * @param offset
+ * @param parameter
+ * @return
+ */
+ private IASTReference getTemplateParameterReference(int offset,
+ IASTTemplateParameter parameter) {
+ return new ASTTemplateParameterReference(offset, parameter);
+ }
+
+ /**
+ * @param offset
+ * @param definition
+ * @return
+ */
+ private IASTReference getNamespaceReference(int offset,
+ IASTNamespaceDefinition definition) {
+ return new ASTNamespaceReference(offset, definition);
+ }
+
+ /**
+ * @param offset
+ * @param specifier
+ * @return
+ */
+ private IASTReference getEnumerationReference(int offset,
+ IASTEnumerationSpecifier specifier) {
+ return new ASTEnumerationReference(offset, specifier);
+ }
+
+ /**
+ * @param offset
+ * @param enumerator
+ * @return
+ */
+ private IASTReference getEnumeratorReference(int offset,
+ IASTEnumerator enumerator) {
+ return new ASTEnumeratorReference(offset, enumerator);
+ }
+
+ /**
+ * @param offset
+ * @param method
+ * @return
+ */
+ private IASTReference getMethodReference(int offset, IASTMethod method) {
+ return new ASTMethodReference(offset, method);
+ }
+
+ /**
+ * @param offset
+ * @param function
+ * @return
+ */
+ private IASTReference getFunctionReference(int offset, IASTFunction function) {
+ return new ASTFunctionReference(offset, function);
+ }
+
+ /**
+ * @param offset
+ * @param field
+ * @return
+ */
+ private IASTReference getFieldReference(int offset, IASTField field) {
+ return new ASTFieldReference(offset, field);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTReferenceStore#processReferences()
+ */
+ public void processReferences(List references, ISourceElementRequestor requestor)
+ {
+ if( references == null || references == Collections.EMPTY_LIST || references.isEmpty() )
+ return;
+
+ for( int i = 0; i < references.size(); ++i )
+ {
+ IASTReference reference = ((IASTReference)references.get(i));
+ reference.acceptElement(requestor, this );
+ returnReference( reference );
+ }
+
+ references.clear();
+ }
+
+ public abstract static class ASTReference implements IASTReference {
+ protected int offset;
+ private static final String EMPTY_STRING = ""; //$NON-NLS-1$
+
+ public void reset() {
+ offset = 0;
+ }
+
+ /**
+ * @param offset2
+ * @param referencedElement
+ */
+ public void initialize(int o, ISourceElementCallbackDelegate referencedElement) {
+ }
+
+ public void initialize(int o) {
+ this.offset = o;
+ }
+
+ /**
+ *
+ */
+ public ASTReference(int offset) {
+ this.offset = offset;
+ }
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.cdt.core.parser.ast.IASTReference#getOffset()
+ */
+ public int getOffset() {
+ return offset;
+ }
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.cdt.core.parser.ast.IASTReference#getName()
+ */
+ public String getName() {
+ if (getReferencedElement() instanceof IASTOffsetableNamedElement)
+ return ((IASTOffsetableNamedElement) getReferencedElement())
+ .getName();
+ return EMPTY_STRING;
+ }
+
+ public boolean equals(Object obj) {
+ if (obj == null)
+ return false;
+ if (!(obj instanceof IASTReference))
+ return false;
+
+ if (((IASTReference) obj).getName().equals(getName())
+ && ((IASTReference) obj).getOffset() == getOffset())
+ return true;
+ return false;
+ }
+
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager) {
+ }
+
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager) {
+ }
+ }
+ public static class ASTClassReference extends ASTReference
+ implements
+ IASTClassReference {
+ private IASTTypeSpecifier reference;
+ /**
+ * @param i
+ * @param specifier
+ */
+ public ASTClassReference(int i, IASTTypeSpecifier specifier) {
+ super(i);
+ reference = specifier;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.cdt.internal.core.parser.ast.complete.ASTReference#initialize(int)
+ */
+ public void initialize(int o, ISourceElementCallbackDelegate specifier) {
+ super.initialize(o);
+ reference = (IASTTypeSpecifier) specifier;
+ }
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.cdt.internal.core.parser.ast.complete.ASTReference#reset()
+ */
+ public void reset() {
+ super.reset();
+ reference = null;
+ }
+ /**
+ *
+ */
+ public ASTClassReference() {
+ super(0);
+ reference = null;
+ }
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.cdt.core.parser.ast.IASTReference#getReferencedElement()
+ */
+ public ISourceElementCallbackDelegate getReferencedElement() {
+ return (ISourceElementCallbackDelegate) reference;
+ }
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
+ */
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager) {
+ try {
+ requestor.acceptClassReference(this);
+ } catch (Exception e) {
+ /* do nothing */
+ }
+ }
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.cdt.core.parser.ast.IASTClassReference#isResolved()
+ */
+ public boolean isResolved() {
+ return (reference instanceof IASTClassSpecifier);
+ }
+ }
+
+ public static class ASTEnumerationReference extends ASTReference
+ implements
+ IASTEnumerationReference {
+ private final IASTEnumerationSpecifier referencedElement;
+ /**
+ * @param offset
+ * @param specifier
+ */
+ public ASTEnumerationReference(int offset,
+ IASTEnumerationSpecifier specifier) {
+ super(offset);
+ referencedElement = specifier;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.cdt.core.parser.ast.IASTReference#getReferencedElement()
+ */
+ public ISourceElementCallbackDelegate getReferencedElement() {
+ return referencedElement;
+ }
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
+ */
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager) {
+ try {
+ requestor.acceptEnumerationReference(this);
+ } catch (Exception e) {
+ /* do nothing */
+ }
+ }
+ }
+
+ public static class ASTEnumeratorReference extends ASTReference
+ implements
+ IASTEnumeratorReference {
+
+ private final IASTEnumerator enumerator;
+ /**
+ * @param offset
+ * @param enumerator
+ */
+ public ASTEnumeratorReference(int offset, IASTEnumerator enumerator) {
+ super(offset);
+ this.enumerator = enumerator;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.cdt.core.parser.ast.IASTReference#getReferencedElement()
+ */
+ public ISourceElementCallbackDelegate getReferencedElement() {
+ return enumerator;
+ }
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
+ */
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager) {
+ try {
+ requestor.acceptEnumeratorReference(this);
+ } catch (Exception e) {
+ /* do nothing */
+ }
+ }
+ }
+ public static class ASTFieldReference extends ASTReference
+ implements
+ IASTReference,
+ IASTFieldReference {
+ private final IASTField referencedElement;
+ /**
+ * @param offset
+ * @param field
+ */
+ public ASTFieldReference(int offset, IASTField field) {
+ super(offset);
+ referencedElement = field;
+ }
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.cdt.core.parser.ast.IASTReference#getReferencedElement()
+ */
+ public ISourceElementCallbackDelegate getReferencedElement() {
+ return referencedElement;
+ }
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
+ */
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager) {
+ try {
+ requestor.acceptFieldReference(this);
+ } catch (Exception e) {
+ /* do nothing */
+ }
+ }
+ }
+
+ public static class ASTFunctionReference extends ASTReference
+ implements
+ IASTReference,
+ IASTFunctionReference {
+ private final IASTFunction declaration;
+ /**
+ * @param offset
+ */
+ public ASTFunctionReference(int offset,
+ IASTFunction referencedDeclaration) {
+ super(offset);
+ this.declaration = referencedDeclaration;
+ }
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.cdt.core.parser.ast.IASTReference#getReferencedElement()
+ */
+ public ISourceElementCallbackDelegate getReferencedElement() {
+ return declaration;
+ }
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
+ */
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager) {
+ try {
+ requestor.acceptFunctionReference(this);
+ } catch (Exception e) {
+ /* do nothing */
+ }
+ }
+ }
+ public static class ASTMethodReference extends ASTReference
+ implements
+ IASTMethodReference {
+ private final IASTMethod method;
+ /**
+ * @param offset
+ */
+ public ASTMethodReference(int offset, IASTMethod method) {
+ super(offset);
+ this.method = method;
+ }
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.cdt.core.parser.ast.IASTReference#getReferencedElement()
+ */
+ public ISourceElementCallbackDelegate getReferencedElement() {
+ return method;
+ }
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
+ */
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager) {
+ try {
+ requestor.acceptMethodReference(this);
+ } catch (Exception e) {
+ /* do nothing */
+ }
+ }
+ }
+ public static class ASTNamespaceReference extends ASTReference
+ implements
+ IASTNamespaceReference {
+ private final IASTNamespaceDefinition reference;
+
+ /**
+ * @param offset
+ * @param definition
+ */
+ public ASTNamespaceReference(int offset,
+ IASTNamespaceDefinition definition) {
+ super(offset);
+ reference = definition;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.cdt.core.parser.ast.IASTReference#getReferencedElement()
+ */
+ public ISourceElementCallbackDelegate getReferencedElement() {
+ return reference;
+ }
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
+ */
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager) {
+ try {
+ requestor.acceptNamespaceReference(this);
+ } catch (Exception e) {
+ /* do nothing */
+ }
+ }
+ }
+
+ public static class ASTParameterReference extends ASTReference
+ implements
+ IASTParameterReference {
+ private final IASTParameterDeclaration parm;
+
+ /**
+ * @param offset
+ * @param declaration
+ */
+ public ASTParameterReference(int offset,
+ IASTParameterDeclaration declaration) {
+ super(offset);
+ parm = declaration;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.cdt.core.parser.ast.IASTReference#getReferencedElement()
+ */
+ public ISourceElementCallbackDelegate getReferencedElement() {
+ return parm;
+ }
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
+ */
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager) {
+ try {
+ requestor.acceptParameterReference(this);
+ } catch (Exception e) {
+ /* do nothing */
+ }
+ }
+ }
+ public static class ASTTemplateParameterReference extends ASTReference
+ implements
+ IASTTemplateParameterReference {
+ private final IASTTemplateParameter parameter;
+ /**
+ * @param offset
+ */
+ public ASTTemplateParameterReference(int offset,
+ IASTTemplateParameter param) {
+ super(offset);
+ parameter = param;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.cdt.core.parser.ast.IASTReference#getReferencedElement()
+ */
+ public ISourceElementCallbackDelegate getReferencedElement() {
+ return parameter;
+ }
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
+ */
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager) {
+ try {
+ requestor.acceptTemplateParameterReference(this);
+ } catch (Exception e) {
+ /* do nothing */
+ }
+ }
+ }
+ public static class ASTTypedefReference extends ASTReference
+ implements
+ IASTTypedefReference {
+ private final IASTTypedefDeclaration referencedItem;
+ /**
+ * @param offset
+ */
+ public ASTTypedefReference(int offset,
+ IASTTypedefDeclaration referencedItem) {
+ super(offset);
+ this.referencedItem = referencedItem;
+ }
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.cdt.core.parser.ast.IASTReference#getReferencedElement()
+ */
+ public ISourceElementCallbackDelegate getReferencedElement() {
+ return referencedItem;
+ }
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
+ */
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager) {
+ try {
+ requestor.acceptTypedefReference(this);
+ } catch (Exception e) {
+ /* do nothing */
+ }
+ }
+ }
+ public static class ASTVariableReference extends ASTReference
+ implements
+ IASTReference,
+ IASTVariableReference {
+
+ private IASTVariable referencedElement;
+ /**
+ * @param offset
+ * @param variable
+ */
+ public ASTVariableReference(int offset, IASTVariable variable) {
+ super(offset);
+ referencedElement = variable;
+ }
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.internal.core.parser.ast.complete.ReferenceCache.ASTReference#initialize(int)
+ */
+ public void initialize(int o, ISourceElementCallbackDelegate var ) {
+ super.initialize(o);
+ referencedElement = (IASTVariable) var;
+ }
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.internal.core.parser.ast.complete.ReferenceCache.ASTReference#reset()
+ */
+ public void reset() {
+ super.reset();
+ referencedElement = null;
+ }
+ /**
+ *
+ */
+ public ASTVariableReference() {
+ super(0);
+ referencedElement = null;
+ }
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.cdt.core.parser.ast.IASTReference#getReferencedElement()
+ */
+ public ISourceElementCallbackDelegate getReferencedElement() {
+ return referencedElement;
+ }
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
+ */
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager) {
+ try {
+ requestor.acceptVariableReference(this);
+ } catch (Exception e) {
+ /* do nothing */
+ }
+ }
+ }
+ /**
+ * @return
+ */
+ public boolean isBalanced() {
+ return isBalanced( classReferencesAvailable ) && isBalanced( variableReferencesAvailable );
+ }
+
+ /**
+ * @param referencesAvailable
+ * @return
+ */
+ private boolean isBalanced(boolean[] referencesAvailable ) {
+ for( int i = 0; i < referencesAvailable.length; ++i )
+ {
+ if( !referencesAvailable[i] )
+ return false;
+ }
+ return true;
+ }
+
+}
\ No newline at end of file
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ASTExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ASTExpression.java
index 26990f50d59..cc4cfd3cd9b 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ASTExpression.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ASTExpression.java
@@ -12,6 +12,7 @@ import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException;
import org.eclipse.cdt.core.parser.ast.IASTExpression;
import org.eclipse.cdt.core.parser.ast.IASTNode;
import org.eclipse.cdt.core.parser.ast.IASTTypeId;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
@@ -167,21 +168,21 @@ public class ASTExpression implements IASTExpression {
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
@@ -216,5 +217,11 @@ public class ASTExpression implements IASTExpression {
throw new ASTNotImplementedException();
}
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTExpression#freeReferences()
+ */
+ public void freeReferences(IReferenceManager manager) {
+ }
+
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ExpressionParseASTFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ExpressionParseASTFactory.java
index 9050ca62137..6ad62d35772 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ExpressionParseASTFactory.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ExpressionParseASTFactory.java
@@ -60,6 +60,7 @@ import org.eclipse.cdt.core.parser.ast.IASTTypedefDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTUsingDirective;
import org.eclipse.cdt.core.parser.ast.IASTVariable;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier.ClassNameType;
import org.eclipse.cdt.core.parser.ast.IASTDesignator.DesignatorKind;
import org.eclipse.cdt.core.parser.ast.IASTExpression.IASTNewExpressionDescriptor;
@@ -913,4 +914,11 @@ public class ExpressionParseASTFactory extends BaseASTFactory implements IASTFac
//ignore
}
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTFactory#getReferenceManager()
+ */
+ public IReferenceManager getReferenceManager() {
+ // TODO Auto-generated method stub
+ return null;
+ }
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/gcc/ASTGCCDesignator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/gcc/ASTGCCDesignator.java
index 7290bd0b20e..e4f3633312d 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/gcc/ASTGCCDesignator.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/gcc/ASTGCCDesignator.java
@@ -13,6 +13,7 @@ package org.eclipse.cdt.internal.core.parser.ast.gcc;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ast.IASTDesignator;
import org.eclipse.cdt.core.parser.ast.IASTExpression;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.core.parser.ast.gcc.IASTGCCDesignator;
import org.eclipse.cdt.internal.core.parser.ast.ASTDesignator;
@@ -46,10 +47,10 @@ public class ASTGCCDesignator extends ASTDesignator
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
- super.acceptElement( requestor );
+ super.acceptElement( requestor, manager );
if( secondExpression != null )
- secondExpression.acceptElement(requestor);
+ secondExpression.acceptElement(requestor, manager);
}
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTASMDefinition.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTASMDefinition.java
index 7931647985d..e7cd69b2ae4 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTASMDefinition.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTASMDefinition.java
@@ -13,6 +13,7 @@ package org.eclipse.cdt.internal.core.parser.ast.quick;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ast.IASTASMDefinition;
import org.eclipse.cdt.core.parser.ast.IASTScope;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.internal.core.parser.ast.Offsets;
/**
@@ -71,7 +72,7 @@ public class ASTASMDefinition
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#accept(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
@@ -86,14 +87,14 @@ public class ASTASMDefinition
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enter(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exit(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTAbstractTypeSpecifierDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTAbstractTypeSpecifierDeclaration.java
index fe78ed010c5..459898f3f47 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTAbstractTypeSpecifierDeclaration.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTAbstractTypeSpecifierDeclaration.java
@@ -15,6 +15,7 @@ import org.eclipse.cdt.core.parser.ast.IASTAbstractTypeSpecifierDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTScope;
import org.eclipse.cdt.core.parser.ast.IASTTemplate;
import org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.internal.core.parser.ast.Offsets;
/**
@@ -91,7 +92,7 @@ public class ASTAbstractTypeSpecifierDeclaration
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#accept(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
@@ -109,14 +110,14 @@ public class ASTAbstractTypeSpecifierDeclaration
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enter(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exit(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTBaseSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTBaseSpecifier.java
index 4efe0665d7b..f57d79435d4 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTBaseSpecifier.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTBaseSpecifier.java
@@ -16,6 +16,7 @@ import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException;
import org.eclipse.cdt.core.parser.ast.IASTBaseSpecifier;
import org.eclipse.cdt.core.parser.ast.IASTReference;
import org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
/**
* @author jcamelon
@@ -86,20 +87,20 @@ public class ASTBaseSpecifier implements IASTBaseSpecifier {
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
// no references to process
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTClassSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTClassSpecifier.java
index 7457e3e69d5..c0906b898e5 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTClassSpecifier.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTClassSpecifier.java
@@ -19,6 +19,7 @@ import org.eclipse.cdt.core.parser.ast.ASTClassKind;
import org.eclipse.cdt.core.parser.ast.IASTBaseSpecifier;
import org.eclipse.cdt.core.parser.ast.IASTDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTScope;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.internal.core.parser.ast.NamedOffsets;
/**
* @author jcamelon
@@ -165,13 +166,13 @@ public class ASTClassSpecifier extends ASTScopedTypeSpecifier implements IASTQCl
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#accept(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enter(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
@@ -185,7 +186,7 @@ public class ASTClassSpecifier extends ASTScopedTypeSpecifier implements IASTQCl
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exit(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTCompilationUnit.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTCompilationUnit.java
index 264c0a451b9..b6cb162df90 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTCompilationUnit.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTCompilationUnit.java
@@ -17,6 +17,7 @@ import java.util.List;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ast.IASTCompilationUnit;
import org.eclipse.cdt.core.parser.ast.IASTDeclaration;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
/**
* @author jcamelon
@@ -41,13 +42,13 @@ public class ASTCompilationUnit extends ASTNode implements IASTCompilationUnit,
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#accept(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enter(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
@@ -62,7 +63,7 @@ public class ASTCompilationUnit extends ASTNode implements IASTCompilationUnit,
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exit(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTConstructorMemberInitializer.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTConstructorMemberInitializer.java
index 3ab19d0c67d..3ef9e65463c 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTConstructorMemberInitializer.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTConstructorMemberInitializer.java
@@ -13,6 +13,7 @@ package org.eclipse.cdt.internal.core.parser.ast.quick;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ast.IASTConstructorMemberInitializer;
import org.eclipse.cdt.core.parser.ast.IASTExpression;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
/**
* @author jcamelon
@@ -50,19 +51,19 @@ public class ASTConstructorMemberInitializer
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTElaboratedTypeSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTElaboratedTypeSpecifier.java
index 2962ef790c1..a17580ffcb3 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTElaboratedTypeSpecifier.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTElaboratedTypeSpecifier.java
@@ -15,6 +15,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.IASTScope;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.internal.core.parser.ast.ASTQualifiedNamedElement;
import org.eclipse.cdt.internal.core.parser.ast.NamedOffsets;
@@ -105,7 +106,7 @@ public class ASTElaboratedTypeSpecifier extends ASTNode implements IASTElaborate
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
@@ -119,13 +120,13 @@ public class ASTElaboratedTypeSpecifier extends ASTNode implements IASTElaborate
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTEnumerationSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTEnumerationSpecifier.java
index b3a91a64c74..24316ecde3c 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTEnumerationSpecifier.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTEnumerationSpecifier.java
@@ -19,6 +19,7 @@ import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier;
import org.eclipse.cdt.core.parser.ast.IASTEnumerator;
import org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement;
import org.eclipse.cdt.core.parser.ast.IASTScope;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.internal.core.parser.ast.NamedOffsets;
/**
@@ -109,7 +110,7 @@ public class ASTEnumerationSpecifier extends ASTScopedTypeSpecifier
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#accept(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
@@ -123,13 +124,13 @@ public class ASTEnumerationSpecifier extends ASTScopedTypeSpecifier
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enter(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exit(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTEnumerator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTEnumerator.java
index bcaa686c8df..1e22d7a6a9a 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTEnumerator.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTEnumerator.java
@@ -15,6 +15,7 @@ import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier;
import org.eclipse.cdt.core.parser.ast.IASTEnumerator;
import org.eclipse.cdt.core.parser.ast.IASTExpression;
import org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.internal.core.parser.ast.NamedOffsets;
import org.eclipse.cdt.internal.core.parser.ast.complete.ASTNode;
@@ -112,19 +113,19 @@ public class ASTEnumerator extends ASTNode
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTExceptionSpecification.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTExceptionSpecification.java
index d7930d9203c..07e3d47dfbf 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTExceptionSpecification.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTExceptionSpecification.java
@@ -17,6 +17,7 @@ import java.util.List;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ast.IASTExceptionSpecification;
import org.eclipse.cdt.core.parser.ast.IASTTypeId;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
/**
* @author jcamelon
@@ -47,21 +48,21 @@ public class ASTExceptionSpecification implements IASTExceptionSpecification
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTField.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTField.java
index 080a0acea15..2fbfec85385 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTField.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTField.java
@@ -17,6 +17,7 @@ import org.eclipse.cdt.core.parser.ast.IASTExpression;
import org.eclipse.cdt.core.parser.ast.IASTField;
import org.eclipse.cdt.core.parser.ast.IASTInitializerClause;
import org.eclipse.cdt.core.parser.ast.IASTScope;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
/**
* @author jcamelon
@@ -62,7 +63,7 @@ public class ASTField extends ASTVariable implements IASTField
return visibility;
}
- public void acceptElement( ISourceElementRequestor requestor )
+ public void acceptElement( ISourceElementRequestor requestor, IReferenceManager manager )
{
try
{
@@ -74,11 +75,11 @@ public class ASTField extends ASTVariable implements IASTField
}
}
- public void enterScope( ISourceElementRequestor requestor )
+ public void enterScope( ISourceElementRequestor requestor, IReferenceManager manager )
{
}
- public void exitScope( ISourceElementRequestor requestor )
+ public void exitScope( ISourceElementRequestor requestor, IReferenceManager manager )
{
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTFunction.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTFunction.java
index 20fe5793224..e84340736ab 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTFunction.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTFunction.java
@@ -22,6 +22,7 @@ import org.eclipse.cdt.core.parser.ast.IASTFunction;
import org.eclipse.cdt.core.parser.ast.IASTQualifiedNameElement;
import org.eclipse.cdt.core.parser.ast.IASTScope;
import org.eclipse.cdt.core.parser.ast.IASTTemplate;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.internal.core.parser.ast.ASTQualifiedNamedElement;
import org.eclipse.cdt.internal.core.parser.ast.NamedOffsets;
@@ -184,7 +185,7 @@ public class ASTFunction extends ASTDeclaration implements IASTFunction
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#accept(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
@@ -202,7 +203,7 @@ public class ASTFunction extends ASTDeclaration implements IASTFunction
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enter(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
@@ -217,7 +218,7 @@ public class ASTFunction extends ASTDeclaration implements IASTFunction
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exit(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTInitializerClause.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTInitializerClause.java
index fba26f73d69..c71c9caf86d 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTInitializerClause.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTInitializerClause.java
@@ -18,6 +18,7 @@ import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException;
import org.eclipse.cdt.core.parser.ast.IASTExpression;
import org.eclipse.cdt.core.parser.ast.IASTInitializerClause;
import org.eclipse.cdt.core.parser.ast.IASTVariable;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.internal.core.parser.ast.EmptyIterator;
/**
@@ -60,21 +61,21 @@ public class ASTInitializerClause implements IASTInitializerClause {
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTLinkageSpecification.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTLinkageSpecification.java
index 5c0bfe4b578..5379bd7278c 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTLinkageSpecification.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTLinkageSpecification.java
@@ -18,6 +18,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.IASTScope;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.internal.core.parser.ast.Offsets;
/**
@@ -92,14 +93,14 @@ public class ASTLinkageSpecification
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#accept(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enter(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
@@ -114,7 +115,7 @@ public class ASTLinkageSpecification
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exit(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTMethod.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTMethod.java
index cca61c2d57b..1a5a77ac8f2 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTMethod.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTMethod.java
@@ -21,6 +21,7 @@ import org.eclipse.cdt.core.parser.ast.IASTMethod;
import org.eclipse.cdt.core.parser.ast.IASTQualifiedNameElement;
import org.eclipse.cdt.core.parser.ast.IASTScope;
import org.eclipse.cdt.core.parser.ast.IASTTemplate;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.internal.core.parser.ast.ASTQualifiedNamedElement;
import org.eclipse.cdt.internal.core.parser.ast.EmptyIterator;
/**
@@ -167,7 +168,7 @@ public class ASTMethod extends ASTFunction implements IASTMethod
*/
- public void acceptElement( ISourceElementRequestor requestor )
+ public void acceptElement( ISourceElementRequestor requestor, IReferenceManager manager )
{
try
{
@@ -182,7 +183,7 @@ public class ASTMethod extends ASTFunction implements IASTMethod
}
}
- public void enterScope( ISourceElementRequestor requestor )
+ public void enterScope( ISourceElementRequestor requestor, IReferenceManager manager )
{
try
{
@@ -194,7 +195,7 @@ public class ASTMethod extends ASTFunction implements IASTMethod
}
}
- public void exitScope( ISourceElementRequestor requestor )
+ public void exitScope( ISourceElementRequestor requestor, IReferenceManager manager )
{
try
{
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTNamespaceAlias.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTNamespaceAlias.java
index 3a4dbb27d88..484b9591e8d 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTNamespaceAlias.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTNamespaceAlias.java
@@ -15,6 +15,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.IASTScope;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.internal.core.parser.ast.NamedOffsets;
/**
@@ -48,21 +49,21 @@ public class ASTNamespaceAlias extends ASTDeclaration implements IASTNamespaceAl
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTNamespaceDefinition.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTNamespaceDefinition.java
index 77ac0b15b30..49a0d0eb4ad 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTNamespaceDefinition.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTNamespaceDefinition.java
@@ -18,6 +18,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.IASTScope;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.internal.core.parser.ast.ASTQualifiedNamedElement;
import org.eclipse.cdt.internal.core.parser.ast.NamedOffsets;
@@ -113,13 +114,13 @@ public class ASTNamespaceDefinition extends ASTDeclaration implements IASTNamesp
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#accept(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enter(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
@@ -133,7 +134,7 @@ public class ASTNamespaceDefinition extends ASTDeclaration implements IASTNamesp
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exit(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTNewDescriptor.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTNewDescriptor.java
index 47973901ccd..5ec90a68c05 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTNewDescriptor.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTNewDescriptor.java
@@ -13,7 +13,9 @@ package org.eclipse.cdt.internal.core.parser.ast.quick;
import java.util.Iterator;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.core.parser.ast.IASTExpression.IASTNewExpressionDescriptor;
+import org.eclipse.cdt.internal.core.parser.ast.EmptyIterator;
/**
* @author jcamelon
@@ -25,45 +27,48 @@ public class ASTNewDescriptor implements IASTNewExpressionDescriptor {
* @see org.eclipse.cdt.core.parser.ast.IASTExpression.IASTNewExpressionDescriptor#getNewInitializerExpressions()
*/
public Iterator getNewInitializerExpressions() {
- // TODO Auto-generated method stub
- return null;
+ return EmptyIterator.EMPTY_ITERATOR;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTExpression.IASTNewExpressionDescriptor#getNewPlacementExpressions()
*/
public Iterator getNewPlacementExpressions() {
- // TODO Auto-generated method stub
- return null;
+ return EmptyIterator.EMPTY_ITERATOR;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTExpression.IASTNewExpressionDescriptor#getTypeIdExpressions()
*/
public Iterator getNewTypeIdExpressions() {
- // TODO Auto-generated method stub
- return null;
+ return EmptyIterator.EMPTY_ITERATOR;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTExpression.IASTNewExpressionDescriptor#freeReferences(org.eclipse.cdt.core.parser.ast.IReferenceManager)
+ */
+ public void freeReferences(IReferenceManager manager) {
+ }
+
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTSimpleTypeSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTSimpleTypeSpecifier.java
index 562c373c780..9dfb676a616 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTSimpleTypeSpecifier.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTSimpleTypeSpecifier.java
@@ -17,6 +17,7 @@ import org.eclipse.cdt.core.parser.ITokenDuple;
import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException;
import org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier;
import org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
/**
* @author jcamelon
@@ -136,4 +137,11 @@ public class ASTSimpleTypeSpecifier extends ASTNode implements IASTSimpleTypeSpe
{
return imaginary;
}
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier#releaseReferences(org.eclipse.cdt.core.parser.ast.IReferenceManager)
+ */
+ public void releaseReferences(IReferenceManager referenceManager) {
+ // DO NOTHING
+ }
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateDeclaration.java
index 591cf69c099..d53b2d85df6 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateDeclaration.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateDeclaration.java
@@ -19,6 +19,7 @@ import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException;
import org.eclipse.cdt.core.parser.ast.IASTDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTScope;
import org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.internal.core.parser.ast.EmptyIterator;
import org.eclipse.cdt.internal.core.parser.ast.Offsets;
@@ -106,14 +107,14 @@ public class ASTTemplateDeclaration extends ASTDeclaration implements IASTTempla
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#accept(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enter(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
@@ -128,7 +129,7 @@ public class ASTTemplateDeclaration extends ASTDeclaration implements IASTTempla
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exit(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateInstantiation.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateInstantiation.java
index fa75fafbef3..a51b03c0f01 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateInstantiation.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateInstantiation.java
@@ -18,6 +18,7 @@ import org.eclipse.cdt.core.parser.ast.IASTDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTScope;
import org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTTemplateInstantiation;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.internal.core.parser.ast.Offsets;
/**
@@ -89,14 +90,14 @@ public class ASTTemplateInstantiation extends ASTDeclaration implements IASTTemp
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#accept(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enter(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
@@ -112,7 +113,7 @@ public class ASTTemplateInstantiation extends ASTDeclaration implements IASTTemp
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exit(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateParameter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateParameter.java
index ef7153cdf65..221fcb53f75 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateParameter.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateParameter.java
@@ -20,6 +20,7 @@ import org.eclipse.cdt.core.parser.ast.IASTNode;
import org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement;
import org.eclipse.cdt.core.parser.ast.IASTParameterDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTTemplateParameter;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.internal.core.parser.ast.NamedOffsets;
/**
@@ -91,18 +92,18 @@ public class ASTTemplateParameter implements IASTTemplateParameter, IASTOffsetab
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor) {
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor) {
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager) {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor) {
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager) {
}
/* (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)
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateSpecialization.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateSpecialization.java
index 1e4a3051711..b6b35795722 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateSpecialization.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTemplateSpecialization.java
@@ -13,6 +13,7 @@ package org.eclipse.cdt.internal.core.parser.ast.quick;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ast.IASTScope;
import org.eclipse.cdt.core.parser.ast.IASTTemplateSpecialization;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
/**
* @author jcamelon
@@ -32,14 +33,14 @@ public class ASTTemplateSpecialization extends ASTTemplateDeclaration implements
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#accept(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enter(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
@@ -54,7 +55,7 @@ public class ASTTemplateSpecialization extends ASTTemplateDeclaration implements
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exit(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTypeId.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTypeId.java
index b392124a79c..916a49d3ccd 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTypeId.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTypeId.java
@@ -16,6 +16,7 @@ import java.util.List;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException;
import org.eclipse.cdt.core.parser.ast.IASTTypeId;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier.Type;
import org.eclipse.cdt.internal.core.parser.pst.ISymbol;
@@ -153,19 +154,25 @@ public class ASTTypeId implements IASTTypeId
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTTypeId#freeReferences(org.eclipse.cdt.core.parser.ast.IReferenceManager)
+ */
+ public void freeReferences(IReferenceManager manager) {
+ // do nothing
+ }
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTypedefDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTypedefDeclaration.java
index 87b7dd3403b..4ed42b26108 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTypedefDeclaration.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTypedefDeclaration.java
@@ -16,6 +16,7 @@ import org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTScope;
import org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier;
import org.eclipse.cdt.core.parser.ast.IASTTypedefDeclaration;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.internal.core.parser.ast.ASTQualifiedNamedElement;
import org.eclipse.cdt.internal.core.parser.ast.NamedOffsets;
@@ -112,7 +113,7 @@ public class ASTTypedefDeclaration extends ASTDeclaration implements IASTTypedef
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#accept(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
@@ -126,13 +127,13 @@ public class ASTTypedefDeclaration extends ASTDeclaration implements IASTTypedef
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enter(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exit(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTUsingDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTUsingDeclaration.java
index 9886a9806ed..9d1b39f1f03 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTUsingDeclaration.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTUsingDeclaration.java
@@ -16,6 +16,7 @@ import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException;
import org.eclipse.cdt.core.parser.ast.IASTScope;
import org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.internal.core.parser.ast.Offsets;
/**
@@ -83,7 +84,7 @@ public class ASTUsingDeclaration
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#accept(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
@@ -97,13 +98,13 @@ public class ASTUsingDeclaration
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enter(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exit(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTUsingDirective.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTUsingDirective.java
index 52452f1c567..d2af0ef14d8 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTUsingDirective.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTUsingDirective.java
@@ -15,6 +15,7 @@ import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException;
import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition;
import org.eclipse.cdt.core.parser.ast.IASTScope;
import org.eclipse.cdt.core.parser.ast.IASTUsingDirective;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.internal.core.parser.ast.Offsets;
/**
@@ -74,7 +75,7 @@ public class ASTUsingDirective
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#accept(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
@@ -88,13 +89,13 @@ public class ASTUsingDirective
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enter(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exit(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTVariable.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTVariable.java
index c78963f69ab..7dfacd6a018 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTVariable.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTVariable.java
@@ -16,6 +16,7 @@ import org.eclipse.cdt.core.parser.ast.IASTExpression;
import org.eclipse.cdt.core.parser.ast.IASTInitializerClause;
import org.eclipse.cdt.core.parser.ast.IASTScope;
import org.eclipse.cdt.core.parser.ast.IASTVariable;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
import org.eclipse.cdt.internal.core.parser.ast.ASTQualifiedNamedElement;
import org.eclipse.cdt.internal.core.parser.ast.NamedOffsets;
@@ -183,7 +184,7 @@ public class ASTVariable extends ASTDeclaration implements IASTVariable
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#accept(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void acceptElement(ISourceElementRequestor requestor)
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager)
{
try
{
@@ -197,13 +198,13 @@ public class ASTVariable extends ASTDeclaration implements IASTVariable
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enter(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void enterScope(ISourceElementRequestor requestor)
+ public void enterScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exit(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
- public void exitScope(ISourceElementRequestor requestor)
+ public void exitScope(ISourceElementRequestor requestor, IReferenceManager manager)
{
}
/* (non-Javadoc)
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/QuickParseASTFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/QuickParseASTFactory.java
index 4faf5815dcf..36fea07d645 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/QuickParseASTFactory.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/QuickParseASTFactory.java
@@ -54,6 +54,7 @@ import org.eclipse.cdt.core.parser.ast.IASTTypedefDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTUsingDirective;
import org.eclipse.cdt.core.parser.ast.IASTVariable;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
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;
@@ -391,4 +392,13 @@ public class QuickParseASTFactory extends BaseASTFactory implements IASTFactory
public void constructExpressions(boolean flag) {
temporarilyDisableNodeConstruction = flag;
}
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ast.IASTFactory#getReferenceManager()
+ */
+ public IReferenceManager getReferenceManager() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ContextStack.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ContextStack.java
index f61e0446c74..a6e9fa1702f 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ContextStack.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ContextStack.java
@@ -119,7 +119,7 @@ public class ContextStack {
throw new ContextException( IProblem.PREPROCESSOR_CIRCULAR_INCLUSION );
TraceUtil.outputTrace(log, "Scanner::ContextStack: entering inclusion ", null, context.getContextName(), null, null ); //$NON-NLS-1$
- context.getExtension().enterScope( requestor );
+ context.getExtension().enterScope( requestor, null );
cs_push(context);
lastFileContext++;
}
@@ -153,7 +153,7 @@ public class ContextStack {
if( context.getKind() == IScannerContext.ContextKind.INCLUSION )
{
TraceUtil.outputTrace(log, "Scanner::ContextStack: ending inclusion ", null, context.getContextName(), null, null); //$NON-NLS-1$
- ((ScannerContextInclusion)context).getExtension().exitScope( requestor );
+ ((ScannerContextInclusion)context).getExtension().exitScope( requestor, null );
lastFileContext--;
}
cs_pop();
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/Scanner.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/Scanner.java
index 3d156d9d1cd..e1688c135eb 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/Scanner.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/Scanner.java
@@ -82,7 +82,7 @@ public final class Scanner implements IScanner, IScannerData {
private static final NullSourceElementRequestor NULL_REQUESTOR = new NullSourceElementRequestor();
private final static String SCRATCH = ""; //$NON-NLS-1$
private final List workingCopies;
- private final ContextStack contextStack;
+ protected final ContextStack contextStack;
private IASTFactory astFactory = null;
private final ISourceElementRequestor requestor;
private final ParserMode parserMode;
@@ -150,7 +150,6 @@ public final class Scanner implements IScanner, IScannerData {
this.scannerExtension = extension;
this.definitions = definitions;
this.includePathNames = includePaths;
- this.astFactory = ParserFactory.createASTFactory( this, parserMode, language );
setupBuiltInMacros();
}
@@ -609,7 +608,7 @@ public final class Scanner implements IScanner, IScannerData {
try
{
inclusion =
- astFactory.createInclusion(
+ getASTFactory().createInclusion(
fileName,
duple.getFilename(),
!useIncludePaths,
@@ -743,9 +742,9 @@ public final class Scanner implements IScanner, IScannerData {
// these are scanner configuration aspects that we perhaps want to tweak
// eventually, these should be configurable by the client, but for now
// we can just leave it internal
- private boolean enableDigraphReplacement = true;
- private boolean enableTrigraphReplacement = true;
- private boolean enableTrigraphReplacementInStrings = true;
+// private boolean enableDigraphReplacement = true;
+// private boolean enableTrigraphReplacement = true;
+// private boolean enableTrigraphReplacementInStrings = true;
private boolean throwExceptionOnBadCharacterRead = false;
private boolean atEOF = false;
@@ -2664,7 +2663,7 @@ public final class Scanner implements IScanner, IScannerData {
IASTInclusion i = null;
try
{
- i = astFactory.createInclusion(
+ i = getASTFactory().createInclusion(
directive.getFilename(),
"", //$NON-NLS-1$
!directive.useIncludePaths(),
@@ -2679,8 +2678,8 @@ public final class Scanner implements IScanner, IScannerData {
}
if( i != null )
{
- i.enterScope( requestor );
- i.exitScope( requestor );
+ i.enterScope( requestor, null );
+ i.exitScope( requestor, null );
}
}
}
@@ -2963,7 +2962,7 @@ public final class Scanner implements IScanner, IScannerData {
try
{
- astFactory.createMacro( key, beginning, beginningLine, offset, offset + key.length(), nameLine, currentContext.getOffset(), contextStack.getCurrentLineNumber(), descriptor ).acceptElement( requestor );
+ getASTFactory().createMacro( key, beginning, beginningLine, offset, offset + key.length(), nameLine, currentContext.getOffset(), contextStack.getCurrentLineNumber(), descriptor ).acceptElement( requestor, null );
}
catch (Exception e)
{
@@ -3418,6 +3417,8 @@ public final class Scanner implements IScanner, IScannerData {
* @see org.eclipse.cdt.internal.core.parser.scanner.IScannerData#getASTFactory()
*/
public IASTFactory getASTFactory() {
+ if( astFactory == null )
+ astFactory = ParserFactory.createASTFactory( this, parserMode, language );
return astFactory;
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/AbstractToken.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/AbstractToken.java
index d93034d38f8..f6eabc184f8 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/AbstractToken.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/AbstractToken.java
@@ -13,8 +13,10 @@ package org.eclipse.cdt.internal.core.parser.token;
import java.util.Iterator;
import java.util.List;
+import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.IToken;
import org.eclipse.cdt.core.parser.ITokenDuple;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
/**
@@ -307,4 +309,18 @@ public abstract class AbstractToken implements IToken, ITokenDuple {
qualifiedName[0] = getImage();
return qualifiedName;
}
+
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ITokenDuple#freeReferences(org.eclipse.cdt.core.parser.ast.IReferenceManager)
+ */
+ public void freeReferences(IReferenceManager manager) {
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ITokenDuple#acceptElement(org.eclipse.cdt.core.parser.ast.IReferenceManager)
+ */
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager) {
+ }
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/BasicTokenDuple.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/BasicTokenDuple.java
index 46efc6d903d..e361b595d0f 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/BasicTokenDuple.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/BasicTokenDuple.java
@@ -15,8 +15,10 @@ import java.util.Iterator;
import java.util.List;
import java.util.NoSuchElementException;
+import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.IToken;
import org.eclipse.cdt.core.parser.ITokenDuple;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
/**
* @author jcamelon
@@ -486,5 +488,17 @@ public class BasicTokenDuple implements ITokenDuple {
return n;
}
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ITokenDuple#freeReferences(org.eclipse.cdt.core.parser.ast.IReferenceManager)
+ */
+ public void freeReferences(IReferenceManager manager) {
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ITokenDuple#acceptElement(org.eclipse.cdt.core.parser.ast.IReferenceManager)
+ */
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager) {
+ }
+
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/TemplateTokenDuple.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/TemplateTokenDuple.java
index 091ee1133c1..9071c3ad7a9 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/TemplateTokenDuple.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/TemplateTokenDuple.java
@@ -14,8 +14,11 @@ import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
+import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.IToken;
import org.eclipse.cdt.core.parser.ITokenDuple;
+import org.eclipse.cdt.core.parser.ast.IASTExpression;
+import org.eclipse.cdt.core.parser.ast.IReferenceManager;
/**
* @author jcamelon
@@ -95,4 +98,38 @@ public class TemplateTokenDuple extends BasicTokenDuple {
public List[] getTemplateIdArgLists() {
return argLists;
}
+
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ITokenDuple#freeReferences(org.eclipse.cdt.core.parser.ast.IReferenceManager)
+ */
+ public void freeReferences(IReferenceManager manager) {
+ if( argLists == null ) return;
+ for( int i = 0; i < argLists.length; ++i )
+ {
+ if( argLists[i] == null ) continue;
+ for( int j = 0; j < argLists[i].size(); ++ j )
+ {
+ IASTExpression e = (IASTExpression) argLists[i].get(j);
+ e.freeReferences(manager);
+ }
+ }
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.parser.ITokenDuple#acceptElement(org.eclipse.cdt.core.parser.ast.IReferenceManager)
+ */
+ public void acceptElement(ISourceElementRequestor requestor, IReferenceManager manager) {
+ if( argLists == null ) return;
+ for( int i = 0; i < argLists.length; ++i )
+ {
+ if( argLists[i] == null ) continue;
+ for( int j = 0; j < argLists[i].size(); ++ j )
+ {
+ IASTExpression e = (IASTExpression) argLists[i].get(j);
+ e.acceptElement(requestor,manager);
+ }
+ }
+ }
}