mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-09 01:05:38 +02:00
CORE
Added Expression x-reference support into Parser. TESTS Added testSimpleExpression(), testParameterExpressions() && testNestedNamespaceExpression() to CompleteParseASTTest.java.
This commit is contained in:
parent
4214aed737
commit
fa8baf0518
22 changed files with 1297 additions and 670 deletions
|
@ -1,3 +1,7 @@
|
|||
2003-08-13 John Camelon
|
||||
Added testSimpleExpression(), testParameterExpressions() &&
|
||||
testNestedNamespaceExpression() to CompleteParseASTTest.java.
|
||||
|
||||
2003-08-13 Sean Evoy
|
||||
Renamed the 'AllBuildTest' class to 'ManagedBuildTest' and updated the
|
||||
integration suite class.
|
||||
|
|
|
@ -193,6 +193,7 @@ public class CompleteParseASTTest extends TestCase
|
|||
public void exitFunctionBody(IASTFunction function)
|
||||
{
|
||||
popScope();
|
||||
getCurrentScope().addDeclaration(function);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
|
@ -291,6 +292,7 @@ public class CompleteParseASTTest extends TestCase
|
|||
public void exitMethodBody(IASTMethod method)
|
||||
{
|
||||
popScope();
|
||||
getCurrentScope().addDeclaration(method);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
|
@ -536,7 +538,7 @@ public class CompleteParseASTTest extends TestCase
|
|||
ParserFactory.createScanner( new StringReader( code ), "test-code", new ScannerInfo(),
|
||||
ParserMode.COMPLETE_PARSE, callback ), callback, ParserMode.COMPLETE_PARSE
|
||||
);
|
||||
parser.parse();
|
||||
if( ! parser.parse() ) throw new ParserException( "FAILURE");
|
||||
return callback.getCompilationUnit();
|
||||
}
|
||||
|
||||
|
@ -901,5 +903,30 @@ public class CompleteParseASTTest extends TestCase
|
|||
IASTFunction f2 = (IASTFunction)i.next();
|
||||
assertFalse( i.hasNext() );
|
||||
}
|
||||
|
||||
|
||||
public void testSimpleExpression() throws Exception
|
||||
{
|
||||
Iterator i = parse( "int x; int y = x;").getDeclarations();
|
||||
IASTVariable varX = (IASTVariable)i.next();
|
||||
IASTVariable varY = (IASTVariable)i.next();
|
||||
assertEquals( callback.getReferences().size(), 1 );
|
||||
}
|
||||
|
||||
public void testParameterExpressions() throws Exception
|
||||
{
|
||||
Iterator i = parse( "int x = 5; void foo( int sub = x ) { }").getDeclarations();
|
||||
IASTVariable varX = (IASTVariable)i.next();
|
||||
IASTFunction funFoo = (IASTFunction)i.next();
|
||||
assertFalse( i.hasNext() );
|
||||
assertEquals( callback.getReferences().size(), 1 );
|
||||
}
|
||||
|
||||
public void testNestedNamespaceExpression() throws Exception
|
||||
{
|
||||
Iterator i = parse( "namespace A { int x = 666; } int y = A::x;").getDeclarations();
|
||||
IASTNamespaceDefinition namespaceA = (IASTNamespaceDefinition)i.next();
|
||||
IASTVariable variableY = (IASTVariable)i.next();
|
||||
assertFalse( i.hasNext() );
|
||||
assertEquals( callback.getReferences().size(), 2 );
|
||||
}
|
||||
}
|
||||
|
|
|
@ -27,7 +27,7 @@ public class ExprEvalTest extends TestCase {
|
|||
|
||||
final NullSourceElementRequestor nullCallback = new NullSourceElementRequestor();
|
||||
IParser parser = ParserFactory.createParser(ParserFactory.createScanner( new StringReader( code ), null, new ScannerInfo(), null, nullCallback ), nullCallback, ParserMode.QUICK_PARSE);
|
||||
IASTExpression expression = parser.expression();
|
||||
IASTExpression expression = parser.expression(null);
|
||||
assertEquals(expectedValue, expression.evaluateExpression());
|
||||
}
|
||||
|
||||
|
|
|
@ -1429,7 +1429,7 @@ public class QuickParseASTTests extends BaseASTTest
|
|||
assertFalse( enumerators.hasNext() );
|
||||
assertEquals( enumerator.getName(), "isPointer");
|
||||
assertEquals( enumerator.getInitialValue().getExpressionKind(), IASTExpression.Kind.ID_EXPRESSION );
|
||||
assertEquals( enumerator.getInitialValue().getLiteralString(), "PointerTraits<T>::result");
|
||||
assertEquals( enumerator.getInitialValue().getTypeId(), "PointerTraits<T>::result");
|
||||
}
|
||||
|
||||
public void testBug36690() throws Exception {
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
2003-08-13 John Camelon
|
||||
Added Expression x-reference support into Parser.
|
||||
|
||||
2003-08-12 John Camelon
|
||||
Added X-Ref/Elaborated type support w/element requestor callbacks.
|
||||
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
package org.eclipse.cdt.core.parser;
|
||||
|
||||
import org.eclipse.cdt.core.parser.ast.IASTExpression;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTScope;
|
||||
|
||||
|
||||
|
||||
|
@ -40,7 +41,7 @@ public interface IParser {
|
|||
* @throws Backtrack thrown if the Scanner/Stream provided does not yield a valid
|
||||
* expression
|
||||
*/
|
||||
public IASTExpression expression() throws Backtrack;
|
||||
public IASTExpression expression(IASTScope scope) throws Backtrack;
|
||||
|
||||
/**
|
||||
* Is the parser configured for ANSI C or ANSI C++?
|
||||
|
|
|
@ -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 IASTExpression
|
||||
public interface IASTExpression extends ISourceElementCallbackDelegate
|
||||
{
|
||||
public class Kind extends Enum
|
||||
{
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
package org.eclipse.cdt.core.parser.ast;
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.cdt.core.parser.IToken;
|
||||
import org.eclipse.cdt.core.parser.ITokenDuple;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier.ClassNameType;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTExpression.IASTNewExpressionDescriptor;
|
||||
|
@ -88,14 +89,14 @@ public interface IASTFactory
|
|||
int startingOffset,
|
||||
int endingOffset, IASTExpression initialValue)throws ASTSemanticException;
|
||||
public IASTExpression createExpression(
|
||||
IASTScope scope,
|
||||
IASTExpression.Kind kind,
|
||||
IASTExpression lhs,
|
||||
IASTExpression rhs,
|
||||
IASTExpression thirdExpression,
|
||||
String id,
|
||||
String typeId,
|
||||
String literal,
|
||||
IASTNewExpressionDescriptor newDescriptor);
|
||||
IToken id,
|
||||
ITokenDuple typeId,
|
||||
String literal, IASTNewExpressionDescriptor newDescriptor) throws ASTSemanticException;
|
||||
public IASTExpression.IASTNewExpressionDescriptor createNewDescriptor();
|
||||
public IASTInitializerClause createInitializerClause(
|
||||
IASTInitializerClause.Kind kind,
|
||||
|
|
|
@ -13,11 +13,12 @@ package org.eclipse.cdt.core.parser.ast;
|
|||
import java.util.Iterator;
|
||||
|
||||
import org.eclipse.cdt.core.parser.Enum;
|
||||
import org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate;
|
||||
|
||||
/**
|
||||
* @author jcamelon
|
||||
*/
|
||||
public interface IASTInitializerClause {
|
||||
public interface IASTInitializerClause extends ISourceElementCallbackDelegate{
|
||||
|
||||
public class Kind extends Enum
|
||||
{
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1786,7 +1786,7 @@ public class Scanner implements IScanner {
|
|||
IParser parser = ParserFactory.createParser(trial, nullCallback, ParserMode.QUICK_PARSE );
|
||||
|
||||
try {
|
||||
IASTExpression exp = parser.expression();
|
||||
IASTExpression exp = parser.expression(null);
|
||||
if( exp.evaluateExpression() == 0 )
|
||||
return false;
|
||||
} catch( Backtrack b )
|
||||
|
|
|
@ -0,0 +1,121 @@
|
|||
/**********************************************************************
|
||||
* 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;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.NoSuchElementException;
|
||||
|
||||
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTExpression;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTInitializerClause;
|
||||
|
||||
/**
|
||||
* @author jcamelon
|
||||
*/
|
||||
public class ASTInitializerClause implements IASTInitializerClause {
|
||||
|
||||
private final IASTInitializerClause.Kind kind;
|
||||
private final IASTExpression assignmentExpression;
|
||||
private final List initializerClauses;
|
||||
/**
|
||||
* @param kind
|
||||
* @param assignmentExpression
|
||||
* @param initializerClauses
|
||||
*/
|
||||
public ASTInitializerClause(Kind kind, IASTExpression assignmentExpression, List initializerClauses) {
|
||||
this.kind = kind;
|
||||
this.assignmentExpression = assignmentExpression;
|
||||
this.initializerClauses = initializerClauses;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTInitializerClause#getKind()
|
||||
*/
|
||||
public Kind getKind() {
|
||||
return kind;
|
||||
}
|
||||
|
||||
public static class EmptyIterator implements Iterator
|
||||
{
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see java.util.Iterator#hasNext()
|
||||
*/
|
||||
public boolean hasNext()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see java.util.Iterator#next()
|
||||
*/
|
||||
public Object next()
|
||||
{
|
||||
throw new NoSuchElementException();
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see java.util.Iterator#remove()
|
||||
*/
|
||||
public void remove()
|
||||
{
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTInitializerClause#getInitializerList()
|
||||
*/
|
||||
public Iterator getInitializers() {
|
||||
if( initializerClauses == null )
|
||||
return new EmptyIterator();
|
||||
return initializerClauses.iterator();
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTInitializerClause#getAssigmentExpression()
|
||||
*/
|
||||
public IASTExpression getAssigmentExpression() {
|
||||
return assignmentExpression;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
|
||||
*/
|
||||
public void acceptElement(ISourceElementRequestor requestor)
|
||||
{
|
||||
Iterator i = getInitializers();
|
||||
while( i.hasNext() )
|
||||
{
|
||||
IASTInitializerClause initializerClause = (IASTInitializerClause)i.next();
|
||||
initializerClause.acceptElement(requestor);
|
||||
}
|
||||
if( assignmentExpression != null )
|
||||
assignmentExpression.acceptElement( requestor );
|
||||
}
|
||||
|
||||
/* (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)
|
||||
{
|
||||
}
|
||||
|
||||
}
|
|
@ -14,6 +14,7 @@ import java.util.List;
|
|||
|
||||
import org.eclipse.cdt.core.parser.ast.ASTPointerOperator;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTExpression;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTInclusion;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTInitializerClause;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTMacro;
|
||||
|
@ -59,5 +60,10 @@ public class BaseASTFactory {
|
|||
return new ASTParameterDeclaration( isConst, isVolatile, typeSpecifier, pointerOperators, arrayModifiers, parameters, pointerOp, parameterName, initializerClause );
|
||||
}
|
||||
|
||||
public IASTInitializerClause createInitializerClause(IASTInitializerClause.Kind kind, IASTExpression assignmentExpression, List initializerClauses)
|
||||
{
|
||||
return new ASTInitializerClause( kind, assignmentExpression, initializerClauses );
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,139 @@
|
|||
/**********************************************************************
|
||||
* 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.List;
|
||||
|
||||
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
|
||||
import org.eclipse.cdt.core.parser.ast.ExpressionEvaluationException;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTExpression;
|
||||
|
||||
/**
|
||||
* @author jcamelon
|
||||
*
|
||||
*/
|
||||
public class ASTExpression implements IASTExpression
|
||||
{
|
||||
private final Kind kind;
|
||||
private final IASTExpression lhs;
|
||||
private final IASTExpression rhs;
|
||||
private final IASTExpression thirdExpression;
|
||||
private final String literal;
|
||||
private final String typeId;
|
||||
private final String id;
|
||||
private final IASTNewExpressionDescriptor newDescriptor;
|
||||
private final List references;
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public ASTExpression( Kind kind, IASTExpression lhs, IASTExpression rhs,
|
||||
IASTExpression thirdExpression, String literal, String typeId, String id, IASTNewExpressionDescriptor newDescriptor, List references )
|
||||
{
|
||||
this.kind = kind;
|
||||
this.lhs = lhs;
|
||||
this.rhs = rhs;
|
||||
this.thirdExpression = thirdExpression;
|
||||
this.literal = literal;
|
||||
this.typeId = typeId;
|
||||
this.id = id;
|
||||
this.newDescriptor = newDescriptor;
|
||||
this.references = references;
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTExpression#getExpressionKind()
|
||||
*/
|
||||
public Kind getExpressionKind()
|
||||
{
|
||||
return kind;
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTExpression#getLHSExpression()
|
||||
*/
|
||||
public IASTExpression getLHSExpression()
|
||||
{
|
||||
return lhs;
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTExpression#getRHSExpression()
|
||||
*/
|
||||
public IASTExpression getRHSExpression()
|
||||
{
|
||||
return rhs;
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTExpression#getThirdExpression()
|
||||
*/
|
||||
public IASTExpression getThirdExpression()
|
||||
{
|
||||
return thirdExpression;
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTExpression#getLiteralString()
|
||||
*/
|
||||
public String getLiteralString()
|
||||
{
|
||||
return literal;
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTExpression#getTypeId()
|
||||
*/
|
||||
public String getTypeId()
|
||||
{
|
||||
return typeId;
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTExpression#getId()
|
||||
*/
|
||||
public String getId()
|
||||
{
|
||||
return id;
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTExpression#getNewExpressionDescriptor()
|
||||
*/
|
||||
public IASTNewExpressionDescriptor getNewExpressionDescriptor()
|
||||
{
|
||||
return newDescriptor;
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTExpression#evaluateExpression()
|
||||
*/
|
||||
public int evaluateExpression() throws ExpressionEvaluationException
|
||||
{
|
||||
throw new ExpressionEvaluationException();
|
||||
}
|
||||
|
||||
public List getReferences()
|
||||
{
|
||||
return references;
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
|
||||
*/
|
||||
public void acceptElement(ISourceElementRequestor requestor)
|
||||
{
|
||||
ASTReferenceStore store = new ASTReferenceStore( references );
|
||||
store.processReferences(requestor);
|
||||
}
|
||||
/* (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)
|
||||
{
|
||||
}
|
||||
|
||||
}
|
|
@ -55,5 +55,8 @@ public class ASTField extends ASTVariable implements IASTField
|
|||
{
|
||||
requestor.acceptField(this);
|
||||
referenceDelegate.processReferences(requestor);
|
||||
if( getInitializerClause() != null )
|
||||
getInitializerClause().acceptElement(requestor);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,6 +17,7 @@ import org.eclipse.cdt.core.parser.ISourceElementRequestor;
|
|||
import org.eclipse.cdt.core.parser.ast.IASTAbstractDeclaration;
|
||||
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.internal.core.parser.ast.ASTQualifiedNamedElement;
|
||||
import org.eclipse.cdt.internal.core.parser.ast.NamedOffsets;
|
||||
|
@ -191,7 +192,23 @@ public class ASTFunction extends ASTScope implements IASTFunction
|
|||
{
|
||||
requestor.acceptFunctionDeclaration(this);
|
||||
references.processReferences(requestor);
|
||||
processParameterInitializers(requestor);
|
||||
}
|
||||
/**
|
||||
* @param requestor
|
||||
*/
|
||||
protected void processParameterInitializers(ISourceElementRequestor requestor)
|
||||
{
|
||||
Iterator i = parameters.iterator();
|
||||
while( i.hasNext() )
|
||||
{
|
||||
IASTParameterDeclaration parm = (IASTParameterDeclaration)i.next();
|
||||
if( parm.getDefaultValue() != null )
|
||||
parm.getDefaultValue().acceptElement(requestor);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
|
||||
*/
|
||||
|
@ -199,6 +216,7 @@ public class ASTFunction extends ASTScope implements IASTFunction
|
|||
{
|
||||
requestor.enterFunctionBody( this );
|
||||
references.processReferences(requestor);
|
||||
processParameterInitializers(requestor);
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#exitScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
|
||||
|
|
|
@ -123,6 +123,7 @@ public class ASTMethod extends ASTFunction implements IASTMethod
|
|||
{
|
||||
requestor.acceptMethodDeclaration(this);
|
||||
references.processReferences(requestor);
|
||||
processParameterInitializers(requestor);
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
|
||||
|
|
|
@ -160,6 +160,8 @@ public class ASTVariable extends ASTSymbol implements IASTVariable
|
|||
{
|
||||
requestor.acceptVariable(this);
|
||||
referenceDelegate.processReferences(requestor);
|
||||
if( initializerClause != null )
|
||||
initializerClause.acceptElement(requestor);
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#enterScope(org.eclipse.cdt.core.parser.ISourceElementRequestor)
|
||||
|
|
|
@ -87,67 +87,79 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
|
|||
}
|
||||
|
||||
|
||||
protected ISymbol lookupQualifiedName( IContainerSymbol startingScope, ITokenDuple name, List references ) throws ASTSemanticException
|
||||
protected ISymbol lookupQualifiedName( IContainerSymbol startingScope, ITokenDuple name, List references, boolean throwOnError ) throws ASTSemanticException
|
||||
{
|
||||
ISymbol result = null;
|
||||
IToken firstSymbol = null;
|
||||
switch( name.length() )
|
||||
{
|
||||
case 0:
|
||||
throw new ASTSemanticException();
|
||||
case 1:
|
||||
firstSymbol = name.getFirstToken();
|
||||
try
|
||||
{
|
||||
result = startingScope.lookup( firstSymbol.getImage());
|
||||
if( result != null )
|
||||
references.add( createReference( result, firstSymbol.getImage(), firstSymbol.getOffset() ));
|
||||
else
|
||||
throw new ASTSemanticException();
|
||||
}
|
||||
catch (ParserSymbolTableException e)
|
||||
{
|
||||
throw new ASTSemanticException();
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
firstSymbol = name.getFirstToken();
|
||||
if( firstSymbol.getType() != IToken.tCOLONCOLON )
|
||||
throw new ASTSemanticException();
|
||||
try
|
||||
{
|
||||
result = pst.getCompilationUnit().lookup( name.getLastToken().getImage() );
|
||||
references.add( createReference( result, name.getLastToken().getImage(), name.getLastToken().getOffset() ));
|
||||
}
|
||||
catch( ParserSymbolTableException e)
|
||||
{
|
||||
throw new ASTSemanticException();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
Iterator iter = name.iterator();
|
||||
firstSymbol = name.getFirstToken();
|
||||
result = startingScope;
|
||||
if( firstSymbol.getType() == IToken.tCOLONCOLON )
|
||||
result = pst.getCompilationUnit();
|
||||
while( iter.hasNext() )
|
||||
{
|
||||
IToken t = (IToken)iter.next();
|
||||
if( t.getType() == IToken.tCOLONCOLON ) continue;
|
||||
IToken firstSymbol = null;
|
||||
try
|
||||
{
|
||||
if( name == null ) throw new ASTSemanticException();
|
||||
|
||||
switch( name.length() )
|
||||
{
|
||||
case 0:
|
||||
if( throwOnError )
|
||||
throw new ASTSemanticException();
|
||||
case 1:
|
||||
firstSymbol = name.getFirstToken();
|
||||
try
|
||||
{
|
||||
result = startingScope.lookup( firstSymbol.getImage());
|
||||
if( result != null )
|
||||
references.add( createReference( result, firstSymbol.getImage(), firstSymbol.getOffset() ));
|
||||
else
|
||||
throw new ASTSemanticException();
|
||||
}
|
||||
catch (ParserSymbolTableException e)
|
||||
{
|
||||
throw new ASTSemanticException();
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
firstSymbol = name.getFirstToken();
|
||||
if( firstSymbol.getType() != IToken.tCOLONCOLON )
|
||||
throw new ASTSemanticException();
|
||||
try
|
||||
{
|
||||
if( t == name.getLastToken() )
|
||||
result = ((IContainerSymbol)result).qualifiedLookup( t.getImage() );
|
||||
else
|
||||
result = ((IContainerSymbol)result).lookupNestedNameSpecifier( t.getImage() );
|
||||
references.add( createReference( result, t.getImage(), t.getOffset() ));
|
||||
result = pst.getCompilationUnit().lookup( name.getLastToken().getImage() );
|
||||
references.add( createReference( result, name.getLastToken().getImage(), name.getLastToken().getOffset() ));
|
||||
}
|
||||
catch( ParserSymbolTableException pste )
|
||||
catch( ParserSymbolTableException e)
|
||||
{
|
||||
throw new ASTSemanticException();
|
||||
throw new ASTSemanticException();
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
default:
|
||||
Iterator iter = name.iterator();
|
||||
firstSymbol = name.getFirstToken();
|
||||
result = startingScope;
|
||||
if( firstSymbol.getType() == IToken.tCOLONCOLON )
|
||||
result = pst.getCompilationUnit();
|
||||
while( iter.hasNext() )
|
||||
{
|
||||
IToken t = (IToken)iter.next();
|
||||
if( t.getType() == IToken.tCOLONCOLON ) continue;
|
||||
try
|
||||
{
|
||||
if( t == name.getLastToken() )
|
||||
result = ((IContainerSymbol)result).qualifiedLookup( t.getImage() );
|
||||
else
|
||||
result = ((IContainerSymbol)result).lookupNestedNameSpecifier( t.getImage() );
|
||||
references.add( createReference( result, t.getImage(), t.getOffset() ));
|
||||
}
|
||||
catch( ParserSymbolTableException pste )
|
||||
{
|
||||
throw new ASTSemanticException();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
catch( ASTSemanticException se )
|
||||
{
|
||||
if( throwOnError )
|
||||
throw se;
|
||||
return null;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
@ -165,7 +177,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
|
|||
{
|
||||
List references = new ArrayList();
|
||||
ISymbol symbol = lookupQualifiedName(
|
||||
scopeToSymbol( scope), duple, references );
|
||||
scopeToSymbol( scope), duple, references, true );
|
||||
|
||||
try {
|
||||
((ASTScope)scope).getContainerSymbol().addUsingDirective( (IContainerSymbol)symbol );
|
||||
|
@ -212,7 +224,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
|
|||
int endingOffset) throws ASTSemanticException
|
||||
{
|
||||
List references = new ArrayList();
|
||||
ISymbol symbol = lookupQualifiedName( scopeToSymbol(scope), name, references );
|
||||
ISymbol symbol = lookupQualifiedName( scopeToSymbol(scope), name, references, true );
|
||||
|
||||
try
|
||||
{
|
||||
|
@ -376,7 +388,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
|
|||
ITokenDuple containerSymbolName =
|
||||
name.getSubrange( 0, name.length() - 3 ); // -1 for index, -2 for last hop of qualified name
|
||||
currentScopeSymbol = (IContainerSymbol)lookupQualifiedName( currentScopeSymbol,
|
||||
containerSymbolName, references);
|
||||
containerSymbolName, references, true);
|
||||
if( currentScopeSymbol == null )
|
||||
throw new ASTSemanticException();
|
||||
}
|
||||
|
@ -610,17 +622,58 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
|
|||
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createExpression(org.eclipse.cdt.core.parser.ast.IASTExpression.Kind, org.eclipse.cdt.core.parser.ast.IASTExpression, org.eclipse.cdt.core.parser.ast.IASTExpression, org.eclipse.cdt.core.parser.ast.IASTExpression, java.lang.String, java.lang.String, java.lang.String, org.eclipse.cdt.core.parser.ast.IASTExpression.IASTNewExpressionDescriptor)
|
||||
*/
|
||||
public IASTExpression createExpression(
|
||||
IASTScope scope,
|
||||
Kind kind,
|
||||
IASTExpression lhs,
|
||||
IASTExpression rhs,
|
||||
IASTExpression thirdExpression,
|
||||
String id,
|
||||
String typeId,
|
||||
String literal,
|
||||
IASTNewExpressionDescriptor newDescriptor)
|
||||
IToken id,
|
||||
ITokenDuple typeId,
|
||||
String literal, IASTNewExpressionDescriptor newDescriptor) throws ASTSemanticException
|
||||
{
|
||||
// TODO FIX THIS
|
||||
return null;
|
||||
List references = new ArrayList();
|
||||
|
||||
getExpressionReferences(lhs, references);
|
||||
getExpressionReferences(rhs, references);
|
||||
getExpressionReferences(thirdExpression,references);
|
||||
|
||||
//look up id & add to references
|
||||
IContainerSymbol startingScope = scopeToSymbol( scope );
|
||||
|
||||
if( id != null )
|
||||
{
|
||||
try
|
||||
{
|
||||
ISymbol s = startingScope.lookup( id.getImage() );
|
||||
if( s != null )
|
||||
references.add( createReference( s, id.getImage(), id.getOffset() ));
|
||||
else
|
||||
throw new ASTSemanticException();
|
||||
}
|
||||
catch (ParserSymbolTableException e)
|
||||
{
|
||||
throw new ASTSemanticException();
|
||||
}
|
||||
}
|
||||
|
||||
//look up typeId & add to references
|
||||
if( typeId != null )
|
||||
lookupQualifiedName( startingScope, typeId, references, false );
|
||||
|
||||
//TODO add newDescriptor's references & add to references
|
||||
return new ASTExpression( kind, lhs, rhs, thirdExpression,
|
||||
id == null ? "" : id.getImage(),
|
||||
typeId == null ? "" : typeId.toString(),
|
||||
literal, newDescriptor, references);
|
||||
}
|
||||
|
||||
|
||||
protected void getExpressionReferences(IASTExpression expression, List references)
|
||||
{
|
||||
if( expression != null )
|
||||
{
|
||||
references.addAll( ((ASTExpression)expression).getReferences() );
|
||||
}
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createNewDescriptor()
|
||||
|
@ -630,17 +683,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
|
|||
// TODO FIX THIS
|
||||
return null;
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createInitializerClause(org.eclipse.cdt.core.parser.ast.IASTInitializerClause.Kind, org.eclipse.cdt.core.parser.ast.IASTExpression, java.util.List)
|
||||
*/
|
||||
public IASTInitializerClause createInitializerClause(
|
||||
org.eclipse.cdt.core.parser.ast.IASTInitializerClause.Kind kind,
|
||||
IASTExpression assignmentExpression,
|
||||
List initializerClauses)
|
||||
{
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createExceptionSpecification(java.util.List)
|
||||
*/
|
||||
|
@ -1263,7 +1306,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
|
|||
ITokenDuple containerSymbolName =
|
||||
name.getSubrange( 0, name.length() - 3 ); // -1 for index, -2 for last hop of qualified name
|
||||
currentScopeSymbol = (IContainerSymbol)lookupQualifiedName( currentScopeSymbol,
|
||||
containerSymbolName, references);
|
||||
containerSymbolName, references, true);
|
||||
if( currentScopeSymbol == null )
|
||||
throw new ASTSemanticException();
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
*/
|
||||
package org.eclipse.cdt.internal.core.parser.ast.quick;
|
||||
|
||||
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
|
||||
import org.eclipse.cdt.core.parser.ast.ExpressionEvaluationException;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTExpression;
|
||||
|
||||
|
@ -162,6 +163,27 @@ public class ASTExpression implements IASTExpression {
|
|||
throw new ExpressionEvaluationException();
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate#acceptElement(org.eclipse.cdt.core.parser.ISourceElementRequestor)
|
||||
*/
|
||||
public void acceptElement(ISourceElementRequestor requestor)
|
||||
{
|
||||
}
|
||||
|
||||
/* (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)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -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.quick;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.cdt.core.parser.ast.IASTExpression;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTInitializerClause;
|
||||
|
||||
/**
|
||||
* @author jcamelon
|
||||
*/
|
||||
public class ASTInitializerClause implements IASTInitializerClause {
|
||||
|
||||
private final IASTInitializerClause.Kind kind;
|
||||
private final IASTExpression assignmentExpression;
|
||||
private final List initializerClauses;
|
||||
/**
|
||||
* @param kind
|
||||
* @param assignmentExpression
|
||||
* @param initializerClauses
|
||||
*/
|
||||
public ASTInitializerClause(Kind kind, IASTExpression assignmentExpression, List initializerClauses) {
|
||||
this.kind = kind;
|
||||
this.assignmentExpression = assignmentExpression;
|
||||
this.initializerClauses = initializerClauses;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTInitializerClause#getKind()
|
||||
*/
|
||||
public Kind getKind() {
|
||||
return kind;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTInitializerClause#getInitializerList()
|
||||
*/
|
||||
public Iterator getInitializers() {
|
||||
return initializerClauses.iterator();
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTInitializerClause#getAssigmentExpression()
|
||||
*/
|
||||
public IASTExpression getAssigmentExpression() {
|
||||
return assignmentExpression;
|
||||
}
|
||||
|
||||
}
|
|
@ -12,6 +12,7 @@ package org.eclipse.cdt.internal.core.parser.ast.quick;
|
|||
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.cdt.core.parser.IToken;
|
||||
import org.eclipse.cdt.core.parser.ITokenDuple;
|
||||
import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility;
|
||||
import org.eclipse.cdt.core.parser.ast.ASTClassKind;
|
||||
|
@ -148,8 +149,8 @@ public class QuickParseASTFactory extends BaseASTFactory implements IASTFactory
|
|||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createExpression(org.eclipse.cdt.core.parser.ast.IASTExpression.ExpressionKind, org.eclipse.cdt.core.parser.ast.IASTExpression, org.eclipse.cdt.core.parser.ast.IASTExpression, java.lang.String, java.lang.String, java.lang.String)
|
||||
*/
|
||||
public IASTExpression createExpression(Kind kind, IASTExpression lhs, IASTExpression rhs, IASTExpression thirdExpression, String id, String typeId, String literal, IASTNewExpressionDescriptor newDescriptor) {
|
||||
return new ASTExpression( kind, lhs, rhs, thirdExpression, id, typeId, literal, newDescriptor );
|
||||
public IASTExpression createExpression(IASTScope scope, Kind kind, IASTExpression lhs, IASTExpression rhs, IASTExpression thirdExpression, IToken id, ITokenDuple typeId, String literal, IASTNewExpressionDescriptor newDescriptor) {
|
||||
return new ASTExpression( kind, lhs, rhs, thirdExpression, id == null ? "" : id.getImage(), typeId == null ? "" : typeId.toString(), literal, newDescriptor );
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
|
@ -160,13 +161,6 @@ public class QuickParseASTFactory extends BaseASTFactory implements IASTFactory
|
|||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createIASTInitializerClause()
|
||||
*/
|
||||
public IASTInitializerClause createInitializerClause(IASTInitializerClause.Kind kind, IASTExpression assignmentExpression, List initializerClauses) {
|
||||
return new ASTInitializerClause( kind, assignmentExpression, initializerClauses );
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createExceptionSpecification(java.util.List)
|
||||
*/
|
||||
public IASTExceptionSpecification createExceptionSpecification(List typeIds)
|
||||
|
|
Loading…
Add table
Reference in a new issue