1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

org.eclipse.cdt.core <BR>

&nbsp;&nbsp;Fixed https://bugs.eclipse.org/bugs/show_bug.cgi?id=50808. <BR>
&nbsp;&nbsp;Provided partial fix for https://bugs.eclipse.org/bugs/show_bug.cgi?id=50807. <BR>
&nbsp;&nbsp;Provided partial fix for https://bugs.eclipse.org/bugs/show_bug.cgi?id=52988. <BR>
&nbsp;&nbsp;Introduced EMPTY_STRING, a single constant that replaced > 100'S O literal "" in the code. <BR>
&nbsp;&nbsp;Updated IASTCompletionNode interface to provide better support for FUNCTION_REFERENCE and CONSTRUCTOR_REFERENCE. <BR>
&nbsp;&nbsp;Implemented IASTTypeId.getFullSignature() for both QUICK_PARSE and COMPLETE_PARSE. <BR>
&nbsp;&nbsp;Tweaked ASTNode.lookup() so that it would work for FUNCTION_REFERENCE. <BR><BR>
org.eclipse.cdt.ui <BR>
&nbsp;&nbsp;Updated CompletionEngine to use the extended IASTCompletionNode interface for FUNCTION_REFERENCE. <BR><BR>
org.eclipse.cdt.ui.tests <BR>
&nbsp;&nbsp;Updated CompletionFailedTest_ConstructorReference_Bug50808, renamed it to CompletionTest_ConstructorReference and moved it out of the failed tests folder. <BR>
&nbsp;&nbsp;Updated CompletionFailedTest_TypeDef_Bug52948, renamed it to CompletionTest_TypeDef_Prefix and moved it out of the failed tests folder. <BR>
&nbsp;&nbsp;Renamed CompletionTest_TypeDef_Bug52948 it to CompletionTest_TypeDef_NoPrefix. <BR>
&nbsp;&nbsp;Updated CompletionTest_SingleName_Parameter and renamed it to CompletionTest_FunctionReference_Prefix. <BR>
&nbsp;&nbsp;Updated CompletionFailedTest_FunctionReference_Bug50807, renamed it to CompletionTest_FunctionReference_NoPrefix and moved it out of the failed tests folder. <BR>
This commit is contained in:
John Camelon 2004-04-08 00:33:43 +00:00
parent d7664718ae
commit 5cc0a37e2b
30 changed files with 447 additions and 158 deletions

View file

@ -1,3 +1,12 @@
2004-04-07 John Camelon
Fixed https://bugs.eclipse.org/bugs/show_bug.cgi?id=50808.
Provided partial fix for https://bugs.eclipse.org/bugs/show_bug.cgi?id=50807.
Provided partial fix for https://bugs.eclipse.org/bugs/show_bug.cgi?id=52988.
Introduced EMPTY_STRING, a single constant that replaced > 100'S O literal "" in the code.
Updated IASTCompletionNode interface to provide better support for FUNCTION_REFERENCE and CONSTRUCTOR_REFERENCE.
Implemented IASTTypeId.getFullSignature() for both QUICK_PARSE and COMPLETE_PARSE.
Tweaked ASTNode.lookup() so that it would work for FUNCTION_REFERENCE.
2004-04-07 Andrew Niefer
fix lookup in parents when the parent is a deferred template instance, enables content assist on list (from <list>)

View file

@ -100,6 +100,13 @@ public interface IASTCompletionNode {
*/
public IASTNode getCompletionContext();
/**
* @return the name of the function/constructor being completed in
* CONSTRUCTOR_REFERENCE
* FUNCTION_REFERENCE
*/
public String getFunctionName();
/**
* @return the prefix
*/

View file

@ -232,7 +232,7 @@ public interface IASTFactory
public IASTCodeScope createNewCodeBlock(IASTScope scope);
public IASTTypeId createTypeId( IASTScope scope, IASTSimpleTypeSpecifier.Type kind, boolean isConst, boolean isVolatile, boolean isShort,
boolean isLong, boolean isSigned, boolean isUnsigned, boolean isTypename, ITokenDuple name, List pointerOps, List arrayMods ) throws ASTSemanticException;
boolean isLong, boolean isSigned, boolean isUnsigned, boolean isTypename, ITokenDuple name, List pointerOps, List arrayMods, String completeSignature ) throws ASTSemanticException;
/**
* @param astClassSpecifier
*/
@ -250,4 +250,12 @@ public interface IASTFactory
* @param log
*/
public void setLogger(IParserLogService log);
/**
* @param scope TODO
* @param expression
* @return
*/
public IASTNode expressionToASTNode(IASTScope scope, IASTExpression expression);
}

View file

@ -35,6 +35,6 @@ public interface IASTTypeId extends ISourceElementCallbackDelegate
public boolean isTypename();
public String getFullSignature() throws ASTNotImplementedException;
public String getFullSignature();
public ISymbol getTypeSymbol() throws ASTNotImplementedException;
}

View file

@ -56,7 +56,7 @@ public class CompletionParser extends ContextualParser implements IParser {
public IASTCompletionNode parse(int offset) {
scanner.setOffsetBoundary(offset);
translationUnit();
return new ASTCompletionNode( getCompletionKind(), getCompletionScope(), getCompletionContext(), getCompletionPrefix(), reconcileKeywords( getKeywordSet(), getCompletionPrefix() ) );
return new ASTCompletionNode( getCompletionKind(), getCompletionScope(), getCompletionContext(), getCompletionPrefix(), reconcileKeywords( getKeywordSet(), getCompletionPrefix() ), getCompletionFunctionName() );
}
/**

View file

@ -70,12 +70,13 @@ public class ContextualParser extends CompleteParser {
protected IASTNode context;
protected IToken finalToken;
protected Set keywordSet;
protected String functionOrConstructorName = "";
/**
* @return
*/
protected String getCompletionPrefix() {
return ( finalToken == null ? "" : finalToken.getImage() ); //$NON-NLS-1$
return ( finalToken == null ? EMPTY_STRING : finalToken.getImage() );
}
/**
@ -105,9 +106,16 @@ public class ContextualParser extends CompleteParser {
this.keywordSet = keywordSet;
setCompletionKind(kind);
setCompletionContext(null);
setCompletionFunctionName( );
setCompletionToken( new Token( IToken.tIDENTIFIER, prefix ) );
}
/**
*/
protected void setCompletionFunctionName() {
functionOrConstructorName = currentFunctionName;
}
protected void setCompletionKeywords(KeywordSets.Key key) {
this.keywordSet = KeywordSets.getKeywords( key, language );
}
@ -139,6 +147,7 @@ public class ContextualParser extends CompleteParser {
setCompletionKeywords(key);
setCompletionKind(kind);
setCompletionContext(node);
setCompletionFunctionName( );
checkEndOfFile();
}
@ -153,9 +162,12 @@ public class ContextualParser extends CompleteParser {
setCompletionContext( astFactory.lookupSymbolInContext( scope, duple ) );
} catch (ASTNotImplementedException e) {
}
setCompletionFunctionName();
}
private String currentFunctionName = EMPTY_STRING;
protected void setCompletionValues(IASTScope scope, CompletionKind kind, Key key, IASTExpression firstExpression, boolean isTemplate) throws EndOfFileException {
setCompletionValues(scope,kind,key, getCompletionContextForExpression(firstExpression,isTemplate) );
@ -171,6 +183,7 @@ public class ContextualParser extends CompleteParser {
protected void setCompletionValues(IASTScope scope, CompletionKind kind) throws EndOfFileException {
setCompletionScope(scope);
setCompletionKind(kind);
setCompletionFunctionName( );
checkEndOfFile();
}
/* (non-Javadoc)
@ -181,5 +194,21 @@ public class ContextualParser extends CompleteParser {
setCompletionScope(scope);
setCompletionKind(kind);
setCompletionContext(context);
setCompletionFunctionName( );
checkEndOfFile(); }
/**
* @return
*/
protected String getCompletionFunctionName() {
return functionOrConstructorName;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.ExpressionParser#setCurrentFunctionName(java.lang.String)
*/
protected void setCurrentFunctionName(String functionName) {
currentFunctionName = functionName;
}
}

View file

@ -50,6 +50,7 @@ import org.eclipse.cdt.internal.core.parser.util.TraceUtil;
*/
public class ExpressionParser implements IExpressionParser {
protected static final String EMPTY_STRING = ""; //$NON-NLS-1$
protected final IParserLogService log;
private static int FIRST_ERROR_OFFSET_UNSET = -1;
protected int firstErrorOffset = FIRST_ERROR_OFFSET_UNSET;
@ -59,6 +60,7 @@ public class ExpressionParser implements IExpressionParser {
private Stack templateIdScopes = null;
/**
* @param scanner2
* @param callback
@ -177,7 +179,7 @@ public class ExpressionParser implements IExpressionParser {
IASTTypeId typeId = typeId( scope, false, CompletionKind.TYPE_REFERENCE );
expression = astFactory.createExpression( scope, IASTExpression.Kind.POSTFIX_TYPEID_TYPEID,
null, null, null, typeId, null, "", null); //$NON-NLS-1$
null, null, null, typeId, null, EMPTY_STRING, null);
list.add( expression );
completedArg = true;
} catch( BacktrackException e ){
@ -202,7 +204,7 @@ public class ExpressionParser implements IExpressionParser {
try{
ITokenDuple nameDuple = name( scope, null );
expression = astFactory.createExpression( scope, IASTExpression.Kind.ID_EXPRESSION,
null, null, null, null, nameDuple, "", null); //$NON-NLS-1$
null, null, null, null, nameDuple, EMPTY_STRING, null);
list.add( expression );
continue;
} catch( ASTSemanticException e ){
@ -325,7 +327,9 @@ public class ExpressionParser implements IExpressionParser {
backup(mark);
throw backtrack;
case IToken.tIDENTIFIER :
prev = last;
last = consume();
setCompletionValues( scope, kind, first, prev );
last = consumeTemplateArguments(scope, last, argumentList);
if( last.getType() == IToken.tGT )
hasTemplateId = true;
@ -540,7 +544,7 @@ public class ExpressionParser implements IExpressionParser {
{
try
{
nameDuple = name(d.getScope(), CompletionKind.NO_SUCH_KIND );
nameDuple = name(d.getScope(), CompletionKind.USER_SPECIFIED_NAME );
}
catch( BacktrackException bt )
{
@ -550,7 +554,7 @@ public class ExpressionParser implements IExpressionParser {
}
if ( LT(1) == IToken.tSTAR)
{
result = consume(IToken.tSTAR); // tokenType = "*"
result = consume(IToken.tSTAR);
d.setPointerOperatorName(nameDuple);
@ -598,7 +602,7 @@ public class ExpressionParser implements IExpressionParser {
secondExpression,
null,
null,
null, "", null); //$NON-NLS-1$
null, EMPTY_STRING, null);
}
catch (ASTSemanticException e)
{
@ -616,6 +620,7 @@ public class ExpressionParser implements IExpressionParser {
* @throws BacktrackException
*/
protected IASTExpression assignmentExpression(IASTScope scope, CompletionKind kind) throws EndOfFileException, BacktrackException {
setCompletionValues(scope, kind, Key.EXPRESSION );
if (LT(1) == IToken.t_throw) {
return throwExpression(scope);
}
@ -691,6 +696,7 @@ public class ExpressionParser implements IExpressionParser {
*/
protected IASTExpression throwExpression(IASTScope scope) throws EndOfFileException, BacktrackException {
consume(IToken.t_throw);
setCompletionValues( scope, CompletionKind.SINGLE_NAME_REFERENCE, Key.EXPRESSION );
IASTExpression throwExpression = null;
try
{
@ -708,7 +714,7 @@ public class ExpressionParser implements IExpressionParser {
null,
null,
null,
null, "", null); //$NON-NLS-1$
null, EMPTY_STRING, null);
}
catch (ASTSemanticException e)
{
@ -741,7 +747,7 @@ public class ExpressionParser implements IExpressionParser {
secondExpression,
thirdExpression,
null,
null, "", null); //$NON-NLS-1$
null, EMPTY_STRING, null);
}
catch (ASTSemanticException e)
{
@ -776,7 +782,7 @@ public class ExpressionParser implements IExpressionParser {
secondExpression,
null,
null,
null, "", null); //$NON-NLS-1$
null, EMPTY_STRING, null);
}
catch (ASTSemanticException e)
{
@ -809,7 +815,7 @@ public class ExpressionParser implements IExpressionParser {
secondExpression,
null,
null,
null, "", null); //$NON-NLS-1$
null, EMPTY_STRING, null);
}
catch (ASTSemanticException e)
{
@ -843,7 +849,7 @@ public class ExpressionParser implements IExpressionParser {
secondExpression,
null,
null,
null, "", null); //$NON-NLS-1$
null, EMPTY_STRING, null);
}
catch (ASTSemanticException e)
{
@ -878,7 +884,7 @@ public class ExpressionParser implements IExpressionParser {
secondExpression,
null,
null,
null, "", null); //$NON-NLS-1$
null, EMPTY_STRING, null);
}
catch (ASTSemanticException e)
{
@ -912,7 +918,7 @@ public class ExpressionParser implements IExpressionParser {
secondExpression,
null,
null,
null, "", null); //$NON-NLS-1$
null, EMPTY_STRING, null);
}
catch (ASTSemanticException e)
{
@ -953,7 +959,7 @@ public class ExpressionParser implements IExpressionParser {
secondExpression,
null,
null,
null, "", null); //$NON-NLS-1$
null, EMPTY_STRING, null);
}
catch (ASTSemanticException e)
{
@ -1033,7 +1039,7 @@ public class ExpressionParser implements IExpressionParser {
secondExpression,
null,
null,
null, "", null); //$NON-NLS-1$
null, EMPTY_STRING, null);
}
catch (ASTSemanticException e)
{
@ -1077,7 +1083,7 @@ public class ExpressionParser implements IExpressionParser {
secondExpression,
null,
null,
null, "", null); //$NON-NLS-1$
null, EMPTY_STRING, null);
}
catch (ASTSemanticException e)
{
@ -1120,7 +1126,7 @@ public class ExpressionParser implements IExpressionParser {
secondExpression,
null,
null,
null, "", null); //$NON-NLS-1$
null, EMPTY_STRING, null);
}
catch (ASTSemanticException e)
{
@ -1174,7 +1180,7 @@ public class ExpressionParser implements IExpressionParser {
secondExpression,
null,
null,
null, "", null); //$NON-NLS-1$
null, EMPTY_STRING, null);
}
catch (ASTSemanticException e)
{
@ -1217,7 +1223,7 @@ public class ExpressionParser implements IExpressionParser {
secondExpression,
null,
null,
null, "", null); //$NON-NLS-1$
null, EMPTY_STRING, null);
}
catch (ASTSemanticException e)
{
@ -1263,7 +1269,7 @@ public class ExpressionParser implements IExpressionParser {
null,
null,
typeId,
null, "", null); //$NON-NLS-1$
null, EMPTY_STRING, null);
}
catch (ASTSemanticException e)
{
@ -1289,6 +1295,7 @@ public class ExpressionParser implements IExpressionParser {
*/
protected IASTTypeId typeId(IASTScope scope, boolean skipArrayModifiers, CompletionKind completionKind) throws EndOfFileException, BacktrackException {
IToken mark = mark();
IToken start = mark;
ITokenDuple name = null;
boolean isConst = false, isVolatile = false;
boolean isSigned = false, isUnsigned = false;
@ -1464,7 +1471,10 @@ public class ExpressionParser implements IExpressionParser {
try
{
return astFactory.createTypeId( scope, kind, isConst, isVolatile, isShort, isLong, isSigned, isUnsigned, isTypename, name, id.getPointerOperators(), id.getArrayModifiers());
String signature = "";
if( start != null && lastToken != null )
signature = new TokenDuple( start, lastToken ).toString();
return astFactory.createTypeId( scope, kind, isConst, isVolatile, isShort, isLong, isSigned, isUnsigned, isTypename, name, id.getPointerOperators(), id.getArrayModifiers(), signature);
}
catch (ASTSemanticException e)
{
@ -1484,9 +1494,11 @@ public class ExpressionParser implements IExpressionParser {
if (LT(1) == IToken.tCOLONCOLON)
{
// global scope
consume();
consume(IToken.tCOLONCOLON);
}
consume(IToken.t_delete);
boolean vectored = false;
if (LT(1) == IToken.tLBRACKET)
{
@ -1507,7 +1519,7 @@ public class ExpressionParser implements IExpressionParser {
null,
null,
null,
null, "", null); //$NON-NLS-1$
null, EMPTY_STRING, null);
}
catch (ASTSemanticException e)
{
@ -1539,7 +1551,7 @@ public class ExpressionParser implements IExpressionParser {
if (LT(1) == IToken.tCOLONCOLON)
{
// global scope
consume();
consume(IToken.tCOLONCOLON);
}
consume(IToken.t_new);
boolean typeIdInParen = false;
@ -1650,7 +1662,7 @@ public class ExpressionParser implements IExpressionParser {
return astFactory.createExpression(
scope, IASTExpression.Kind.NEW_TYPEID,
null, null, null, typeId, null,
"", astFactory.createNewDescriptor(newPlacementExpressions, newTypeIdExpressions, newInitializerExpressions)); //$NON-NLS-1$
EMPTY_STRING, astFactory.createNewDescriptor(newPlacementExpressions, newTypeIdExpressions, newInitializerExpressions));
}
catch (ASTSemanticException e)
{
@ -1694,11 +1706,14 @@ public class ExpressionParser implements IExpressionParser {
if (LT(1) == IToken.tLPAREN)
{
consume(IToken.tLPAREN);
setCurrentFunctionName( (( typeId != null ) ? typeId.getFullSignature() : EMPTY_STRING));
setCompletionValues( scope, CompletionKind.CONSTRUCTOR_REFERENCE );
if( templateIdScopes != null ){ templateIdScopes.push( new Integer( IToken.tLPAREN ) ); }
if (LT(1) != IToken.tRPAREN)
newInitializerExpressions.add(expression(scope, CompletionKind.SINGLE_NAME_REFERENCE));
if ( queryLookaheadCapability() && (LT(1) != IToken.tRPAREN))
newInitializerExpressions.add(expression(scope, CompletionKind.CONSTRUCTOR_REFERENCE));
setCurrentFunctionName( EMPTY_STRING );
consume(IToken.tRPAREN);
if( templateIdScopes != null ){ templateIdScopes.pop(); }
}
@ -1708,7 +1723,7 @@ public class ExpressionParser implements IExpressionParser {
return astFactory.createExpression(
scope, IASTExpression.Kind.NEW_TYPEID,
null, null, null, typeId, null,
"", astFactory.createNewDescriptor(newPlacementExpressions, newTypeIdExpressions, newInitializerExpressions)); //$NON-NLS-1$
EMPTY_STRING, astFactory.createNewDescriptor(newPlacementExpressions, newTypeIdExpressions, newInitializerExpressions));
}
catch (ASTSemanticException e)
{
@ -1720,6 +1735,12 @@ public class ExpressionParser implements IExpressionParser {
}
/**
* @param functionName
*/
protected void setCurrentFunctionName(String functionName ) {
}
/**
* @param expression
* @throws BacktrackException
@ -1792,7 +1813,7 @@ public class ExpressionParser implements IExpressionParser {
null,
null,
d,
null, "", null); //$NON-NLS-1$
null, EMPTY_STRING, null);
}
catch (ASTSemanticException e)
{
@ -1811,7 +1832,7 @@ public class ExpressionParser implements IExpressionParser {
null,
null,
null,
null, "", null); //$NON-NLS-1$
null, EMPTY_STRING, null);
}
catch (ASTSemanticException e1)
{
@ -1851,7 +1872,8 @@ public class ExpressionParser implements IExpressionParser {
protected IASTExpression postfixExpression(IASTScope scope, CompletionKind kind) throws EndOfFileException, BacktrackException {
IASTExpression firstExpression = null;
boolean isTemplate = false;
checkEndOfFile();
setCompletionValues( scope, kind, Key.EXPRESSION );
switch (LT(1))
{
case IToken.t_typename :
@ -1889,7 +1911,7 @@ public class ExpressionParser implements IExpressionParser {
null,
null,
nestedName,
"", //$NON-NLS-1$
EMPTY_STRING,
null );
} catch (ASTSemanticException ase ) {
throw backtrack;
@ -1999,7 +2021,7 @@ public class ExpressionParser implements IExpressionParser {
null,
null,
typeId,
null, "", null); //$NON-NLS-1$
null, EMPTY_STRING, null);
}
catch (ASTSemanticException e6)
{
@ -2020,7 +2042,7 @@ public class ExpressionParser implements IExpressionParser {
{
case IToken.tLBRACKET :
// array access
consume();
consume(IToken.tLBRACKET);
if( templateIdScopes != null ){ templateIdScopes.push( new Integer( IToken.tLBRACKET ) ); }
secondExpression = expression(scope, CompletionKind.SINGLE_NAME_REFERENCE);
consume(IToken.tRBRACKET);
@ -2035,7 +2057,7 @@ public class ExpressionParser implements IExpressionParser {
secondExpression,
null,
null,
null, "", null); //$NON-NLS-1$
null, EMPTY_STRING, null);
}
catch (ASTSemanticException e2)
{
@ -2049,8 +2071,23 @@ public class ExpressionParser implements IExpressionParser {
case IToken.tLPAREN :
// function call
consume(IToken.tLPAREN);
IASTNode context = null;
if( firstExpression != null )
{
if( firstExpression.getExpressionKind() == IASTExpression.Kind.ID_EXPRESSION )
setCurrentFunctionName( firstExpression.getIdExpression() );
else if( firstExpression.getRHSExpression() != null &&
firstExpression.getRHSExpression().getIdExpression() != null )
{
setCurrentFunctionName( firstExpression.getRHSExpression().getIdExpression() );
context = astFactory.expressionToASTNode( scope, firstExpression.getLHSExpression() );
}
}
if( templateIdScopes != null ){ templateIdScopes.push( new Integer( IToken.tLPAREN ) ); }
secondExpression = expression(scope, CompletionKind.SINGLE_NAME_REFERENCE);
setCompletionValues(scope, CompletionKind.FUNCTION_REFERENCE, context );
secondExpression = expression(scope, CompletionKind.FUNCTION_REFERENCE);
setCurrentFunctionName( EMPTY_STRING );
consume(IToken.tRPAREN);
if( templateIdScopes != null ){ templateIdScopes.pop(); }
try
@ -2063,7 +2100,7 @@ public class ExpressionParser implements IExpressionParser {
secondExpression,
null,
null,
null, "", null); //$NON-NLS-1$
null, EMPTY_STRING, null);
}
catch (ASTSemanticException e3)
{
@ -2075,7 +2112,7 @@ public class ExpressionParser implements IExpressionParser {
}
break;
case IToken.tINCR :
consume();
consume(IToken.tINCR);
try
{
firstExpression =
@ -2086,7 +2123,7 @@ public class ExpressionParser implements IExpressionParser {
null,
null,
null,
null, "", null); //$NON-NLS-1$
null, EMPTY_STRING, null);
}
catch (ASTSemanticException e1)
{
@ -2109,7 +2146,7 @@ public class ExpressionParser implements IExpressionParser {
null,
null,
null,
null, "", null); //$NON-NLS-1$
null, EMPTY_STRING, null);
}
catch (ASTSemanticException e4)
{
@ -2150,7 +2187,7 @@ public class ExpressionParser implements IExpressionParser {
secondExpression,
null,
null,
null, "", null); //$NON-NLS-1$
null, EMPTY_STRING, null);
}
catch (ASTSemanticException e5)
{
@ -2190,7 +2227,7 @@ public class ExpressionParser implements IExpressionParser {
secondExpression,
null,
null,
null, "", null); //$NON-NLS-1$
null, EMPTY_STRING, null);
}
catch (ASTSemanticException e)
{
@ -2234,9 +2271,11 @@ public class ExpressionParser implements IExpressionParser {
}
protected IASTExpression simpleTypeConstructorExpression(IASTScope scope, Kind type ) throws EndOfFileException, BacktrackException {
consume();
String typeName = consume().getImage();
consume(IToken.tLPAREN);
IASTExpression inside = expression(scope, CompletionKind.SINGLE_NAME_REFERENCE);
setCurrentFunctionName( typeName );
IASTExpression inside = expression(scope, CompletionKind.CONSTRUCTOR_REFERENCE);
setCurrentFunctionName( EMPTY_STRING );
consume(IToken.tRPAREN);
try
{
@ -2247,7 +2286,7 @@ public class ExpressionParser implements IExpressionParser {
null,
null,
null,
null, "", null); //$NON-NLS-1$
null, EMPTY_STRING, null);
}
catch (ASTSemanticException e)
{
@ -2379,7 +2418,7 @@ public class ExpressionParser implements IExpressionParser {
null,
null,
null,
null, "", null); //$NON-NLS-1$
null, EMPTY_STRING, null);
}
catch (ASTSemanticException e7)
{
@ -2403,7 +2442,7 @@ public class ExpressionParser implements IExpressionParser {
null,
null,
null,
null, "", null); //$NON-NLS-1$
null, EMPTY_STRING, null);
}
catch (ASTSemanticException e6)
{
@ -2462,7 +2501,7 @@ public class ExpressionParser implements IExpressionParser {
null,
null,
null,
duple, "", null); //$NON-NLS-1$
duple, EMPTY_STRING, null);
}
catch (ASTSemanticException e8)
{
@ -2481,7 +2520,7 @@ public class ExpressionParser implements IExpressionParser {
null,
null,
null,
null, "", null); //$NON-NLS-1$
null, EMPTY_STRING, null);
} catch (ASTSemanticException e9) {
// TODO Auto-generated catch block
e9.printStackTrace();
@ -2522,7 +2561,7 @@ public class ExpressionParser implements IExpressionParser {
catch (ScannerException e)
{
TraceUtil.outputTrace(log, "ScannerException thrown : ", e.getProblem(), null, null, null); //$NON-NLS-1$
log.errorLog( "Scanner Exception: " + e.getProblem().getMessage()); //$NON-NLS-1$h
log.errorLog( "Scanner Exception: " + e.getProblem().getMessage()); //$NON-NLS-1$
failParse();
return fetchToken();
}
@ -2643,7 +2682,7 @@ public class ExpressionParser implements IExpressionParser {
assignmentExpression,
null,
null,
null, "", null); //$NON-NLS-1$
null, EMPTY_STRING, null);
}
catch (ASTSemanticException e)
{
@ -2678,7 +2717,7 @@ public class ExpressionParser implements IExpressionParser {
null,
null,
null,
null, "", null); //$NON-NLS-1$
null, EMPTY_STRING, null);
}
catch (ASTSemanticException e)
{
@ -2706,7 +2745,7 @@ public class ExpressionParser implements IExpressionParser {
null,
null,
duple,
null, "", null); //$NON-NLS-1$
null, EMPTY_STRING, null);
}
catch (ASTSemanticException e)
{

View file

@ -3046,7 +3046,7 @@ public abstract class Parser extends ExpressionParser implements IParser
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.ExpressionParser#parserTimeout()
*/
protected boolean parserTimeout() {
protected final boolean parserTimeout() {
return requestor.parserTimeout();
}
/* (non-Javadoc)

View file

@ -27,14 +27,16 @@ public class ASTCompletionNode implements IASTCompletionNode {
private final IASTScope scope;
private final CompletionKind kind;
private final Set keywordSet;
private final String functionName;
public ASTCompletionNode( CompletionKind kind, IASTScope scope, IASTNode context, String prefix, Set keywords )
public ASTCompletionNode( CompletionKind kind, IASTScope scope, IASTNode context, String prefix, Set keywords, String functionName )
{
this.kind = kind;
this.context = context;
this.scope = scope;
this.prefix = prefix;
this.keywordSet = keywords;
this.functionName = functionName;
}
/* (non-Javadoc)
@ -80,4 +82,11 @@ public class ASTCompletionNode implements IASTCompletionNode {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTCompletionNode#getFunctionName()
*/
public String getFunctionName() {
return functionName;
}
}

View file

@ -15,8 +15,8 @@ import java.util.List;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ITokenDuple;
import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException;
import org.eclipse.cdt.core.parser.ast.ASTExpressionEvaluationException;
import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException;
import org.eclipse.cdt.core.parser.ast.IASTExpression;
import org.eclipse.cdt.core.parser.ast.IASTReference;
import org.eclipse.cdt.core.parser.ast.IASTTypeId;
@ -37,6 +37,7 @@ public class ASTExpression implements IASTExpression
private final IASTNewExpressionDescriptor newDescriptor;
private final List references;
private ExpressionResult resultType;
private String stringRepresentation;
/**
*
*/
@ -257,4 +258,54 @@ public class ASTExpression implements IASTExpression
}
}
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
public String toString() {
if( stringRepresentation == null )
{
StringBuffer buffer = new StringBuffer();
buffer.append( "ASTExpression w/Kind=" ); //$NON-NLS-1$
buffer.append( kind.getKindName() );
if( !literal.equals( "" )) //$NON-NLS-1$
{
buffer.append( " LITERAL="); //$NON-NLS-1$
buffer.append( literal );
}
if( idExpressionDuple != null )
{
buffer.append( " IDEXPRESSION="); //$NON-NLS-1$
buffer.append( idExpressionDuple.toString() );
}
if( typeId != null )
{
buffer.append( " TYPEID="); //$NON-NLS-1$
buffer.append( typeId.getFullSignature() );
}
if( lhs != null )
{
buffer.append( "\n\tLHS=**"); //$NON-NLS-1$
buffer.append( lhs.toString() );
buffer.append( "**");//$NON-NLS-1$
}
if( rhs != null )
{
buffer.append( "\n\tRHS=="); //$NON-NLS-1$
buffer.append( rhs.toString() );
buffer.append( "==");//$NON-NLS-1$
}
if( thirdExpression != null )
{
buffer.append( "\n\t3rd Expression =::"); //$NON-NLS-1$
buffer.append( thirdExpression.toString() );
buffer.append( "::");//$NON-NLS-1$
}
stringRepresentation = buffer.toString();
}
return stringRepresentation;
}
}

View file

@ -18,6 +18,7 @@ import org.eclipse.cdt.core.parser.ParserMode;
import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException;
import org.eclipse.cdt.core.parser.ast.IASTNode;
import org.eclipse.cdt.core.parser.ast.IASTTypedefDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTVariable;
import org.eclipse.cdt.internal.core.parser.ast.SymbolIterator;
import org.eclipse.cdt.internal.core.parser.pst.IContainerSymbol;
import org.eclipse.cdt.internal.core.parser.pst.IExtensibleSymbol;
@ -55,7 +56,11 @@ public class ASTNode implements IASTNode {
ISymbol typedef = ((ISymbolOwner)context).getSymbol();
TypeInfo info = typedef.getTypeInfo().getFinalType();
sym = info.getTypeSymbol();
} else {
} else if ( context instanceof IASTVariable ){
sym = ((ISymbolOwner)context).getSymbol().getTypeSymbol(); // good enough for now
}
else
{
sym = (IContainerSymbol) ((ISymbolOwner)context).getSymbol();
}

View file

@ -105,7 +105,7 @@ import org.eclipse.cdt.internal.core.parser.util.TraceUtil;
*/
public class CompleteParseASTFactory extends BaseASTFactory implements IASTFactory
{
protected static final String EMPTY_STRING = ""; //$NON-NLS-1$
private final static List SUBSCRIPT;
private final static IProblemFactory problemFactory = new ASTProblemFactory();
//private final IASTExtensionFactory extensionFactory;
@ -558,7 +558,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
IContainerSymbol pstScope = scopeToSymbol(scope);
ISymbol namespaceSymbol = null;
if( ! identifier.equals( "" ) ) //$NON-NLS-1$
if( ! identifier.equals( EMPTY_STRING ) )
{
try
{
@ -578,7 +578,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
else
{
namespaceSymbol = pst.newContainerSymbol( identifier, TypeInfo.t_namespace );
if( identifier.equals( "" ) ) //$NON-NLS-1$
if( identifier.equals( EMPTY_STRING ) )
namespaceSymbol.setContainingSymbol( pstScope );
else
{
@ -672,7 +672,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
TypeInfo.eType pstType = classKindToTypeInfo(kind);
List references = new ArrayList();
String newSymbolName = ""; //$NON-NLS-1$
String newSymbolName = EMPTY_STRING;
List templateIdArgList = null;
boolean isTemplateId = false;
@ -702,9 +702,8 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
newSymbolName = nameToken.getImage();
}
int i = 0;
ISymbol classSymbol = null;
if( !newSymbolName.equals("") && !isTemplateId ){ //$NON-NLS-1$
if( !newSymbolName.equals(EMPTY_STRING) && !isTemplateId ){
try
{
classSymbol = currentScopeSymbol.lookupMemberForDefinition(newSymbolName);
@ -1011,7 +1010,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
idExpression.toString()
);
}
else if( literal != null && !literal.equals( "" )) //$NON-NLS-1$
else if( literal != null && !literal.equals( EMPTY_STRING ))
{
TraceUtil.outputTrace(
logService,
@ -1264,7 +1263,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
ExpressionResult result = null;
TypeInfo info = new TypeInfo();
if( literal != null && !literal.equals("") ){ //$NON-NLS-1$
if( literal != null && !literal.equals(EMPTY_STRING) ){
info.setDefault( literal );
}
// types that resolve to void
@ -1704,7 +1703,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
getExpressionReferences( expressionList, references );
return new ASTConstructorMemberInitializer(
expressionList,
duple == null ? "" : duple.toString(), //$NON-NLS-1$
duple == null ? EMPTY_STRING : duple.toString(),
duple == null ? 0 : duple.getFirstToken().getOffset(),
references, requireReferenceResolution );
}
@ -1744,7 +1743,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
type = TypeInfo.t__Bool;
List references = new ArrayList();
ISymbol s = pst.newSymbol( "", type ); //$NON-NLS-1$
ISymbol s = pst.newSymbol( EMPTY_STRING, type );
if( kind == IASTSimpleTypeSpecifier.Type.CLASS_OR_TYPENAME )
{
// lookup the duple
@ -2078,7 +2077,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
newReferences.add( createReference( xrefSymbol, elab.getName(), elab.getNameOffset()) );
}
String paramName = ""; //$NON-NLS-1$
String paramName = EMPTY_STRING;
if(absDecl instanceof IASTParameterDeclaration){
paramName = ((IASTParameterDeclaration)absDecl).getName();
}
@ -2313,7 +2312,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
while( initializers.hasNext())
{
IASTConstructorMemberInitializer initializer = (IASTConstructorMemberInitializer)initializers.next();
if( !initializer.getName().equals( "") && //$NON-NLS-1$
if( !initializer.getName().equals( EMPTY_STRING) &&
initializer instanceof ASTConstructorMemberInitializer &&
((ASTConstructorMemberInitializer)initializer).requiresNameResolution() )
{
@ -2778,7 +2777,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
ISymbol newSymbol = pst.newSymbol( name, TypeInfo.t_type);
newSymbol.getTypeInfo().setBit( true,TypeInfo.isTypedef );
ISymbol typeSymbol = cloneSimpleTypeSymbol( "", mapping, new ArrayList() ); //$NON-NLS-1$
ISymbol typeSymbol = cloneSimpleTypeSymbol( EMPTY_STRING, mapping, new ArrayList() );
setPointerOperators( typeSymbol, mapping.getPointerOperators(), mapping.getArrayModifiers() );
newSymbol.setTypeSymbol( typeSymbol );
@ -2821,7 +2820,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
TypeInfo.eType pstType = classKindToTypeInfo(kind);
List references = new ArrayList();
IToken nameToken = name.getFirstToken();
String newSymbolName = ""; //$NON-NLS-1$
String newSymbolName = EMPTY_STRING;
List templateIdArgList = null;
boolean isTemplateId = false;
if (name.getSegmentCount() != 1) // qualified name
@ -2986,7 +2985,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
public IASTCodeScope createNewCodeBlock(IASTScope scope) {
IContainerSymbol symbol = scopeToSymbol( scope );
IContainerSymbol newScope = pst.newContainerSymbol("", TypeInfo.t_block); //$NON-NLS-1$
IContainerSymbol newScope = pst.newContainerSymbol(EMPTY_STRING, TypeInfo.t_block);
newScope.setContainingSymbol(symbol);
ASTCodeScope codeScope = new ASTCodeScope( newScope );
@ -3028,10 +3027,10 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createTypeId(org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier.Type, org.eclipse.cdt.core.parser.ITokenDuple, java.util.List, java.util.List)
*/
public IASTTypeId createTypeId(IASTScope scope, Type kind, boolean isConst, boolean isVolatile, boolean isShort,
boolean isLong, boolean isSigned, boolean isUnsigned, boolean isTypename, ITokenDuple name, List pointerOps, List arrayMods) throws ASTSemanticException
boolean isLong, boolean isSigned, boolean isUnsigned, boolean isTypename, ITokenDuple name, List pointerOps, List arrayMods, String completeSignature) throws ASTSemanticException
{
ASTTypeId result =
new ASTTypeId( kind, name, pointerOps, arrayMods, "", //TODO //$NON-NLS-1$
new ASTTypeId( kind, name, pointerOps, arrayMods, completeSignature,
isConst, isVolatile, isUnsigned, isSigned, isShort, isLong, isTypename );
result.setTypeSymbol( createSymbolForTypeId( scope, result ) );
return result;
@ -3071,7 +3070,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
if( id == null ) return null;
ASTTypeId typeId = (ASTTypeId)id;
ISymbol result = pst.newSymbol( "", CompleteParseASTFactory.getTypeKind(id)); //$NON-NLS-1$
ISymbol result = pst.newSymbol( EMPTY_STRING, CompleteParseASTFactory.getTypeKind(id));
result.getTypeInfo().setBit( id.isConst(), TypeInfo.isConst );
result.getTypeInfo().setBit( id.isVolatile(), TypeInfo.isVolatile );
@ -3177,4 +3176,22 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto
if ( s == null ) return null;
return s.getASTExtension().getPrimaryDeclaration();
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#getNodeForThisExpression(org.eclipse.cdt.core.parser.ast.IASTExpression)
*/
public IASTNode expressionToASTNode(IASTScope scope, IASTExpression expression) {
if( expression == null ) return null;
if( expression.getExpressionKind() == IASTExpression.Kind.ID_EXPRESSION )
if( expression instanceof ASTExpression)
{
try {
return lookupSymbolInContext(scope, ((ASTExpression)expression).getIdExpressionTokenDuple());
} catch (ASTNotImplementedException e) {
// assert false : e;
}
}
return null;
}
}

View file

@ -875,7 +875,7 @@ public class ExpressionParseASTFactory extends BaseASTFactory implements IASTFac
boolean isTypename,
ITokenDuple name,
List pointerOps,
List arrayMods)
List arrayMods, String completeSignature)
throws ASTSemanticException {
// TODO Auto-generated method stub
return null;
@ -900,7 +900,6 @@ public class ExpressionParseASTFactory extends BaseASTFactory implements IASTFac
public IASTNode getCompletionContext(
Kind kind,
IASTExpression expression) {
// TODO Auto-generated method stub
return null;
}
@ -912,6 +911,13 @@ public class ExpressionParseASTFactory extends BaseASTFactory implements IASTFac
*/
public IASTNode lookupSymbolInContext(IASTScope scope, ITokenDuple duple)
throws ASTNotImplementedException {
return null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#getNodeForThisExpression(org.eclipse.cdt.core.parser.ast.IASTExpression)
*/
public IASTNode expressionToASTNode(IASTScope scope, IASTExpression expression) {
// TODO Auto-generated method stub
return null;
}

View file

@ -36,6 +36,7 @@ public class ASTTypeId implements IASTTypeId
private final String name;
private final List pointerOps;
private final List arrayMods;
private final String completeSignature;
/**
* @param kind
* @param string
@ -43,7 +44,7 @@ public class ASTTypeId implements IASTTypeId
* @param arrayMods
*/
public ASTTypeId(Type kind, String string, List pointerOps, List arrayMods, boolean isConst, boolean isVolatile,
boolean isUnsigned, boolean isSigned, boolean isShort, boolean isLong, boolean isTypeName)
boolean isUnsigned, boolean isSigned, boolean isShort, boolean isLong, boolean isTypeName, String completeSignature)
{
this.kind = kind;
this.name = string;
@ -56,6 +57,7 @@ public class ASTTypeId implements IASTTypeId
this.isShort =isShort;
this.isLong =isLong;
this.isConst =isConst;
this.completeSignature = completeSignature;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTTypeId#getKind()
@ -88,9 +90,9 @@ public class ASTTypeId implements IASTTypeId
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTTypeId#getFullSignature()
*/
public String getFullSignature() throws ASTNotImplementedException
public String getFullSignature()
{
throw new ASTNotImplementedException();
return completeSignature;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTTypeId#createTypeSymbol(org.eclipse.cdt.core.parser.ast.IASTFactory)

View file

@ -329,10 +329,10 @@ public class QuickParseASTFactory extends BaseASTFactory implements IASTFactory
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#createTypeId(org.eclipse.cdt.core.parser.ast.IASTSimpleTypeSpecifier.Type, org.eclipse.cdt.core.parser.ITokenDuple, java.util.List, java.util.List)
*/
public IASTTypeId createTypeId(IASTScope scope, Type kind, boolean isConst, boolean isVolatile, boolean isShort,
boolean isLong, boolean isSigned, boolean isUnsigned, boolean isTypename, ITokenDuple name, List pointerOps, List arrayMods)
boolean isLong, boolean isSigned, boolean isUnsigned, boolean isTypename, ITokenDuple name, List pointerOps, List arrayMods, String completeSignature)
{
return new ASTTypeId( kind, name == null ? "" : name.toString(), pointerOps, arrayMods, isConst, //$NON-NLS-1$
isVolatile, isUnsigned, isSigned, isShort, isLong, isTypename );
isVolatile, isUnsigned, isSigned, isShort, isLong, isTypename, completeSignature );
}
/* (non-Javadoc)
@ -363,4 +363,11 @@ public class QuickParseASTFactory extends BaseASTFactory implements IASTFactory
public IASTNode lookupSymbolInContext(IASTScope scope, ITokenDuple duple) throws ASTNotImplementedException {
throw new ASTNotImplementedException();
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ast.IASTFactory#getNodeForThisExpression(org.eclipse.cdt.core.parser.ast.IASTExpression)
*/
public IASTNode expressionToASTNode(IASTScope scope, IASTExpression expression) {
return null;
}
}

View file

@ -41,8 +41,8 @@ public abstract class BaseProblemFactory {
* @param file
* @return
*/
private String createInternalMessage(int id, String arg, int line, char[] file)
{
// private String createInternalMessage(int id, String arg, int line, char[] file)
// {
// if( checkBitmask( id, IProblem.INTERNAL_RELATED ))
// {
// StringBuffer buffer = new StringBuffer();
@ -53,7 +53,7 @@ public abstract class BaseProblemFactory {
//
// return buffer.toString();
// }
return null;
}
// return null;
// }
}

View file

@ -712,6 +712,7 @@ public class Scanner implements IScanner {
private boolean atEOF = false;
private boolean tokenizingMacroReplacementList = false;
protected static final String EMPTY_STRING = ""; //$NON-NLS-1$
public void setTokenizingMacroReplacementList( boolean mr ){
tokenizingMacroReplacementList = mr;
}
@ -1457,12 +1458,12 @@ public class Scanner implements IScanner {
if( v.size() == 4 )
{
for( int i = 0; i < 4; ++i )
buff.append( (char)((Character)v.get(i)).charValue());
buff.append( ((Character)v.get(i)).charValue());
}
else
{
for( int i = v.size() - 1; i >= 0; --i )
ungetChar( (char) ((Character)v.get(i)).charValue() );
ungetChar( ((Character)v.get(i)).charValue() );
}
return buff;
}
@ -2018,7 +2019,7 @@ public class Scanner implements IScanner {
*/
protected void handleCompletionOnDefinition(String definition) throws EndOfFileException {
IASTCompletionNode node = new ASTCompletionNode( IASTCompletionNode.CompletionKind.MACRO_REFERENCE,
null, null, definition, KeywordSets.getKeywords(KeywordSets.Key.EMPTY, scannerData.getLanguage()) );
null, null, definition, KeywordSets.getKeywords(KeywordSets.Key.EMPTY, scannerData.getLanguage()), EMPTY_STRING );
throwEOF( node );
}
@ -2077,19 +2078,19 @@ public class Scanner implements IScanner {
IASTCompletionNode node = new ASTCompletionNode( kind,
null, null, prefix,
KeywordSets.getKeywords(((kind == IASTCompletionNode.CompletionKind.NO_SUCH_KIND )? KeywordSets.Key.EMPTY : KeywordSets.Key.MACRO), scannerData.getLanguage()) );
KeywordSets.getKeywords(((kind == IASTCompletionNode.CompletionKind.NO_SUCH_KIND )? KeywordSets.Key.EMPTY : KeywordSets.Key.MACRO), scannerData.getLanguage()), EMPTY_STRING );
throwEOF( node );
}
protected void handleInvalidCompletion() throws EndOfFileException
{
throwEOF( new ASTCompletionNode( IASTCompletionNode.CompletionKind.UNREACHABLE_CODE, null, null, "", KeywordSets.getKeywords(KeywordSets.Key.EMPTY, scannerData.getLanguage()) )); //$NON-NLS-1$
throwEOF( new ASTCompletionNode( IASTCompletionNode.CompletionKind.UNREACHABLE_CODE, null, null, EMPTY_STRING, KeywordSets.getKeywords(KeywordSets.Key.EMPTY, scannerData.getLanguage()) , EMPTY_STRING));
}
protected void handleCompletionOnPreprocessorDirective( String prefix ) throws EndOfFileException
{
throwEOF( new ASTCompletionNode( IASTCompletionNode.CompletionKind.NO_SUCH_KIND, null, null, prefix, KeywordSets.getKeywords(KeywordSets.Key.PP_DIRECTIVE, scannerData.getLanguage() )));
throwEOF( new ASTCompletionNode( IASTCompletionNode.CompletionKind.NO_SUCH_KIND, null, null, prefix, KeywordSets.getKeywords(KeywordSets.Key.PP_DIRECTIVE, scannerData.getLanguage() ), EMPTY_STRING));
}
/**
* @param key

View file

@ -38,6 +38,7 @@ public class KeywordSets {
public static final Key NAMESPACE_ONLY = new Key(6);
public static final Key MACRO = new Key( 7 );
public static final Key PP_DIRECTIVE = new Key( 8 );
public static final Key EXPRESSION = new Key( 9 );
/**
* @param enumValue
*/
@ -69,7 +70,8 @@ public class KeywordSets {
return MACRO_ONLY;
if( kind == Key.PP_DIRECTIVE )
return PP_DIRECTIVES;
if( kind == Key.EXPRESSION )
return (Set) EXPRESSION.get( language );
//TODO finish this
return null;
}
@ -259,4 +261,48 @@ public class KeywordSets {
PP_DIRECTIVES.add(Directives.POUND_PRAGMA);
PP_DIRECTIVES.add(Directives.POUND_ELIF);
}
private static final Set EXPRESSION_C;
static
{
EXPRESSION_C = new TreeSet();
EXPRESSION_C.add( Keywords.CHAR );
EXPRESSION_C.add( Keywords.WCHAR_T);
EXPRESSION_C.add( Keywords.SHORT);
EXPRESSION_C.add( Keywords.INT);
EXPRESSION_C.add( Keywords.LONG);
EXPRESSION_C.add( Keywords.SIGNED);
EXPRESSION_C.add( Keywords.UNSIGNED);
EXPRESSION_C.add( Keywords.FLOAT);
EXPRESSION_C.add( Keywords.DOUBLE);
}
private static final Set EXPRESSION_CPP;
static
{
EXPRESSION_CPP = new TreeSet(EXPRESSION_C);
EXPRESSION_CPP.add( Keywords.BOOL );
EXPRESSION_CPP.add( Keywords.NEW );
EXPRESSION_CPP.add( Keywords.DELETE );
EXPRESSION_CPP.add( Keywords.TYPENAME );
EXPRESSION_CPP.add( Keywords.DYNAMIC_CAST );
EXPRESSION_CPP.add( Keywords.STATIC_CAST );
EXPRESSION_CPP.add( Keywords.REINTERPRET_CAST );
EXPRESSION_CPP.add( Keywords.CONST_CAST );
EXPRESSION_CPP.add( Keywords.TYPEID );
EXPRESSION_CPP.add( Keywords.TRUE );
EXPRESSION_CPP.add( Keywords.FALSE );
EXPRESSION_CPP.add( Keywords.THIS );
EXPRESSION_CPP.add( Keywords.OPERATOR );
EXPRESSION_CPP.add( Keywords.THROW );
}
private static final Hashtable EXPRESSION;
static
{
EXPRESSION = new Hashtable();
EXPRESSION.put( ParserLanguage.CPP, EXPRESSION_CPP );
EXPRESSION.put( ParserLanguage.C, EXPRESSION_C );
}
}

View file

@ -49,4 +49,17 @@ public class TraceUtil {
log.traceLog( preface );
}
}
/**
* @param logService
* @param preface
* @param data
*/
public static void outputTrace(IParserLogService logService, String preface, String data) {
if( logService.isTracing() ) {
StringBuffer buffer = new StringBuffer();
if( preface != null ) buffer.append( preface );
if( data != null ) buffer.append( data );
logService.traceLog( buffer.toString() );
}
}
}

View file

@ -1,3 +1,10 @@
2004-04-07 John Camelon
Updated CompletionFailedTest_ConstructorReference_Bug50808, renamed it to CompletionTest_ConstructorReference and moved it out of the failed tests folder.
Updated CompletionFailedTest_TypeDef_Bug52948, renamed it to CompletionTest_TypeDef_Prefix and moved it out of the failed tests folder.
Renamed CompletionTest_TypeDef_Bug52948 it to CompletionTest_TypeDef_NoPrefix.
Updated CompletionTest_SingleName_Parameter and renamed it to CompletionTest_FunctionReference_Prefix.
Updated CompletionFailedTest_FunctionReference_Bug50807, renamed it to CompletionTest_FunctionReference_NoPrefix and moved it out of the failed tests folder.
2004-04-07 John Camelon
Updated CompletionFailedTest_ScopedReference_Prefix_Bug50152, moved it out of failed tests package and renamed it to CompletionTest_ScopedReference_Prefix_Bug50152.
Updated CompletionFailedTest_TypeDef_Bug52948, moved it out of failed tests package and renamed it to CompletionTest_TypeDef_Bug52948.

View file

@ -66,16 +66,16 @@ public class AutomatedSuite extends TestSuite {
addTest(CompletionTest_NewTypeReference_Prefix.suite());
addTest(CompletionTest_ExceptionReference_NoPrefix.suite());
addTest(CompletionTest_ExceptionReference_Prefix.suite());
addTest(CompletionTest_SingleName_Parameter.suite());
addTest(CompletionTest_FunctionReference_Prefix.suite());
// Failed Tests
addTest(CompletionFailedTest_ScopedReference_NoPrefix_Bug50152.suite());
addTest(CompletionTest_ScopedReference_Prefix_Bug50152.suite());
addTest(CompletionTest_MacroRef_NoPrefix.suite());
addTest(CompletionTest_MacroRef_Prefix.suite());
addTest(CompletionFailedTest_FunctionReference_Bug50807.suite());
addTest(CompletionFailedTest_ConstructorReference_Bug50808.suite());
addTest(CompletionTest_TypeDef_Bug52948.suite());
addTest(CompletionTest_FunctionReference_NoPrefix.suite());
addTest(CompletionTest_ConstructorReference.suite());
addTest(CompletionTest_TypeDef_NoPrefix.suite());
}
}

View file

@ -44,7 +44,7 @@ import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.contentassist.ICompletionProposal;
public abstract class CompletionProposalsBaseTest extends TestCase{
private final String pluginName = "org.eclipse.cdt.ui.tests";
protected static final String EMPTY_STRING = ""; //$NON-NLS-1$
private final String projectName = "TestProject1";
private final String projectType = "bin";
private ICProject fCProject;
@ -52,7 +52,7 @@ public abstract class CompletionProposalsBaseTest extends TestCase{
private IFile fHeaderFile;
private NullProgressMonitor monitor;
private TranslationUnit tu = null;
private String buffer = "";
private String buffer = EMPTY_STRING;
private Document document = null;
@ -73,6 +73,7 @@ public abstract class CompletionProposalsBaseTest extends TestCase{
protected abstract String getExpectedPrefix();
protected abstract IASTCompletionNode.CompletionKind getExpectedKind();
protected abstract String[] getExpectedResultsValues();
protected String getFunctionOrConstructorName() { return EMPTY_STRING; }
protected void setUp() throws Exception {
monitor = new NullProgressMonitor();
@ -144,7 +145,6 @@ public abstract class CompletionProposalsBaseTest extends TestCase{
// scope
IASTScope scope = completionNode.getCompletionScope();
assertNotNull(scope);
String scopeClassName = scope.getClass().getName();
assertTrue(scope.getClass().getName().endsWith(getExpectedScopeClassName()));
// context
IASTNode context = completionNode.getCompletionContext();
@ -159,6 +159,8 @@ public abstract class CompletionProposalsBaseTest extends TestCase{
String prefix = completionNode.getCompletionPrefix();
assertEquals(prefix, getExpectedPrefix());
assertEquals( completionNode.getFunctionName(), getFunctionOrConstructorName() );
String[] expected = getExpectedResultsValues();
assertTrue(results.length >= expected.length);

View file

@ -8,7 +8,7 @@
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.ui.tests.text.contentassist.failedtests;
package org.eclipse.cdt.ui.tests.text.contentassist;
@ -16,7 +16,6 @@ import junit.framework.Test;
import junit.framework.TestSuite;
import org.eclipse.cdt.core.parser.ast.IASTCompletionNode.CompletionKind;
import org.eclipse.cdt.ui.tests.text.contentassist.CompletionProposalsBaseTest;
/**
* @author hamer
@ -25,15 +24,15 @@ import org.eclipse.cdt.ui.tests.text.contentassist.CompletionProposalsBaseTest;
* Bug#
*
*/
public class CompletionFailedTest_ConstructorReference_Bug50808 extends CompletionProposalsBaseTest{
public class CompletionTest_ConstructorReference extends CompletionProposalsBaseTest{
private final String fileName = "CompletionTestStart35.cpp";
private final String fileFullPath ="resources/contentassist/" + fileName;
private final String headerFileName = "CompletionTestStart.h";
private final String headerFileFullPath ="resources/contentassist/" + headerFileName;
private final String expectedScopeName = "ASTMethod";
private final String expectedContextName = "null"; // should be "ASTClassSpecifier"
private final CompletionKind expectedKind = CompletionKind.NEW_TYPE_REFERENCE; // should be CompletionKind.CONSTRUCTOR_REFERENCE;
private final String expectedContextName = "null";
private final CompletionKind expectedKind = CompletionKind.CONSTRUCTOR_REFERENCE;
private final String expectedPrefix = "";
private final String[] expectedResults = {
// should be
@ -41,13 +40,13 @@ public class CompletionFailedTest_ConstructorReference_Bug50808 extends Complet
// "xOtherClass(int)"
};
public CompletionFailedTest_ConstructorReference_Bug50808(String name) {
public CompletionTest_ConstructorReference(String name) {
super(name);
}
public static Test suite() {
TestSuite suite= new TestSuite(CompletionFailedTest_ConstructorReference_Bug50808.class.getName());
suite.addTest(new CompletionFailedTest_ConstructorReference_Bug50808("testCompletionProposals"));
TestSuite suite= new TestSuite(CompletionTest_ConstructorReference.class.getName());
suite.addTest(new CompletionTest_ConstructorReference("testCompletionProposals"));
return suite;
}
@ -120,5 +119,12 @@ public class CompletionFailedTest_ConstructorReference_Bug50808 extends Complet
return headerFileName;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.ui.tests.text.contentassist.CompletionProposalsBaseTest#getFunctionOrConstructorName()
*/
protected String getFunctionOrConstructorName() {
return "xOtherClass";
}
}

View file

@ -8,14 +8,13 @@
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.ui.tests.text.contentassist.failedtests;
package org.eclipse.cdt.ui.tests.text.contentassist;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.eclipse.cdt.core.parser.ast.IASTCompletionNode.CompletionKind;
import org.eclipse.cdt.ui.tests.text.contentassist.CompletionProposalsBaseTest;
/**
* @author hamer
@ -24,29 +23,28 @@ import org.eclipse.cdt.ui.tests.text.contentassist.CompletionProposalsBaseTest;
* Bug#
*
*/
public class CompletionFailedTest_FunctionReference_Bug50807 extends CompletionProposalsBaseTest{
public class CompletionTest_FunctionReference_NoPrefix extends CompletionProposalsBaseTest{
private final String fileName = "CompletionTestStart34.cpp";
private final String fileFullPath ="resources/contentassist/" + fileName;
private final String headerFileName = "CompletionTestStart.h";
private final String headerFileFullPath ="resources/contentassist/" + headerFileName;
private final String expectedScopeName = "ASTMethod";
private final String expectedContextName = "null"; // either the context or the prefix should be meaningful "ASTMethod"
private final CompletionKind expectedKind = CompletionKind.NO_SUCH_KIND; // should be CompletionKind.FUNCTION_REFERENCE;
private final String expectedPrefix = ""; // should be "xAClassMethod"
private final String expectedContextName = "ASTVariable"; // variables are more precise to lookup upon than the variable's type is
private final CompletionKind expectedKind = CompletionKind.FUNCTION_REFERENCE;
private final String expectedPrefix = "";
private final String[] expectedResults = {
// should be
// "xOtherMethod() void",
// "xOtherMethod(int) void"
"xOtherMethod() void",
"xOtherMethod(int) void"
};
public CompletionFailedTest_FunctionReference_Bug50807(String name) {
public CompletionTest_FunctionReference_NoPrefix(String name) {
super(name);
}
public static Test suite() {
TestSuite suite= new TestSuite(CompletionFailedTest_FunctionReference_Bug50807.class.getName());
suite.addTest(new CompletionFailedTest_FunctionReference_Bug50807("testCompletionProposals"));
TestSuite suite= new TestSuite(CompletionTest_FunctionReference_NoPrefix.class.getName());
suite.addTest(new CompletionTest_FunctionReference_NoPrefix("testCompletionProposals"));
return suite;
}
@ -119,4 +117,12 @@ public class CompletionFailedTest_FunctionReference_Bug50807 extends Completion
return headerFileName;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.ui.tests.text.contentassist.CompletionProposalsBaseTest#getFunctionOrConstructorName()
*/
protected String getFunctionOrConstructorName() {
return "xOtherMethod";
}
}

View file

@ -23,14 +23,14 @@ import org.eclipse.cdt.core.parser.ast.IASTCompletionNode.CompletionKind;
* Bug#
*
*/
public class CompletionTest_SingleName_Parameter extends CompletionProposalsBaseTest{
public class CompletionTest_FunctionReference_Prefix extends CompletionProposalsBaseTest{
private final String fileName = "CompletionTestStart36.cpp";
private final String fileFullPath ="resources/contentassist/" + fileName;
private final String headerFileName = "CompletionTestStart.h";
private final String headerFileFullPath ="resources/contentassist/" + headerFileName;
private final String expectedScopeName = "ASTMethod";
private final String expectedContextName = "null";
private final CompletionKind expectedKind = CompletionKind.SINGLE_NAME_REFERENCE;
private final CompletionKind expectedKind = CompletionKind.FUNCTION_REFERENCE;
private final String expectedPrefix = "x";
private final String[] expectedResults = {
"xLocal : int",
@ -48,13 +48,13 @@ public class CompletionTest_SingleName_Parameter extends CompletionProposalsBas
"XMacro(x,y)"
};
public CompletionTest_SingleName_Parameter(String name) {
public CompletionTest_FunctionReference_Prefix(String name) {
super(name);
}
public static Test suite() {
TestSuite suite= new TestSuite(CompletionTest_SingleName_Parameter.class.getName());
suite.addTest(new CompletionTest_SingleName_Parameter("testCompletionProposals"));
TestSuite suite= new TestSuite(CompletionTest_FunctionReference_Prefix.class.getName());
suite.addTest(new CompletionTest_FunctionReference_Prefix("testCompletionProposals"));
return suite;
}
/* (non-Javadoc)
@ -126,4 +126,14 @@ public class CompletionTest_SingleName_Parameter extends CompletionProposalsBas
return headerFileName;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.ui.tests.text.contentassist.CompletionProposalsBaseTest#getFunctionOrConstructorName()
*/
protected String getFunctionOrConstructorName() {
return "xAClassMethod";
}
}

View file

@ -24,7 +24,7 @@ import org.eclipse.cdt.core.parser.ast.IASTCompletionNode.CompletionKind;
* Bug#52948
*
*/
public class CompletionTest_TypeDef_Bug52948 extends CompletionProposalsBaseTest{
public class CompletionTest_TypeDef_NoPrefix extends CompletionProposalsBaseTest{
private final String fileName = "CompletionTestStart37.cpp";
private final String fileFullPath ="resources/contentassist/" + fileName;
@ -38,13 +38,13 @@ public class CompletionTest_TypeDef_Bug52948 extends CompletionProposalsBaseTes
"myType"
};
public CompletionTest_TypeDef_Bug52948(String name) {
public CompletionTest_TypeDef_NoPrefix(String name) {
super(name);
}
public static Test suite() {
TestSuite suite= new TestSuite(CompletionTest_TypeDef_Bug52948.class.getName());
suite.addTest(new CompletionTest_TypeDef_Bug52948("testCompletionProposals"));
TestSuite suite= new TestSuite(CompletionTest_TypeDef_NoPrefix.class.getName());
suite.addTest(new CompletionTest_TypeDef_NoPrefix("testCompletionProposals"));
return suite;
}

View file

@ -8,7 +8,7 @@
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.ui.tests.text.contentassist.failedtests;
package org.eclipse.cdt.ui.tests.text.contentassist;
@ -16,7 +16,6 @@ import junit.framework.Test;
import junit.framework.TestSuite;
import org.eclipse.cdt.core.parser.ast.IASTCompletionNode.CompletionKind;
import org.eclipse.cdt.ui.tests.text.contentassist.CompletionProposalsBaseTest;
/**
* @author hamer
@ -25,7 +24,7 @@ import org.eclipse.cdt.ui.tests.text.contentassist.CompletionProposalsBaseTest;
* Bug#52948
*
*/
public class CompletionFailedTest_TypeDef_Bug52948 extends CompletionProposalsBaseTest{
public class CompletionTest_TypeDef_Prefix extends CompletionProposalsBaseTest{
private final String fileName = "CompletionTestStart37.cpp";
private final String fileFullPath ="resources/contentassist/" + fileName;
@ -36,17 +35,16 @@ public class CompletionFailedTest_TypeDef_Bug52948 extends CompletionProposalsB
private final CompletionKind expectedKind = CompletionKind.VARIABLE_TYPE;
private final String expectedPrefix = "m";
private final String[] expectedResults = {
// should be
// "myType"
"myType"
};
public CompletionFailedTest_TypeDef_Bug52948(String name) {
public CompletionTest_TypeDef_Prefix(String name) {
super(name);
}
public static Test suite() {
TestSuite suite= new TestSuite(CompletionFailedTest_TypeDef_Bug52948.class.getName());
suite.addTest(new CompletionFailedTest_TypeDef_Bug52948("testCompletionProposals"));
TestSuite suite= new TestSuite(CompletionTest_TypeDef_Prefix.class.getName());
suite.addTest(new CompletionTest_TypeDef_Prefix("testCompletionProposals"));
return suite;
}

View file

@ -1,3 +1,6 @@
2004-04-07 John Camelon
Updated CompletionEngine to use the extended IASTCompletionNode interface for FUNCTION_REFERENCE.
2004-04-07 David Inglis
Begining of new Include/Symbols UI pages.

View file

@ -539,8 +539,8 @@ public class CompletionEngine implements RelevanceConstants {
IASTNode.LookupKind[] kinds = new IASTNode.LookupKind[1];
kinds[0] = IASTNode.LookupKind.ALL;
String prefix = completionNode.getCompletionPrefix();
if(prefix.equals("(")) //$NON-NLS-1$
prefix = ""; //$NON-NLS-1$
// if(prefix.equals("(")) //$NON-NLS-1$
// prefix = ""; //$NON-NLS-1$
result = lookup(searchNode, prefix, kinds, completionNode.getCompletionContext());
addToCompletions(result);
@ -628,14 +628,22 @@ public class CompletionEngine implements RelevanceConstants {
addToCompletions(result);
}
private void completionOnFunctionReference(IASTCompletionNode completionNode){
// 1. Get the search scope node
IASTScope searchNode = completionNode.getCompletionScope();
// only lookup this function
IASTNode.LookupKind[] kinds = new IASTNode.LookupKind[2];
kinds[0] = IASTNode.LookupKind.FUNCTIONS;
kinds[1] = IASTNode.LookupKind.METHODS;
ILookupResult result = lookup(searchNode, completionNode.getCompletionPrefix(), kinds, completionNode.getCompletionContext());
//NOTE:
// Hoda, I changed this so it makes sense with regards to your JUnit tests
// and examples. If my assumptions are not correct as to what deserves to be
// looked up for FUNCTION_REFRENCE then please update the documentation in
// IASTCompletionNode.java.
IASTNode.LookupKind[] kinds = new IASTNode.LookupKind[1];
kinds[0] = IASTNode.LookupKind.ALL;
String prefix = completionNode.getCompletionPrefix();
ILookupResult result = lookup(completionNode.getCompletionScope(), prefix, kinds, completionNode.getCompletionContext());
addToCompletions(result);
List macros = lookupMacros(completionNode.getCompletionPrefix());
addMacrosToCompletions(macros.iterator());
}
public IASTCompletionNode complete(IWorkingCopy sourceUnit, int completionOffset) {