1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-23 17:05:26 +02:00

Pooled class and variable references.

Cleaned up ASTFactory construction.
This commit is contained in:
John Camelon 2004-06-01 21:11:08 +00:00
parent 8ef916c2ff
commit 20a1cd8f35
110 changed files with 2048 additions and 1511 deletions

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse-cdt version="2.0"?>
<cdtproject/>

View file

@ -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 T, class U> 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 T, class U> 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();

View file

@ -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

View file

@ -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$
}

View file

@ -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 );
}

View file

@ -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 );
}

View file

@ -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
{

View file

@ -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();
}

View file

@ -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);
}

View file

@ -272,5 +272,8 @@ public interface IASTFactory
public boolean validateDirectMemberOperation(IASTNode node);
public void constructExpressions( boolean flag );
public IReferenceManager getReferenceManager();
}

View file

@ -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);
}

View file

@ -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);
}

View file

@ -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);
}

View file

@ -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;
}
}

View file

@ -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;
}
}

View file

@ -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;

View file

@ -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)
{
}
}

View file

@ -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)
{
}
}

View file

@ -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)

View file

@ -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
{

View file

@ -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)
{
}

View file

@ -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)
{
}

View file

@ -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)
{
}

View file

@ -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)
{
}
}

View file

@ -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);
}
}

View file

@ -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 );
}
}

View file

@ -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()

View file

@ -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 );

View file

@ -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
{

View file

@ -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);
}
}

View file

@ -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)
{
}
/**

View file

@ -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)

View file

@ -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) {
}
}

View file

@ -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)
{
}
}

View file

@ -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)

View file

@ -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)

View file

@ -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)
{
}
}

View file

@ -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)
{
}
}

View file

@ -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));
}
}

View file

@ -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);
}
}

View file

@ -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)
{
}
}

View file

@ -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
{

View file

@ -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)
{
}
}

View file

@ -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)
{
}

View file

@ -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
{

View file

@ -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
{

View file

@ -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)
{
}
}

View file

@ -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)
{
}

View file

@ -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
{

View file

@ -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)
{
}
}

View file

@ -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);
}
}

View file

@ -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 );
}
}

View file

@ -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)
{
}

View file

@ -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)
{
}
}

View file

@ -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;
}
}

View file

@ -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();
}
}

View file

@ -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));
}
}

View file

@ -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
{

View file

@ -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
{

View file

@ -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
}

View file

@ -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) {
}
}

View file

@ -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));
}
}

View file

@ -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);
}
}

View file

@ -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)
{
}

View file

@ -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)
{
}
}

View file

@ -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);
}
}

View file

@ -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 );
}
}

View file

@ -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)

View file

@ -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)
{
}

View file

@ -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)

View file

@ -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)
{
}
}

View file

@ -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();
}
}

View file

@ -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;
}
}

View file

@ -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) {
}
}

View file

@ -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;
}
}

View file

@ -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);
}
}

View file

@ -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)
{
}

View file

@ -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)
{
}

View file

@ -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)
{
}

View file

@ -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
{

View file

@ -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
{

View file

@ -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)
{
}
}

View file

@ -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)

View file

@ -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)
{
}

View file

@ -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)
{
}

View file

@ -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)
{
}
}

View file

@ -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 )
{
}

View file

@ -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
{

View file

@ -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)
{
}

View file

@ -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
{

View file

@ -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
{

View file

@ -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)
{
}

View file

@ -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
{

View file

@ -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) {
}
}

View file

@ -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
}
}

View file

@ -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
{

View file

@ -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
{

View file

@ -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)

View file

@ -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
{

View file

@ -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
}
}

Some files were not shown because too many files have changed in this diff Show more