From 20a1cd8f3581bb010c5fb02e877777705ade2649 Mon Sep 17 00:00:00 2001 From: John Camelon Date: Tue, 1 Jun 2004 21:11:08 +0000 Subject: [PATCH] Pooled class and variable references. Cleaned up ASTFactory construction. --- core/org.eclipse.cdt.core.tests/.cdtproject | 4 + .../tests/CompleteParseASTTemplateTest.java | 26 +- .../parser/tests/CompleteParseASTTest.java | 27 +- .../parser/tests/CompleteParseBaseTest.java | 59 +- .../ISourceElementCallbackDelegate.java | 8 +- .../eclipse/cdt/core/parser/ITokenDuple.java | 5 + .../cdt/core/parser/ast/IASTDesignator.java | 3 +- .../ast/IASTExceptionSpecification.java | 4 +- .../cdt/core/parser/ast/IASTExpression.java | 6 + .../cdt/core/parser/ast/IASTFactory.java | 3 + .../parser/ast/IASTSimpleTypeSpecifier.java | 6 +- .../cdt/core/parser/ast/IASTTypeId.java | 6 +- .../core/parser/ast/IReferenceManager.java | 28 + .../internal/core/parser/CompleteParser.java | 10 + .../core/parser/ExpressionParser.java | 10 + .../cdt/internal/core/parser/Parser.java | 473 +++++----- .../parser/ast/ASTAbstractDeclaration.java | 9 +- .../core/parser/ast/ASTArrayModifier.java | 9 +- .../core/parser/ast/ASTDesignator.java | 9 +- .../core/parser/ast/ASTInclusion.java | 7 +- .../internal/core/parser/ast/ASTMacro.java | 7 +- .../parser/ast/complete/ASTASMDefinition.java | 7 +- .../ASTAbstractTypeSpecifierDeclaration.java | 7 +- .../parser/ast/complete/ASTBaseSpecifier.java | 9 +- .../ast/complete/ASTBinaryExpression.java | 14 +- .../ast/complete/ASTClassReference.java | 78 -- .../ast/complete/ASTClassSpecifier.java | 26 +- .../parser/ast/complete/ASTCodeScope.java | 7 +- .../ast/complete/ASTCompilationUnit.java | 7 +- .../complete/ASTConditionalExpression.java | 14 +- .../ASTConstructorMemberInitializer.java | 11 +- .../complete/ASTElaboratedTypeSpecifier.java | 9 +- .../ast/complete/ASTEmptyExpression.java | 8 + .../ast/complete/ASTEnumerationReference.java | 71 -- .../ast/complete/ASTEnumerationSpecifier.java | 7 +- .../parser/ast/complete/ASTEnumerator.java | 7 +- .../ast/complete/ASTEnumeratorReference.java | 70 -- .../complete/ASTExceptionSpecification.java | 29 +- .../parser/ast/complete/ASTExpression.java | 45 +- .../core/parser/ast/complete/ASTField.java | 9 +- .../ast/complete/ASTFieldReference.java | 71 -- .../core/parser/ast/complete/ASTFunction.java | 28 +- .../ast/complete/ASTFunctionReference.java | 72 -- .../ast/complete/ASTInitializerClause.java | 13 +- .../ast/complete/ASTLinkageSpecification.java | 7 +- .../core/parser/ast/complete/ASTMethod.java | 21 +- .../ast/complete/ASTMethodReference.java | 69 -- .../ast/complete/ASTNamespaceAlias.java | 9 +- .../ast/complete/ASTNamespaceDefinition.java | 7 +- .../ast/complete/ASTNamespaceReference.java | 72 -- .../parser/ast/complete/ASTNewDescriptor.java | 47 +- .../parser/ast/complete/ASTNewExpression.java | 18 +- .../ast/complete/ASTParameterDeclaration.java | 7 +- .../ast/complete/ASTParameterReference.java | 72 -- .../parser/ast/complete/ASTReference.java | 59 -- .../ast/complete/ASTReferenceStore.java | 39 - .../ast/complete/ASTSimpleTypeSpecifier.java | 12 + .../ast/complete/ASTTemplateDeclaration.java | 11 +- .../complete/ASTTemplateInstantiation.java | 7 +- .../ast/complete/ASTTemplateParameter.java | 12 +- .../ASTTemplateParameterReference.java | 61 -- .../core/parser/ast/complete/ASTTypeId.java | 34 +- .../ast/complete/ASTTypeIdExpression.java | 16 +- .../core/parser/ast/complete/ASTTypedef.java | 11 +- .../ast/complete/ASTTypedefReference.java | 69 -- .../ast/complete/ASTUnaryExpression.java | 16 +- .../complete/ASTUnaryTypeIdExpression.java | 14 +- .../ast/complete/ASTUsingDeclaration.java | 9 +- .../ast/complete/ASTUsingDirective.java | 9 +- .../core/parser/ast/complete/ASTVariable.java | 15 +- .../ast/complete/ASTVariableReference.java | 72 -- .../ast/complete/CompleteParseASTFactory.java | 198 ++-- .../parser/ast/complete/ReferenceCache.java | 879 ++++++++++++++++++ .../parser/ast/expression/ASTExpression.java | 13 +- .../expression/ExpressionParseASTFactory.java | 8 + .../core/parser/ast/gcc/ASTGCCDesignator.java | 7 +- .../parser/ast/quick/ASTASMDefinition.java | 7 +- .../ASTAbstractTypeSpecifierDeclaration.java | 7 +- .../parser/ast/quick/ASTBaseSpecifier.java | 7 +- .../parser/ast/quick/ASTClassSpecifier.java | 7 +- .../parser/ast/quick/ASTCompilationUnit.java | 7 +- .../ASTConstructorMemberInitializer.java | 7 +- .../ast/quick/ASTElaboratedTypeSpecifier.java | 7 +- .../ast/quick/ASTEnumerationSpecifier.java | 7 +- .../core/parser/ast/quick/ASTEnumerator.java | 7 +- .../ast/quick/ASTExceptionSpecification.java | 7 +- .../core/parser/ast/quick/ASTField.java | 7 +- .../core/parser/ast/quick/ASTFunction.java | 7 +- .../ast/quick/ASTInitializerClause.java | 7 +- .../ast/quick/ASTLinkageSpecification.java | 7 +- .../core/parser/ast/quick/ASTMethod.java | 7 +- .../parser/ast/quick/ASTNamespaceAlias.java | 7 +- .../ast/quick/ASTNamespaceDefinition.java | 7 +- .../parser/ast/quick/ASTNewDescriptor.java | 23 +- .../ast/quick/ASTSimpleTypeSpecifier.java | 8 + .../ast/quick/ASTTemplateDeclaration.java | 7 +- .../ast/quick/ASTTemplateInstantiation.java | 7 +- .../ast/quick/ASTTemplateParameter.java | 7 +- .../ast/quick/ASTTemplateSpecialization.java | 7 +- .../core/parser/ast/quick/ASTTypeId.java | 13 +- .../ast/quick/ASTTypedefDeclaration.java | 7 +- .../parser/ast/quick/ASTUsingDeclaration.java | 7 +- .../parser/ast/quick/ASTUsingDirective.java | 7 +- .../core/parser/ast/quick/ASTVariable.java | 7 +- .../ast/quick/QuickParseASTFactory.java | 10 + .../core/parser/scanner/ContextStack.java | 4 +- .../internal/core/parser/scanner/Scanner.java | 21 +- .../core/parser/token/AbstractToken.java | 16 + .../core/parser/token/BasicTokenDuple.java | 14 + .../core/parser/token/TemplateTokenDuple.java | 37 + 110 files changed, 2048 insertions(+), 1511 deletions(-) create mode 100644 core/org.eclipse.cdt.core.tests/.cdtproject create mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IReferenceManager.java delete mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTClassReference.java delete mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTEnumerationReference.java delete mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTEnumeratorReference.java delete mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTFieldReference.java delete mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTFunctionReference.java delete mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTMethodReference.java delete mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNamespaceReference.java delete mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTParameterReference.java delete mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTReference.java delete mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTReferenceStore.java delete mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTemplateParameterReference.java delete mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTypedefReference.java delete mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTVariableReference.java create mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ReferenceCache.java 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); + } + } + } }