1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-04 14:55:41 +02:00
Added COMPLETE_PARSE support for Method and Field declarations and cross-references. 
	Fixed some small ParserSymbolTable bugs.
	Added support for linkage specification under COMPLETE_PARSE.

TESTS
	Updated CompleteParseASTTests for Method/Field updates.
	Fixed TortureTest's parser mode switch (was always QuickParsing).
This commit is contained in:
John Camelon 2003-07-25 00:35:42 +00:00
parent a446c41e78
commit 4824b20cdc
19 changed files with 606 additions and 465 deletions

View file

@ -1,3 +1,7 @@
2003-07-24 John Camelon
Updated CompleteParseASTTests for Method/Field updates.
Fixed TortureTest's parser mode switch (was always QuickParsing).
2003-07-24 Hoda Amer 2003-07-24 Hoda Amer
Moved part of the CModelElementsTest (Templates of Variables ) to the failed tests. Moved part of the CModelElementsTest (Templates of Variables ) to the failed tests.
Moved the same test (Templates of Variables) from ITemplateTests to failed tests. Moved the same test (Templates of Variables) from ITemplateTests to failed tests.

View file

@ -48,6 +48,7 @@ import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition;
import org.eclipse.cdt.core.parser.ast.IASTNamespaceReference; import org.eclipse.cdt.core.parser.ast.IASTNamespaceReference;
import org.eclipse.cdt.core.parser.ast.IASTPointerToFunction; import org.eclipse.cdt.core.parser.ast.IASTPointerToFunction;
import org.eclipse.cdt.core.parser.ast.IASTPointerToMethod; import org.eclipse.cdt.core.parser.ast.IASTPointerToMethod;
import org.eclipse.cdt.core.parser.ast.IASTReference;
import org.eclipse.cdt.core.parser.ast.IASTScope; import org.eclipse.cdt.core.parser.ast.IASTScope;
import org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier; import org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier;
import org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration; import org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration;
@ -705,6 +706,65 @@ public class CompleteParseASTTest extends TestCase
assertEquals( ((IASTSimpleTypeSpecifier)varE.getAbstractDeclaration().getTypeSpecifier()).getTypeSpecifier(), enumE ); assertEquals( ((IASTSimpleTypeSpecifier)varE.getAbstractDeclaration().getTypeSpecifier()).getTypeSpecifier(), enumE );
} }
public void testSimpleFunction() throws Exception
{
Iterator declarations = parse( "void foo( void );").getDeclarations();
IASTFunction function = (IASTFunction)declarations.next();
assertEquals( function.getName(), "foo" );
assertEquals( callback.getReferences().size(), 0 );
}
public void testSimpleFunctionWithTypes() throws Exception
{
Iterator declarations = parse( "class A { public: \n class B { }; }; const A::B & foo( A * myParam );").getDeclarations();
IASTClassSpecifier classA = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)declarations.next()).getTypeSpecifier();
IASTFunction function = (IASTFunction)declarations.next();
assertEquals( callback.getReferences().size(), 3 );
}
public void testSimpleMethod() throws Exception
{
Iterator declarations = parse( "class A { void foo(); };").getDeclarations();
IASTClassSpecifier classA = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)declarations.next()).getTypeSpecifier();
IASTMethod method = (IASTMethod)getDeclarations( classA ).next();
assertEquals( method.getName(), "foo" );
}
public void testSimpleMethodWithTypes() throws Exception
{
Iterator declarations = parse( "class U { }; class A { U foo( U areDumb ); };").getDeclarations();
IASTClassSpecifier classU = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)declarations.next()).getTypeSpecifier();
IASTClassSpecifier classA = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)declarations.next()).getTypeSpecifier();
IASTMethod method = (IASTMethod)getDeclarations( classA ).next();
assertEquals( method.getName(), "foo" );
assertEquals( callback.getReferences().size(), 2 );
}
public void testUsingDeclarationWithFunctionsAndMethods() throws Exception
{
Iterator declarations = parse( "namespace N { int foo(void); } class A { static int bar(void); }; using N::foo; using ::A::bar;" ).getDeclarations();
IASTNamespaceDefinition namespaceN = (IASTNamespaceDefinition)declarations.next();
IASTFunction fooFunction = (IASTFunction)(getDeclarations(namespaceN).next());
IASTClassSpecifier classA = (IASTClassSpecifier)((IASTAbstractTypeSpecifierDeclaration)declarations.next()).getTypeSpecifier();
IASTMethod methodM = (IASTMethod)(getDeclarations(classA).next());
IASTUsingDeclaration using1 = (IASTUsingDeclaration)declarations.next();
IASTUsingDeclaration using2 = (IASTUsingDeclaration)declarations.next();
assertEquals( callback.getReferences().size(), 4 );
Iterator references = callback.getReferences().iterator();
assertEquals( ((IASTReference)references.next()).getReferencedElement(), namespaceN );
assertEquals( ((IASTReference)references.next()).getReferencedElement(), fooFunction );
assertEquals( ((IASTReference)references.next()).getReferencedElement(), classA );
assertEquals( ((IASTReference)references.next()).getReferencedElement(), methodM );
}
public void testLinkageSpec() throws Exception
{
IASTLinkageSpecification linkage = (IASTLinkageSpecification)parse( "extern \"C\" { int foo(); }").getDeclarations().next();
Iterator i = getDeclarations( linkage );
IASTFunction f = (IASTFunction)i.next();
assertEquals( f.getName(),"foo");
}
protected void assertQualifiedName(String [] fromAST, String [] theTruth) protected void assertQualifiedName(String [] fromAST, String [] theTruth)
{ {
assertNotNull( fromAST ); assertNotNull( fromAST );
@ -715,4 +775,6 @@ public class CompleteParseASTTest extends TestCase
assertEquals( fromAST[i], theTruth[i]); assertEquals( fromAST[i], theTruth[i]);
} }
} }
} }

View file

@ -18,7 +18,6 @@ import java.util.Map;
import junit.framework.TestCase; import junit.framework.TestCase;
import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility; import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility;
import org.eclipse.cdt.internal.core.parser.ast.complete.ASTSymbol;
import org.eclipse.cdt.internal.core.parser.pst.IContainerSymbol; import org.eclipse.cdt.internal.core.parser.pst.IContainerSymbol;
import org.eclipse.cdt.internal.core.parser.pst.IDerivableContainerSymbol; import org.eclipse.cdt.internal.core.parser.pst.IDerivableContainerSymbol;
import org.eclipse.cdt.internal.core.parser.pst.IParameterizedSymbol; import org.eclipse.cdt.internal.core.parser.pst.IParameterizedSymbol;
@ -26,6 +25,7 @@ import org.eclipse.cdt.internal.core.parser.pst.ISymbol;
import org.eclipse.cdt.internal.core.parser.pst.ISymbolASTExtension; import org.eclipse.cdt.internal.core.parser.pst.ISymbolASTExtension;
import org.eclipse.cdt.internal.core.parser.pst.ParserSymbolTable; import org.eclipse.cdt.internal.core.parser.pst.ParserSymbolTable;
import org.eclipse.cdt.internal.core.parser.pst.ParserSymbolTableException; import org.eclipse.cdt.internal.core.parser.pst.ParserSymbolTableException;
import org.eclipse.cdt.internal.core.parser.pst.StandardSymbolExtension;
import org.eclipse.cdt.internal.core.parser.pst.TypeInfo; import org.eclipse.cdt.internal.core.parser.pst.TypeInfo;
import org.eclipse.cdt.internal.core.parser.pst.ParserSymbolTable.Mark; import org.eclipse.cdt.internal.core.parser.pst.ParserSymbolTable.Mark;
import org.eclipse.cdt.internal.core.parser.pst.ParserSymbolTable.TemplateInstance; import org.eclipse.cdt.internal.core.parser.pst.ParserSymbolTable.TemplateInstance;
@ -102,52 +102,12 @@ public class ParserSymbolTableTest extends TestCase {
assertEquals( look, null ); assertEquals( look, null );
} }
protected class NullSymbolExtension implements ISymbolASTExtension
{
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.pst.ISymbolASTExtension#getPrimaryDeclaration()
*/
public ASTSymbol getPrimaryDeclaration()
{
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.pst.ISymbolASTExtension#getAllDefinitions()
*/
public Iterator getAllDefinitions()
{
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.pst.ISymbolASTExtension#addDefinition(org.eclipse.cdt.internal.core.parser.ast.complete.ASTSymbol)
*/
public void addDefinition(ASTSymbol definition) throws ExtensionException
{
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.pst.ISymbolOwner#getSymbol()
*/
public ISymbol getSymbol()
{
// TODO Auto-generated method stub
return null;
}
}
public void testSimpleSetGetObject() throws Exception{ public void testSimpleSetGetObject() throws Exception{
newTable(); newTable();
IContainerSymbol x = table.new Declaration("x"); IContainerSymbol x = table.new Declaration("x");
ISymbolASTExtension extension = new NullSymbolExtension (); ISymbolASTExtension extension = new StandardSymbolExtension(x,null);
x.setASTExtension( extension ); x.setASTExtension( extension );

View file

@ -277,9 +277,10 @@ public class TortureTest extends FractionalAutomatedTest {
public void run(){ public void run(){
try { try {
DOMBuilder domBuilder = new DOMBuilder(); DOMBuilder domBuilder = new DOMBuilder();
ParserMode parserMode = quickParse ? ParserMode.QUICK_PARSE : ParserMode.COMPLETE_PARSE;
parser = ParserFactory.createParser( parser = ParserFactory.createParser(
ParserFactory.createScanner( new StringReader( code ), null, new ScannerInfo(), ParserMode.QUICK_PARSE, nullCallback ), nullCallback, ParserMode.QUICK_PARSE); ParserFactory.createScanner( new StringReader( code ), null, new ScannerInfo(), parserMode, nullCallback ), nullCallback, parserMode);
parser.setCppNature(cppNature); parser.setCppNature(cppNature);
mapping = ParserFactory.createLineOffsetReconciler( new StringReader( code ) ); mapping = ParserFactory.createLineOffsetReconciler( new StringReader( code ) );

View file

@ -1,3 +1,8 @@
2003-07-24 John Camelon
Added COMPLETE_PARSE support for Method and Field declarations and cross-references.
Fixed some small ParserSymbolTable bugs.
Added support for linkage specification under COMPLETE_PARSE.
2003-07-24 John Camelon 2003-07-24 John Camelon
Added CompleteParse - UsingDirective & UsingDeclarations w/namespace/class/field variable references. Added CompleteParse - UsingDirective & UsingDeclarations w/namespace/class/field variable references.
Added CompleteParse support for enumeration specifiers and references in variables & fields. Added CompleteParse support for enumeration specifiers and references in variables & fields.

View file

@ -134,7 +134,7 @@ public interface IASTFactory
boolean isStatic, boolean isStatic,
int startOffset, int startOffset,
int nameOffset, int nameOffset,
IASTTemplate ownerTemplate); IASTTemplate ownerTemplate) throws ASTSemanticException;
public IASTAbstractDeclaration createAbstractDeclaration( public IASTAbstractDeclaration createAbstractDeclaration(
boolean isConst, boolean isConst,
IASTTypeSpecifier typeSpecifier, IASTTypeSpecifier typeSpecifier,
@ -159,7 +159,7 @@ public interface IASTFactory
boolean isVirtual, boolean isVirtual,
boolean isExplicit, boolean isExplicit,
boolean isPureVirtual, boolean isPureVirtual,
ASTAccessVisibility visibility); ASTAccessVisibility visibility) throws ASTSemanticException;
public IASTVariable createVariable(IASTScope scope, String name, boolean isAuto, IASTInitializerClause initializerClause, IASTExpression bitfieldExpression, public IASTVariable createVariable(IASTScope scope, String name, boolean isAuto, IASTInitializerClause initializerClause, IASTExpression bitfieldExpression,
IASTAbstractDeclaration abstractDeclaration, boolean isMutable, boolean isExtern, boolean isRegister, boolean isStatic, int startingOffset, int nameOffset ) throws ASTSemanticException; IASTAbstractDeclaration abstractDeclaration, boolean isMutable, boolean isExtern, boolean isRegister, boolean isStatic, int startingOffset, int nameOffset ) throws ASTSemanticException;

View file

@ -363,7 +363,7 @@ public class DeclarationWrapper implements IDeclaratorOwner
* @param declarator * @param declarator
* @return * @return
*/ */
private IASTMethod createMethodASTNode(Declarator declarator) private IASTMethod createMethodASTNode(Declarator declarator) throws ASTSemanticException
{ {
return astFactory return astFactory
.createMethod( .createMethod(
@ -396,7 +396,7 @@ public class DeclarationWrapper implements IDeclaratorOwner
* @param declarator * @param declarator
* @return * @return
*/ */
private IASTFunction createFunctionASTNode(Declarator declarator) private IASTFunction createFunctionASTNode(Declarator declarator) throws ASTSemanticException
{ {
return astFactory.createFunction( return astFactory.createFunction(
scope, scope,

View file

@ -897,7 +897,7 @@ public class Parser implements IParser
} }
protected void handleFunctionBody(Declarator d) throws Backtrack, EndOfFile protected void handleFunctionBody(Declarator d) throws Backtrack, EndOfFile
{ {
if (mode == ParserMode.QUICK_PARSE) if ( true ) // TODO - Enable parsing within function bodies i.e. mode == ParserMode.QUICK_PARSE)
{ {
// speed up the parser by skiping the body // speed up the parser by skiping the body
// simply look for matching brace and return // simply look for matching brace and return

View file

@ -8,7 +8,7 @@
* Contributors: * Contributors:
* IBM Rational Software - Initial API and implementation * IBM Rational Software - Initial API and implementation
***********************************************************************/ ***********************************************************************/
package org.eclipse.cdt.internal.core.parser.ast.quick; package org.eclipse.cdt.internal.core.parser.ast;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;

View file

@ -10,8 +10,14 @@
***********************************************************************/ ***********************************************************************/
package org.eclipse.cdt.internal.core.parser.ast; package org.eclipse.cdt.internal.core.parser.ast;
import java.util.List;
import org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTInclusion; import org.eclipse.cdt.core.parser.ast.IASTInclusion;
import org.eclipse.cdt.core.parser.ast.IASTInitializerClause;
import org.eclipse.cdt.core.parser.ast.IASTMacro; import org.eclipse.cdt.core.parser.ast.IASTMacro;
import org.eclipse.cdt.core.parser.ast.IASTParameterDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier;
/** /**
@ -42,5 +48,15 @@ public class BaseASTFactory {
return inclusion; return inclusion;
} }
public IASTAbstractDeclaration createAbstractDeclaration(boolean isConst, IASTTypeSpecifier typeSpecifier, List pointerOperators, List arrayModifiers)
{
return new ASTAbstractDeclaration( isConst, typeSpecifier, pointerOperators, arrayModifiers );
}
public IASTParameterDeclaration createParameterDeclaration(boolean isConst, IASTTypeSpecifier typeSpecifier, List pointerOperators, List arrayModifiers, String parameterName, IASTInitializerClause initializerClause)
{
return new ASTParameterDeclaration( isConst, typeSpecifier, pointerOperators, arrayModifiers, parameterName, initializerClause );
}
} }

View file

@ -11,196 +11,200 @@
package org.eclipse.cdt.internal.core.parser.ast.complete; package org.eclipse.cdt.internal.core.parser.ast.complete;
import java.util.Iterator; import java.util.Iterator;
import java.util.List;
import org.eclipse.cdt.core.parser.ISourceElementRequestor; import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException;
import org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration; import org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTExceptionSpecification; import org.eclipse.cdt.core.parser.ast.IASTExceptionSpecification;
import org.eclipse.cdt.core.parser.ast.IASTFunction; import org.eclipse.cdt.core.parser.ast.IASTFunction;
import org.eclipse.cdt.core.parser.ast.IASTScope;
import org.eclipse.cdt.core.parser.ast.IASTTemplate; import org.eclipse.cdt.core.parser.ast.IASTTemplate;
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;
import org.eclipse.cdt.internal.core.parser.pst.TypeInfo;
/** /**
* @author jcamelon * @author jcamelon
* *
*/ */
public class ASTFunction implements IASTFunction public class ASTFunction extends ASTScope implements IASTFunction
{ {
private boolean hasFunctionBody = false;
private final IASTTemplate ownerTemplate;
private final IASTAbstractDeclaration returnType;
private final IASTExceptionSpecification exception;
private NamedOffsets offsets = new NamedOffsets();
private final ASTQualifiedNamedElement qualifiedName;
private final List parameters;
protected final ASTReferenceStore references;
/** /**
* * @param symbol
* @param parameters
* @param returnType
* @param exception
* @param startOffset
* @param nameOffset
* @param ownerTemplate
* @param references
*/ */
public ASTFunction() public ASTFunction(IParameterizedSymbol symbol, List parameters, IASTAbstractDeclaration returnType, IASTExceptionSpecification exception, int startOffset, int nameOffset, IASTTemplate ownerTemplate, List references)
{ {
super(); super( symbol );
// TODO Auto-generated constructor stub this.parameters = parameters;
this.returnType = returnType;
this.exception = exception;
setStartingOffset(startOffset);
setNameOffset(nameOffset);
this.ownerTemplate = ownerTemplate;
this.references = new ASTReferenceStore( references );
qualifiedName = new ASTQualifiedNamedElement( getOwnerScope(), symbol.getName() );
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFunction#isInline() * @see org.eclipse.cdt.core.parser.ast.IASTFunction#isInline()
*/ */
public boolean isInline() public boolean isInline()
{ {
// TODO Auto-generated method stub return symbol.getTypeInfo().checkBit( TypeInfo.isInline );
return false;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFunction#isFriend() * @see org.eclipse.cdt.core.parser.ast.IASTFunction#isFriend()
*/ */
public boolean isFriend() public boolean isFriend()
{ {
// TODO Auto-generated method stub return symbol.getTypeInfo().checkBit( TypeInfo.isFriend );
return false;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFunction#isStatic() * @see org.eclipse.cdt.core.parser.ast.IASTFunction#isStatic()
*/ */
public boolean isStatic() public boolean isStatic()
{ {
// TODO Auto-generated method stub return symbol.getTypeInfo().checkBit( TypeInfo.isStatic );
return false;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#getName() * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#getName()
*/ */
public String getName() public String getName()
{ {
// TODO Auto-generated method stub return symbol.getName();
return null;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFunction#getReturnType() * @see org.eclipse.cdt.core.parser.ast.IASTFunction#getReturnType()
*/ */
public IASTAbstractDeclaration getReturnType() public IASTAbstractDeclaration getReturnType()
{ {
// TODO Auto-generated method stub return returnType;
return null;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFunction#getParameters() * @see org.eclipse.cdt.core.parser.ast.IASTFunction#getParameters()
*/ */
public Iterator getParameters() public Iterator getParameters()
{ {
// TODO Auto-generated method stub return parameters.iterator();
return null;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFunction#getExceptionSpec() * @see org.eclipse.cdt.core.parser.ast.IASTFunction#getExceptionSpec()
*/ */
public IASTExceptionSpecification getExceptionSpec() public IASTExceptionSpecification getExceptionSpec()
{ {
// TODO Auto-generated method stub return exception;
return null;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFunction#setHasFunctionBody(boolean) * @see org.eclipse.cdt.core.parser.ast.IASTFunction#setHasFunctionBody(boolean)
*/ */
public void setHasFunctionBody(boolean b) public void setHasFunctionBody(boolean b)
{ {
// TODO Auto-generated method stub hasFunctionBody = true;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFunction#hasFunctionBody() * @see org.eclipse.cdt.core.parser.ast.IASTFunction#hasFunctionBody()
*/ */
public boolean hasFunctionBody() public boolean hasFunctionBody()
{ {
// TODO Auto-generated method stub return hasFunctionBody;
return false;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTScope#getDeclarations()
*/
public Iterator getDeclarations() throws ASTNotImplementedException
{
// TODO Auto-generated method stub
return null;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#getNameOffset() * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#getNameOffset()
*/ */
public int getNameOffset() public int getNameOffset()
{ {
// TODO Auto-generated method stub return offsets.getNameOffset();
return 0;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#setNameOffset(int) * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#setNameOffset(int)
*/ */
public void setNameOffset(int o) public void setNameOffset(int o)
{ {
// TODO Auto-generated method stub offsets.setNameOffset(o);
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTTemplatedDeclaration#getOwnerTemplateDeclaration() * @see org.eclipse.cdt.core.parser.ast.IASTTemplatedDeclaration#getOwnerTemplateDeclaration()
*/ */
public IASTTemplate getOwnerTemplateDeclaration() public IASTTemplate getOwnerTemplateDeclaration()
{ {
// TODO Auto-generated method stub return ownerTemplate;
return null;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTQualifiedNameElement#getFullyQualifiedName() * @see org.eclipse.cdt.core.parser.ast.IASTQualifiedNameElement#getFullyQualifiedName()
*/ */
public String[] getFullyQualifiedName() public String[] getFullyQualifiedName()
{ {
// TODO Auto-generated method stub return qualifiedName.getFullyQualifiedName();
return null;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#setStartingOffset(int) * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#setStartingOffset(int)
*/ */
public void setStartingOffset(int o) public void setStartingOffset(int o)
{ {
// TODO Auto-generated method stub offsets.setStartingOffset(o);
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#setEndingOffset(int) * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#setEndingOffset(int)
*/ */
public void setEndingOffset(int o) public void setEndingOffset(int o)
{ {
// TODO Auto-generated method stub offsets.setEndingOffset(o);
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getStartingOffset() * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getStartingOffset()
*/ */
public int getStartingOffset() public int getStartingOffset()
{ {
// TODO Auto-generated method stub return offsets.getStartingOffset();
return 0;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getEndingOffset() * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getEndingOffset()
*/ */
public int getEndingOffset() public int getEndingOffset()
{ {
// TODO Auto-generated method stub return offsets.getEndingOffset();
return 0;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTScopedElement#getOwnerScope()
*/
public IASTScope getOwnerScope()
{
// TODO Auto-generated method stub
return null;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor) * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/ */
public void acceptElement(ISourceElementRequestor requestor) public void acceptElement(ISourceElementRequestor requestor)
{ {
// TODO Auto-generated method stub requestor.acceptFunctionDeclaration(this);
references.processReferences(requestor);
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor) * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/ */
public void enterScope(ISourceElementRequestor requestor) public void enterScope(ISourceElementRequestor requestor)
{ {
// TODO Auto-generated method stub requestor.enterFunctionBody( this );
references.processReferences(requestor);
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor) * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/ */
public void exitScope(ISourceElementRequestor requestor) public void exitScope(ISourceElementRequestor requestor)
{ {
// TODO Auto-generated method stub requestor.exitFunctionBody( this );
} }
} }

View file

@ -0,0 +1,65 @@
/**********************************************************************
* 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)
{
requestor.acceptFunctionReference( this );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
public void enterScope(ISourceElementRequestor requestor)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
public void exitScope(ISourceElementRequestor requestor)
{
}
}

View file

@ -15,95 +15,87 @@ import java.util.Iterator;
import org.eclipse.cdt.core.parser.ISourceElementRequestor; import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException; import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException;
import org.eclipse.cdt.core.parser.ast.IASTLinkageSpecification; import org.eclipse.cdt.core.parser.ast.IASTLinkageSpecification;
import org.eclipse.cdt.core.parser.ast.IASTScope; import org.eclipse.cdt.internal.core.parser.ast.Offsets;
import org.eclipse.cdt.internal.core.parser.pst.IContainerSymbol;
/** /**
* @author jcamelon * @author jcamelon
* *
*/ */
public class ASTLinkageSpecification implements IASTLinkageSpecification public class ASTLinkageSpecification extends ASTAnonymousDeclaration implements IASTLinkageSpecification
{ {
private final String linkageString;
private Offsets offsets = new Offsets();
/** /**
* *
*/ */
public ASTLinkageSpecification() public ASTLinkageSpecification( IContainerSymbol scope, String linkageString, int startingOffset )
{ {
super(); super( scope );
// TODO Auto-generated constructor stub this.linkageString = linkageString;
setStartingOffset(startingOffset);
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTLinkageSpecification#getLinkageString() * @see org.eclipse.cdt.core.parser.ast.IASTLinkageSpecification#getLinkageString()
*/ */
public String getLinkageString() public String getLinkageString()
{ {
// TODO Auto-generated method stub return linkageString;
return null;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTScope#getDeclarations() * @see org.eclipse.cdt.core.parser.ast.IASTScope#getDeclarations()
*/ */
public Iterator getDeclarations() throws ASTNotImplementedException public Iterator getDeclarations() throws ASTNotImplementedException
{ {
// TODO Auto-generated method stub throw new ASTNotImplementedException();
return null;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#setStartingOffset(int) * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#setStartingOffset(int)
*/ */
public void setStartingOffset(int o) public void setStartingOffset(int o)
{ {
// TODO Auto-generated method stub offsets.setStartingOffset(o);
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#setEndingOffset(int) * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#setEndingOffset(int)
*/ */
public void setEndingOffset(int o) public void setEndingOffset(int o)
{ {
// TODO Auto-generated method stub offsets.setEndingOffset(o);
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getStartingOffset() * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getStartingOffset()
*/ */
public int getStartingOffset() public int getStartingOffset()
{ {
// TODO Auto-generated method stub return offsets.getStartingOffset();
return 0;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getEndingOffset() * @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getEndingOffset()
*/ */
public int getEndingOffset() public int getEndingOffset()
{ {
// TODO Auto-generated method stub return offsets.getEndingOffset();
return 0;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTScopedElement#getOwnerScope()
*/
public IASTScope getOwnerScope()
{
// TODO Auto-generated method stub
return null;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor) * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/ */
public void acceptElement(ISourceElementRequestor requestor) public void acceptElement(ISourceElementRequestor requestor)
{ {
// TODO Auto-generated method stub
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor) * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/ */
public void enterScope(ISourceElementRequestor requestor) public void enterScope(ISourceElementRequestor requestor)
{ {
// TODO Auto-generated method stub requestor.enterLinkageSpecification(this);
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor) * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/ */
public void exitScope(ISourceElementRequestor requestor) public void exitScope(ISourceElementRequestor requestor)
{ {
// TODO Auto-generated method stub requestor.exitLinkageSpecification(this);
} }
} }

View file

@ -10,262 +10,133 @@
***********************************************************************/ ***********************************************************************/
package org.eclipse.cdt.internal.core.parser.ast.complete; 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.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility; import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility;
import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException;
import org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration; import org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTExceptionSpecification; import org.eclipse.cdt.core.parser.ast.IASTExceptionSpecification;
import org.eclipse.cdt.core.parser.ast.IASTMethod; import org.eclipse.cdt.core.parser.ast.IASTMethod;
import org.eclipse.cdt.core.parser.ast.IASTScope;
import org.eclipse.cdt.core.parser.ast.IASTTemplate; import org.eclipse.cdt.core.parser.ast.IASTTemplate;
import org.eclipse.cdt.internal.core.parser.pst.IParameterizedSymbol;
import org.eclipse.cdt.internal.core.parser.pst.TypeInfo;
/** /**
* @author jcamelon * @author jcamelon
* *
*/ */
public class ASTMethod implements IASTMethod public class ASTMethod extends ASTFunction implements IASTMethod
{ {
private final boolean isConstructor;
private final boolean isPureVirtual;
private final ASTAccessVisibility visibility;
private final boolean isDestructor;
/** /**
* * @param symbol
* @param parameters
* @param returnType
* @param exception
* @param startOffset
* @param nameOffset
* @param ownerTemplate
* @param references
*/ */
public ASTMethod() public ASTMethod(IParameterizedSymbol symbol, List parameters, IASTAbstractDeclaration returnType, IASTExceptionSpecification exception, int startOffset, int nameOffset, IASTTemplate ownerTemplate, List references,
boolean isConstructor, boolean isDestructor, boolean isPureVirtual, ASTAccessVisibility visibility )
{ {
super(); super(
// TODO Auto-generated constructor stub symbol,
parameters,
returnType,
exception,
startOffset,
nameOffset,
ownerTemplate,
references);
this.visibility = visibility;
this.isConstructor = isConstructor;
this.isDestructor = isDestructor;
this.isPureVirtual = isPureVirtual;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTMethod#isVirtual() * @see org.eclipse.cdt.core.parser.ast.IASTMethod#isVirtual()
*/ */
public boolean isVirtual() public boolean isVirtual()
{ {
// TODO Auto-generated method stub return symbol.getTypeInfo().checkBit( TypeInfo.isVirtual );
return false;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTMethod#isExplicit() * @see org.eclipse.cdt.core.parser.ast.IASTMethod#isExplicit()
*/ */
public boolean isExplicit() public boolean isExplicit()
{ {
// TODO Auto-generated method stub return symbol.getTypeInfo().checkBit( TypeInfo.isExplicit);
return false;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTMethod#isConstructor() * @see org.eclipse.cdt.core.parser.ast.IASTMethod#isConstructor()
*/ */
public boolean isConstructor() public boolean isConstructor()
{ {
// TODO Auto-generated method stub return isConstructor;
return false;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTMethod#isDestructor() * @see org.eclipse.cdt.core.parser.ast.IASTMethod#isDestructor()
*/ */
public boolean isDestructor() public boolean isDestructor()
{ {
// TODO Auto-generated method stub return isDestructor;
return false;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTMethod#isConst() * @see org.eclipse.cdt.core.parser.ast.IASTMethod#isConst()
*/ */
public boolean isConst() public boolean isConst()
{ {
// TODO Auto-generated method stub return symbol.getTypeInfo().checkBit( TypeInfo.isConst);
return false;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTMethod#isVolatile() * @see org.eclipse.cdt.core.parser.ast.IASTMethod#isVolatile()
*/ */
public boolean isVolatile() public boolean isVolatile()
{ {
// TODO Auto-generated method stub return symbol.getTypeInfo().checkBit( TypeInfo.isVolatile );
return false;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTMethod#isPureVirtual() * @see org.eclipse.cdt.core.parser.ast.IASTMethod#isPureVirtual()
*/ */
public boolean isPureVirtual() public boolean isPureVirtual()
{ {
// TODO Auto-generated method stub return isPureVirtual;
return false;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFunction#isInline()
*/
public boolean isInline()
{
// TODO Auto-generated method stub
return false;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFunction#isFriend()
*/
public boolean isFriend()
{
// TODO Auto-generated method stub
return false;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFunction#isStatic()
*/
public boolean isStatic()
{
// TODO Auto-generated method stub
return false;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#getName()
*/
public String getName()
{
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFunction#getReturnType()
*/
public IASTAbstractDeclaration getReturnType()
{
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFunction#getParameters()
*/
public Iterator getParameters()
{
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFunction#getExceptionSpec()
*/
public IASTExceptionSpecification getExceptionSpec()
{
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFunction#setHasFunctionBody(boolean)
*/
public void setHasFunctionBody(boolean b)
{
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFunction#hasFunctionBody()
*/
public boolean hasFunctionBody()
{
// TODO Auto-generated method stub
return false;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTMember#getVisiblity() * @see org.eclipse.cdt.core.parser.ast.IASTMember#getVisiblity()
*/ */
public ASTAccessVisibility getVisiblity() public ASTAccessVisibility getVisiblity()
{ {
// TODO Auto-generated method stub return visibility;
return null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTScope#getDeclarations()
*/
public Iterator getDeclarations() throws ASTNotImplementedException
{
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#getNameOffset()
*/
public int getNameOffset()
{
// TODO Auto-generated method stub
return 0;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement#setNameOffset(int)
*/
public void setNameOffset(int o)
{
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTTemplatedDeclaration#getOwnerTemplateDeclaration()
*/
public IASTTemplate getOwnerTemplateDeclaration()
{
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTQualifiedNameElement#getFullyQualifiedName()
*/
public String[] getFullyQualifiedName()
{
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#setStartingOffset(int)
*/
public void setStartingOffset(int o)
{
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#setEndingOffset(int)
*/
public void setEndingOffset(int o)
{
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getStartingOffset()
*/
public int getStartingOffset()
{
// TODO Auto-generated method stub
return 0;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTOffsetableElement#getEndingOffset()
*/
public int getEndingOffset()
{
// TODO Auto-generated method stub
return 0;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTScopedElement#getOwnerScope()
*/
public IASTScope getOwnerScope()
{
// TODO Auto-generated method stub
return null;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor) * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/ */
public void acceptElement(ISourceElementRequestor requestor) public void acceptElement(ISourceElementRequestor requestor)
{ {
// TODO Auto-generated method stub requestor.acceptMethodDeclaration(this);
references.processReferences(requestor);
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor) * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/ */
public void enterScope(ISourceElementRequestor requestor) public void enterScope(ISourceElementRequestor requestor)
{ {
// TODO Auto-generated method stub requestor.enterMethodBody(this);
references.processReferences(requestor);
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor) * @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/ */
public void exitScope(ISourceElementRequestor requestor) public void exitScope(ISourceElementRequestor requestor)
{ {
// TODO Auto-generated method stub requestor.exitMethodBody( this );
} }
} }

View file

@ -0,0 +1,62 @@
/**********************************************************************
* 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)
{
requestor.acceptMethodReference( this );
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
public void enterScope(ISourceElementRequestor requestor)
{
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
*/
public void exitScope(ISourceElementRequestor requestor)
{
}
}

View file

@ -1,81 +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.Iterator;
import org.eclipse.cdt.core.parser.ast.IASTInitializerClause;
import org.eclipse.cdt.core.parser.ast.IASTParameterDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier;
/**
* @author jcamelon
*
*/
public class ASTParameterDeclaration implements IASTParameterDeclaration
{
/**
*
*/
public ASTParameterDeclaration()
{
super();
// TODO Auto-generated constructor stub
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTParameterDeclaration#getName()
*/
public String getName()
{
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTParameterDeclaration#getDefaultValue()
*/
public IASTInitializerClause getDefaultValue()
{
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration#isConst()
*/
public boolean isConst()
{
// TODO Auto-generated method stub
return false;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration#getPointerOperators()
*/
public Iterator getPointerOperators()
{
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration#getArrayModifiers()
*/
public Iterator getArrayModifiers()
{
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTTypeSpecifierOwner#getTypeSpecifier()
*/
public IASTTypeSpecifier getTypeSpecifier()
{
// TODO Auto-generated method stub
return null;
}
}

View file

@ -58,12 +58,12 @@ import org.eclipse.cdt.core.parser.ast.IASTExpression.IASTNewExpressionDescripto
import org.eclipse.cdt.core.parser.ast.IASTExpression.Kind; import org.eclipse.cdt.core.parser.ast.IASTExpression.Kind;
import org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier.Type; import org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier.Type;
import org.eclipse.cdt.core.parser.ast.IASTTemplateParameter.ParamKind; import org.eclipse.cdt.core.parser.ast.IASTTemplateParameter.ParamKind;
import org.eclipse.cdt.internal.core.parser.ast.ASTAbstractDeclaration;
import org.eclipse.cdt.internal.core.parser.ast.BaseASTFactory; import org.eclipse.cdt.internal.core.parser.ast.BaseASTFactory;
import org.eclipse.cdt.internal.core.parser.ast.IASTArrayModifier; import org.eclipse.cdt.internal.core.parser.ast.IASTArrayModifier;
import org.eclipse.cdt.internal.core.parser.pst.ForewardDeclaredSymbolExtension; import org.eclipse.cdt.internal.core.parser.pst.ForewardDeclaredSymbolExtension;
import org.eclipse.cdt.internal.core.parser.pst.IContainerSymbol; import org.eclipse.cdt.internal.core.parser.pst.IContainerSymbol;
import org.eclipse.cdt.internal.core.parser.pst.IDerivableContainerSymbol; import org.eclipse.cdt.internal.core.parser.pst.IDerivableContainerSymbol;
import org.eclipse.cdt.internal.core.parser.pst.IParameterizedSymbol;
import org.eclipse.cdt.internal.core.parser.pst.ISymbol; import org.eclipse.cdt.internal.core.parser.pst.ISymbol;
import org.eclipse.cdt.internal.core.parser.pst.ISymbolASTExtension; import org.eclipse.cdt.internal.core.parser.pst.ISymbolASTExtension;
import org.eclipse.cdt.internal.core.parser.pst.ISymbolOwner; import org.eclipse.cdt.internal.core.parser.pst.ISymbolOwner;
@ -150,7 +150,10 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
} }
protected IContainerSymbol scopeToSymbol(IASTScope currentScope) protected IContainerSymbol scopeToSymbol(IASTScope currentScope)
{ {
return ((ASTScope)currentScope).getContainerSymbol(); if( currentScope instanceof ASTScope )
return ((ASTScope)currentScope).getContainerSymbol();
else
return scopeToSymbol(((ASTAnonymousDeclaration)currentScope).getOwnerScope());
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createUsingDeclaration(org.eclipse.cdt.core.parser.ast.IASTScope, boolean, org.eclipse.cdt.core.parser.ITokenDuple, int, int) * @see org.eclipse.cdt.core.parser.ast.IASTFactory#createUsingDeclaration(org.eclipse.cdt.core.parser.ast.IASTScope, boolean, org.eclipse.cdt.core.parser.ITokenDuple, int, int)
@ -319,8 +322,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
String spec, String spec,
int startingOffset) int startingOffset)
{ {
// TODO FIX THIS return new ASTLinkageSpecification( scopeToSymbol( scope ), spec, startingOffset );
return new ASTLinkageSpecification();
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createClassSpecifier(org.eclipse.cdt.core.parser.ast.IASTScope, java.lang.String, org.eclipse.cdt.core.parser.ast.ASTClassKind, org.eclipse.cdt.core.parser.ast.IASTClassSpecifier.ClassNameType, org.eclipse.cdt.core.parser.ast.ASTAccessVisibility, org.eclipse.cdt.core.parser.ast.IASTTemplate, int, int) * @see org.eclipse.cdt.core.parser.ast.IASTFactory#createClassSpecifier(org.eclipse.cdt.core.parser.ast.IASTScope, java.lang.String, org.eclipse.cdt.core.parser.ast.ASTClassKind, org.eclipse.cdt.core.parser.ast.IASTClassSpecifier.ClassNameType, org.eclipse.cdt.core.parser.ast.ASTAccessVisibility, org.eclipse.cdt.core.parser.ast.IASTTemplate, int, int)
@ -414,6 +416,9 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
*/ */
protected IASTReference createReference(ISymbol symbol, String string, int offset ) throws ASTSemanticException protected IASTReference createReference(ISymbol symbol, String string, int offset ) throws ASTSemanticException
{ {
if( symbol == null )
throw new ASTSemanticException();
if( symbol.getType() == TypeInfo.t_namespace ) if( symbol.getType() == TypeInfo.t_namespace )
{ {
return new ASTNamespaceReference( offset, string, (IASTNamespaceDefinition)symbol.getASTExtension().getPrimaryDeclaration()); return new ASTNamespaceReference( offset, string, (IASTNamespaceDefinition)symbol.getASTExtension().getPrimaryDeclaration());
@ -426,6 +431,13 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
} }
else if( symbol.getType() == TypeInfo.t_enumeration ) else if( symbol.getType() == TypeInfo.t_enumeration )
return new ASTEnumerationReference( offset, string, (IASTEnumerationSpecifier)symbol.getASTExtension().getPrimaryDeclaration() ); return new ASTEnumerationReference( offset, string, (IASTEnumerationSpecifier)symbol.getASTExtension().getPrimaryDeclaration() );
else if( symbol.getType() == TypeInfo.t_function )
{
if( symbol.getContainingSymbol().getTypeInfo().isType( TypeInfo.t_class, TypeInfo.t_union ) )
return new ASTMethodReference( offset, string, (IASTMethod)symbol.getASTExtension().getPrimaryDeclaration() );
else
return new ASTFunctionReference( offset, string, (IASTFunction)symbol.getASTExtension().getPrimaryDeclaration() );
}
else if( ( symbol.getType() == TypeInfo.t_type ) || else if( ( symbol.getType() == TypeInfo.t_type ) ||
( symbol.getType() == TypeInfo.t_bool )|| ( symbol.getType() == TypeInfo.t_bool )||
( symbol.getType() == TypeInfo.t_char ) || ( symbol.getType() == TypeInfo.t_char ) ||
@ -645,17 +657,8 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
Iterator i = typeName.iterator(); Iterator i = typeName.iterator();
IToken first = typeName.getFirstToken(); IToken first = typeName.getFirstToken();
ISymbol typeSymbol = null; ISymbol typeSymbol = getScopeToSearchUpon( scope, first, i );
if( first.getType() == IToken.tCOLONCOLON )
{
typeSymbol = pst.getCompilationUnit();
i.next(); // waste this token
}
else
{
typeSymbol = scopeToSymbol( scope );
}
while( i.hasNext() ) while( i.hasNext() )
{ {
IToken current = (IToken)i.next(); IToken current = (IToken)i.next();
@ -700,22 +703,171 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
boolean isStatic, boolean isStatic,
int startOffset, int startOffset,
int nameOffset, int nameOffset,
IASTTemplate ownerTemplate) IASTTemplate ownerTemplate) throws ASTSemanticException
{ {
// TODO Auto-generated method stub IContainerSymbol ownerScope = scopeToSymbol( scope );
return new ASTFunction(); IParameterizedSymbol symbol = pst.newParameterizedSymbol( name, TypeInfo.t_function );
setFunctionTypeInfoBits(isInline, isFriend, isStatic, symbol);
List references = new ArrayList();
try
{
ownerScope.addSymbol( symbol );
}
catch (ParserSymbolTableException e)
{
throw new ASTSemanticException();
}
setParameter( symbol, returnType, false, references );
setParameters( symbol, references, parameters.iterator() );
ASTFunction function = new ASTFunction( symbol, parameters, returnType, exception, startOffset, nameOffset, ownerTemplate, references );
try
{
attachSymbolExtension(symbol, function);
}
catch (ExtensionException e1)
{
throw new ASTSemanticException();
}
return function;
} }
/* (non-Javadoc) protected void setFunctionTypeInfoBits(
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createAbstractDeclaration(boolean, org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier, java.util.List, java.util.List) boolean isInline,
boolean isFriend,
boolean isStatic,
IParameterizedSymbol symbol)
{
symbol.getTypeInfo().setBit( isInline, TypeInfo.isInline );
symbol.getTypeInfo().setBit( isFriend, TypeInfo.isFriend );
symbol.getTypeInfo().setBit( isStatic, TypeInfo.isStatic );
}
/**
* @param symbol
* @param iterator
*/ */
public IASTAbstractDeclaration createAbstractDeclaration( protected void setParameters(IParameterizedSymbol symbol, List references, Iterator iterator) throws ASTSemanticException
boolean isConst,
IASTTypeSpecifier typeSpecifier,
List pointerOperators,
List arrayModifiers)
{ {
return new ASTAbstractDeclaration( isConst, typeSpecifier, pointerOperators, arrayModifiers ); while( iterator.hasNext() )
{
setParameter( symbol, (IASTParameterDeclaration)iterator.next(), true, references );
}
} }
/**
* @param symbol
* @param returnType
*/
protected void setParameter(IParameterizedSymbol symbol, IASTAbstractDeclaration absDecl, boolean isParameter, List references) throws ASTSemanticException
{
TypeInfo.eType type = null;
ISymbol xrefSymbol = null;
List newReferences = null;
if( absDecl.getTypeSpecifier() instanceof IASTSimpleTypeSpecifier )
{
IASTSimpleTypeSpecifier.Type kind = ((IASTSimpleTypeSpecifier)absDecl.getTypeSpecifier()).getType();
if( kind == IASTSimpleTypeSpecifier.Type.BOOL )
type = TypeInfo.t_bool;
else if( kind == IASTSimpleTypeSpecifier.Type.CHAR )
type = TypeInfo.t_char;
else if( kind == IASTSimpleTypeSpecifier.Type.DOUBLE )
type = TypeInfo.t_double;
else if( kind == IASTSimpleTypeSpecifier.Type.FLOAT )
type = TypeInfo.t_float;
else if( kind == IASTSimpleTypeSpecifier.Type.INT )
type = TypeInfo.t_int;
else if( kind == IASTSimpleTypeSpecifier.Type.VOID )
type = TypeInfo.t_void;
else if( kind == IASTSimpleTypeSpecifier.Type.WCHAR_T)
type = TypeInfo.t_wchar_t;
else if( kind == IASTSimpleTypeSpecifier.Type.CLASS_OR_TYPENAME )
{
type = TypeInfo.t_type;
xrefSymbol = ((ASTSimpleTypeSpecifier)absDecl.getTypeSpecifier()).getSymbol();
newReferences = ((ASTSimpleTypeSpecifier)absDecl.getTypeSpecifier()).getReferences();
}
else
throw new ASTSemanticException();
}
else if( absDecl.getTypeSpecifier() instanceof IASTClassSpecifier )
{
ASTClassKind kind = ((IASTClassSpecifier)absDecl.getTypeSpecifier()).getClassKind();
if( kind == ASTClassKind.CLASS )
type = TypeInfo.t_class;
else if( kind == ASTClassKind.STRUCT )
type = TypeInfo.t_struct;
else if( kind == ASTClassKind.UNION )
type = TypeInfo.t_union;
else
throw new ASTSemanticException();
}
else if( absDecl.getTypeSpecifier() instanceof IASTEnumerationSpecifier )
{
type = TypeInfo.t_enumeration;
}
else if( absDecl.getTypeSpecifier() instanceof IASTElaboratedTypeSpecifier )
{
ASTClassKind kind = ((IASTElaboratedTypeSpecifier)absDecl.getTypeSpecifier()).getClassKind();
if( kind == ASTClassKind.CLASS )
type = TypeInfo.t_class;
else if( kind == ASTClassKind.STRUCT )
type = TypeInfo.t_struct;
else if( kind == ASTClassKind.UNION )
type = TypeInfo.t_union;
else if( kind == ASTClassKind.ENUM )
type = TypeInfo.t_enumeration;
else
throw new ASTSemanticException();
}
else
throw new ASTSemanticException();
ISymbol paramSymbol = pst.newSymbol( "", type );
if( xrefSymbol != null )
paramSymbol.setTypeSymbol( xrefSymbol );
setPointerOperators( paramSymbol, absDecl.getPointerOperators(), absDecl.getArrayModifiers() );
if( isParameter)
symbol.addParameter( paramSymbol );
else
symbol.setReturnType( paramSymbol );
if( newReferences != null )
references.addAll( newReferences );
}
/**
* @param paramSymbol
* @param iterator
*/
protected void setPointerOperators(ISymbol symbol, Iterator pointerOpsIterator, Iterator arrayModsIterator) throws ASTSemanticException
{
while( pointerOpsIterator.hasNext() )
{
ASTPointerOperator pointerOperator = (ASTPointerOperator)pointerOpsIterator.next();
if( pointerOperator == ASTPointerOperator.REFERENCE )
symbol.addPtrOperator( new TypeInfo.PtrOp( TypeInfo.PtrOp.t_reference ));
else if( pointerOperator == ASTPointerOperator.POINTER )
symbol.addPtrOperator( new TypeInfo.PtrOp( TypeInfo.PtrOp.t_pointer ));
else if( pointerOperator == ASTPointerOperator.CONST_POINTER )
symbol.addPtrOperator( new TypeInfo.PtrOp( TypeInfo.PtrOp.t_pointer, true, false ));
else if( pointerOperator == ASTPointerOperator.VOLATILE_POINTER )
symbol.addPtrOperator( new TypeInfo.PtrOp( TypeInfo.PtrOp.t_pointer, false, true));
else
throw new ASTSemanticException();
}
while( arrayModsIterator.hasNext() )
{
IASTArrayModifier astArrayModifier = (IASTArrayModifier)arrayModsIterator.next();
symbol.addPtrOperator( new TypeInfo.PtrOp( TypeInfo.PtrOp.t_array ));
}
}
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createMethod(org.eclipse.cdt.core.parser.ast.IASTScope, java.lang.String, java.util.List, org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration, org.eclipse.cdt.core.parser.ast.IASTExceptionSpecification, boolean, boolean, boolean, int, int, org.eclipse.cdt.core.parser.ast.IASTTemplate, boolean, boolean, boolean, boolean, boolean, boolean, boolean, org.eclipse.cdt.core.parser.ast.ASTAccessVisibility) * @see org.eclipse.cdt.core.parser.ast.IASTFactory#createMethod(org.eclipse.cdt.core.parser.ast.IASTScope, java.lang.String, java.util.List, org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration, org.eclipse.cdt.core.parser.ast.IASTExceptionSpecification, boolean, boolean, boolean, int, int, org.eclipse.cdt.core.parser.ast.IASTTemplate, boolean, boolean, boolean, boolean, boolean, boolean, boolean, org.eclipse.cdt.core.parser.ast.ASTAccessVisibility)
*/ */
@ -738,11 +890,55 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
boolean isVirtual, boolean isVirtual,
boolean isExplicit, boolean isExplicit,
boolean isPureVirtual, boolean isPureVirtual,
ASTAccessVisibility visibility) ASTAccessVisibility visibility) throws ASTSemanticException
{ {
// TODO Auto-generated method stub IContainerSymbol ownerScope = scopeToSymbol( scope );
return new ASTMethod(); IParameterizedSymbol symbol = pst.newParameterizedSymbol( name, TypeInfo.t_function );
setFunctionTypeInfoBits(isInline, isFriend, isStatic, symbol);
setMethodTypeInfoBits( symbol, isConst, isVolatile, isVirtual, isExplicit );
List references = new ArrayList();
try
{
ownerScope.addSymbol( symbol );
}
catch (ParserSymbolTableException e)
{
throw new ASTSemanticException();
}
setParameter( symbol, returnType, false, references );
setParameters( symbol, references, parameters.iterator() );
ASTMethod method = new ASTMethod( symbol, parameters, returnType, exception, startOffset, nameOffset, ownerTemplate, references, isConstructor, isDestructor, isPureVirtual, visibility );
try
{
attachSymbolExtension( symbol, method );
}
catch (ExtensionException e1)
{
throw new ASTSemanticException();
}
return method;
} }
/**
* @param symbol
* @param isConst
* @param isVolatile
* @param isConstructor
* @param isDestructor
* @param isVirtual
* @param isExplicit
* @param isPureVirtual
*/
protected void setMethodTypeInfoBits(IParameterizedSymbol symbol, boolean isConst, boolean isVolatile, boolean isVirtual, boolean isExplicit)
{
symbol.getTypeInfo().setBit( isConst, TypeInfo.isConst );
symbol.getTypeInfo().setBit( isVolatile, TypeInfo.isConst );
symbol.getTypeInfo().setBit( isVirtual, TypeInfo.isVirtual );
symbol.getTypeInfo().setBit( isExplicit, TypeInfo.isExplicit );
}
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createVariable(org.eclipse.cdt.core.parser.ast.IASTScope, java.lang.String, boolean, org.eclipse.cdt.core.parser.ast.IASTInitializerClause, org.eclipse.cdt.core.parser.ast.IASTExpression, org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration, boolean, boolean, boolean, boolean, int, int) * @see org.eclipse.cdt.core.parser.ast.IASTFactory#createVariable(org.eclipse.cdt.core.parser.ast.IASTScope, java.lang.String, boolean, org.eclipse.cdt.core.parser.ast.IASTInitializerClause, org.eclipse.cdt.core.parser.ast.IASTExpression, org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration, boolean, boolean, boolean, boolean, int, int)
*/ */
@ -761,8 +957,8 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
int nameOffset) throws ASTSemanticException int nameOffset) throws ASTSemanticException
{ {
List references = new ArrayList(); List references = new ArrayList();
ISymbol newSymbol = cloneSimpleTypeSymbol(scope, name, abstractDeclaration, references); ISymbol newSymbol = cloneSimpleTypeSymbol(name, abstractDeclaration, references);
setSymbolBits( setVariableTypeInfoBits(
isAuto, isAuto,
abstractDeclaration, abstractDeclaration,
isMutable, isMutable,
@ -770,6 +966,15 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
isRegister, isRegister,
isStatic, isStatic,
newSymbol); newSymbol);
setPointerOperators( newSymbol, abstractDeclaration.getPointerOperators(), abstractDeclaration.getArrayModifiers() );
try
{
scopeToSymbol(scope).addSymbol( newSymbol );
}
catch (ParserSymbolTableException e)
{
// TODO Auto-generated catch block
}
ASTVariable variable = new ASTVariable( newSymbol, abstractDeclaration, initializerClause, bitfieldExpression, startingOffset, nameOffset, references ); ASTVariable variable = new ASTVariable( newSymbol, abstractDeclaration, initializerClause, bitfieldExpression, startingOffset, nameOffset, references );
try try
@ -782,7 +987,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
} }
return variable; return variable;
} }
private void setSymbolBits( protected void setVariableTypeInfoBits(
boolean isAuto, boolean isAuto,
IASTAbstractDeclaration abstractDeclaration, IASTAbstractDeclaration abstractDeclaration,
boolean isMutable, boolean isMutable,
@ -799,7 +1004,6 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
newSymbol.getTypeInfo().setBit( abstractDeclaration.isConst(), TypeInfo.isConst ); newSymbol.getTypeInfo().setBit( abstractDeclaration.isConst(), TypeInfo.isConst );
} }
protected ISymbol cloneSimpleTypeSymbol( protected ISymbol cloneSimpleTypeSymbol(
IASTScope scope,
String name, String name,
IASTAbstractDeclaration abstractDeclaration, IASTAbstractDeclaration abstractDeclaration,
List references) List references)
@ -810,15 +1014,6 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
ISymbol symbolToBeCloned = ((ASTSimpleTypeSpecifier)abstractDeclaration.getTypeSpecifier()).getSymbol(); ISymbol symbolToBeCloned = ((ASTSimpleTypeSpecifier)abstractDeclaration.getTypeSpecifier()).getSymbol();
newSymbol = (ISymbol)symbolToBeCloned.clone(); newSymbol = (ISymbol)symbolToBeCloned.clone();
newSymbol.setName( name ); newSymbol.setName( name );
IContainerSymbol containerSymbol = scopeToSymbol(scope);
try
{
containerSymbol.addSymbol( newSymbol );
}
catch (ParserSymbolTableException e)
{
// TODO Auto-generated catch block
}
references.addAll( ((ASTSimpleTypeSpecifier)abstractDeclaration.getTypeSpecifier()).getReferences() ); references.addAll( ((ASTSimpleTypeSpecifier)abstractDeclaration.getTypeSpecifier()).getReferences() );
} }
return newSymbol; return newSymbol;
@ -842,8 +1037,8 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
ASTAccessVisibility visibility) throws ASTSemanticException ASTAccessVisibility visibility) throws ASTSemanticException
{ {
List references = new ArrayList(); List references = new ArrayList();
ISymbol newSymbol = cloneSimpleTypeSymbol(scope, name, abstractDeclaration, references); ISymbol newSymbol = cloneSimpleTypeSymbol(name, abstractDeclaration, references);
setSymbolBits( setVariableTypeInfoBits(
isAuto, isAuto,
abstractDeclaration, abstractDeclaration,
isMutable, isMutable,
@ -851,6 +1046,16 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
isRegister, isRegister,
isStatic, isStatic,
newSymbol); newSymbol);
setPointerOperators( newSymbol, abstractDeclaration.getPointerOperators(), abstractDeclaration.getArrayModifiers() );
try
{
scopeToSymbol(scope).addSymbol( newSymbol );
}
catch (ParserSymbolTableException e)
{
// TODO Auto-generated catch block
}
ASTField field = new ASTField( newSymbol, abstractDeclaration, initializerClause, bitfieldExpression, startingOffset, nameOffset, references, visibility ); ASTField field = new ASTField( newSymbol, abstractDeclaration, initializerClause, bitfieldExpression, startingOffset, nameOffset, references, visibility );
try try
{ {
@ -864,20 +1069,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
} }
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createParameterDeclaration(boolean, org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier, java.util.List, java.util.List, java.lang.String, org.eclipse.cdt.core.parser.ast.IASTInitializerClause)
*/
public IASTParameterDeclaration createParameterDeclaration(
boolean isConst,
IASTTypeSpecifier getTypeSpecifier,
List pointerOperators,
List arrayModifiers,
String parameterName,
IASTInitializerClause initializerClause)
{
// TODO Auto-generated method stub
return new ASTParameterDeclaration();
}
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createTemplateDeclaration(org.eclipse.cdt.core.parser.ast.IASTScope, java.util.List, boolean, int) * @see org.eclipse.cdt.core.parser.ast.IASTFactory#createTemplateDeclaration(org.eclipse.cdt.core.parser.ast.IASTScope, java.util.List, boolean, int)
*/ */

View file

@ -55,7 +55,6 @@ 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.IASTNewExpressionDescriptor;
import org.eclipse.cdt.core.parser.ast.IASTExpression.Kind; import org.eclipse.cdt.core.parser.ast.IASTExpression.Kind;
import org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier.Type; import org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier.Type;
import org.eclipse.cdt.internal.core.parser.ast.*;
import org.eclipse.cdt.internal.core.parser.ast.BaseASTFactory; import org.eclipse.cdt.internal.core.parser.ast.BaseASTFactory;
import org.eclipse.cdt.internal.core.parser.ast.IASTArrayModifier; import org.eclipse.cdt.internal.core.parser.ast.IASTArrayModifier;
@ -217,14 +216,6 @@ public class QuickParseASTFactory extends BaseASTFactory implements IASTFactory
return new ASTFunction(scope, name, parameters, returnType, exception, isInline, isFriend, isStatic, startOffset, nameOffset, ownerTemplate ); return new ASTFunction(scope, name, parameters, returnType, exception, isInline, isFriend, isStatic, startOffset, nameOffset, ownerTemplate );
} }
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createAbstractDeclaration(boolean, org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier, java.util.List, java.util.List)
*/
public IASTAbstractDeclaration createAbstractDeclaration(boolean isConst, IASTTypeSpecifier typeSpecifier, List pointerOperators, List arrayModifiers)
{
return new ASTAbstractDeclaration( isConst, typeSpecifier, pointerOperators, arrayModifiers );
}
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createMethod(org.eclipse.cdt.core.parser.ast.IASTScope, java.lang.String, java.util.List, org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration, org.eclipse.cdt.core.parser.ast.IASTExceptionSpecification, boolean, boolean, boolean, int, int, org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration, boolean, boolean, boolean, boolean, boolean, boolean, boolean, org.eclipse.cdt.core.parser.ast.ASTAccessVisibility) * @see org.eclipse.cdt.core.parser.ast.IASTFactory#createMethod(org.eclipse.cdt.core.parser.ast.IASTScope, java.lang.String, java.util.List, org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration, org.eclipse.cdt.core.parser.ast.IASTExceptionSpecification, boolean, boolean, boolean, int, int, org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration, boolean, boolean, boolean, boolean, boolean, boolean, boolean, org.eclipse.cdt.core.parser.ast.ASTAccessVisibility)
*/ */
@ -249,14 +240,6 @@ public class QuickParseASTFactory extends BaseASTFactory implements IASTFactory
return new ASTField(scope, name, isAuto, initializerClause, bitfieldExpression, abstractDeclaration, isMutable, isExtern, isRegister, isStatic, startingOffset, nameOffset, visibility); return new ASTField(scope, name, isAuto, initializerClause, bitfieldExpression, abstractDeclaration, isMutable, isExtern, isRegister, isStatic, startingOffset, nameOffset, visibility);
} }
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createParameterDeclaration(boolean, org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier, java.util.List, java.util.List, java.lang.String, org.eclipse.cdt.core.parser.ast.IASTInitializerClause)
*/
public IASTParameterDeclaration createParameterDeclaration(boolean isConst, IASTTypeSpecifier typeSpecifier, List pointerOperators, List arrayModifiers, String parameterName, IASTInitializerClause initializerClause)
{
return new ASTParameterDeclaration( isConst, typeSpecifier, pointerOperators, arrayModifiers, parameterName, initializerClause );
}
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createTemplateDeclaration(java.util.List) * @see org.eclipse.cdt.core.parser.ast.IASTFactory#createTemplateDeclaration(java.util.List)
*/ */

View file

@ -2117,7 +2117,10 @@ public class ParserSymbolTable {
if( size != size2 ){ if( size != size2 ){
return size2 - size; return size2 - size;
} else { } else if( size == 0 )
return 0;
else {
Iterator iter1 = symbol.getTypeInfo().getPtrOperators().iterator(); Iterator iter1 = symbol.getTypeInfo().getPtrOperators().iterator();
Iterator iter2 = getTypeInfo().getPtrOperators().iterator(); Iterator iter2 = getTypeInfo().getPtrOperators().iterator();
@ -2560,7 +2563,9 @@ public class ParserSymbolTable {
throw new ParserSymbolTableException(); throw new ParserSymbolTableException();
} }
if( unnamed || ((origList == null) ? isValidOverload( origDecl, obj ) : isValidOverload( origList, obj ) )){ boolean validOverride = ((origList == null) ? isValidOverload( origDecl, obj ) : isValidOverload( origList, obj ) );
if( unnamed || validOverride )
{
if( origList == null ){ if( origList == null ){
origList = new LinkedList(); origList = new LinkedList();
origList.add( origDecl ); origList.add( origDecl );