diff --git a/core/org.eclipse.cdt.core/parser/ChangeLog-parser b/core/org.eclipse.cdt.core/parser/ChangeLog-parser index 62e594dad1d..abc562260d1 100644 --- a/core/org.eclipse.cdt.core/parser/ChangeLog-parser +++ b/core/org.eclipse.cdt.core/parser/ChangeLog-parser @@ -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 ) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTCompletionNode.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTCompletionNode.java index 3f69829b113..d285d605002 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTCompletionNode.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTCompletionNode.java @@ -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 */ diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTFactory.java index 3d86bcd97ff..6a33ab6c0d2 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTFactory.java @@ -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); + } \ No newline at end of file diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTTypeId.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTTypeId.java index 77ec5dd9560..4eb4fb12db8 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTTypeId.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTTypeId.java @@ -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; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/CompletionParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/CompletionParser.java index 09ed7a494de..c8cdcb82ab2 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/CompletionParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/CompletionParser.java @@ -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() ); } /** diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ContextualParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ContextualParser.java index 326b3b53c98..7c958797d41 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ContextualParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ContextualParser.java @@ -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; + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ExpressionParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ExpressionParser.java index ab90e6b13ac..9f9dc9deb3f 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ExpressionParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ExpressionParser.java @@ -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 ){ @@ -265,7 +267,7 @@ public class ExpressionParser implements IExpressionParser { * * @throws BacktrackException request a backtrack */ - protected ITokenDuple name(IASTScope scope, IASTCompletionNode.CompletionKind kind) throws BacktrackException, EndOfFileException { + protected ITokenDuple name(IASTScope scope, IASTCompletionNode.CompletionKind kind ) throws BacktrackException, EndOfFileException { IToken first = LA(1); IToken last = null; @@ -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) { @@ -1480,13 +1490,15 @@ public class ExpressionParser implements IExpressionParser { * @param expression * @throws BacktrackException */ - protected IASTExpression deleteExpression(IASTScope scope, CompletionKind kind) throws EndOfFileException, BacktrackException { - if (LT(1) == IToken.tCOLONCOLON) + protected IASTExpression deleteExpression(IASTScope scope, CompletionKind kind) throws EndOfFileException, BacktrackException { + 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) { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java index cfe53a5d24c..1ab085f7095 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java @@ -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) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/ASTCompletionNode.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/ASTCompletionNode.java index d525e0a7a51..1d710bcf817 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/ASTCompletionNode.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/ASTCompletionNode.java @@ -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; + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTExpression.java index 20c13620501..91246ba67d7 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTExpression.java @@ -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; + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNode.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNode.java index 01f5f185772..8d32b524dc9 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNode.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTNode.java @@ -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(); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTypeId.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTypeId.java index 0386b3fe9b7..987686ea8fa 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTypeId.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTTypeId.java @@ -61,7 +61,7 @@ public class ASTTypeId implements IASTTypeId this.isSigned = isSigned; this.isShort = isShort; this.isLong = isLong; - this.isTypename = isTypeName; + this.isTypename = isTypeName; } /* (non-Javadoc) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java index f9a277b5afa..9377a75d4d4 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java @@ -105,8 +105,8 @@ import org.eclipse.cdt.internal.core.parser.util.TraceUtil; */ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFactory { - - private final static List SUBSCRIPT; + 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; private final IFilenameProvider fileProvider; @@ -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; + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ExpressionParseASTFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ExpressionParseASTFactory.java index febda1098a3..8bd41c60b93 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ExpressionParseASTFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/expression/ExpressionParseASTFactory.java @@ -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,9 +911,16 @@ 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; } - + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTypeId.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTypeId.java index b8ad5bbff5d..b392124a79c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTypeId.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTTypeId.java @@ -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; @@ -55,7 +56,8 @@ public class ASTTypeId implements IASTTypeId this.isSigned =isSigned; this.isShort =isShort; this.isLong =isLong; - this.isConst =isConst; + 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) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/QuickParseASTFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/QuickParseASTFactory.java index af28d192c29..9e8dde29b7d 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/QuickParseASTFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/QuickParseASTFactory.java @@ -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; + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/problem/BaseProblemFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/problem/BaseProblemFactory.java index 5546de7afae..3b12c1e8a6f 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/problem/BaseProblemFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/problem/BaseProblemFactory.java @@ -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; +// } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/Scanner.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/Scanner.java index 485130dc0d6..c63d769a1dd 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/Scanner.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/Scanner.java @@ -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 diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/KeywordSets.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/KeywordSets.java index 50b0033d178..3dfe0a328c2 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/KeywordSets.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/KeywordSets.java @@ -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 ); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/util/TraceUtil.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/util/TraceUtil.java index a0aa6d3c8b6..a448a9d6226 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/util/TraceUtil.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/util/TraceUtil.java @@ -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() ); + } + } } diff --git a/core/org.eclipse.cdt.ui.tests/ChangeLog b/core/org.eclipse.cdt.ui.tests/ChangeLog index 5fdcc124908..8c0b9c6dbf6 100644 --- a/core/org.eclipse.cdt.ui.tests/ChangeLog +++ b/core/org.eclipse.cdt.ui.tests/ChangeLog @@ -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. diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/AutomatedSuite.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/AutomatedSuite.java index 55a3b04e755..bb4716d8538 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/AutomatedSuite.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/AutomatedSuite.java @@ -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()); } } diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/CompletionProposalsBaseTest.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/CompletionProposalsBaseTest.java index 4c4de46624e..bb21e856c3e 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/CompletionProposalsBaseTest.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/CompletionProposalsBaseTest.java @@ -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); diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/failedtests/CompletionFailedTest_ConstructorReference_Bug50808.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/CompletionTest_ConstructorReference.java similarity index 81% rename from core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/failedtests/CompletionFailedTest_ConstructorReference_Bug50808.java rename to core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/CompletionTest_ConstructorReference.java index 76eb19c39b5..7c54ae9016c 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/failedtests/CompletionFailedTest_ConstructorReference_Bug50808.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/CompletionTest_ConstructorReference.java @@ -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"; + } + } diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/failedtests/CompletionFailedTest_FunctionReference_Bug50807.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/CompletionTest_FunctionReference_NoPrefix.java similarity index 74% rename from core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/failedtests/CompletionFailedTest_FunctionReference_Bug50807.java rename to core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/CompletionTest_FunctionReference_NoPrefix.java index 1a28c7fec8b..fe7b232ff44 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/failedtests/CompletionFailedTest_FunctionReference_Bug50807.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/CompletionTest_FunctionReference_NoPrefix.java @@ -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,34 +23,33 @@ 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; } /* (non-Javadoc) - * @see org.eclipse.cdt.core.codeassist.tests.CompletionProposalsTest#getCompletionPosition() + * @see org.eclipse.cdt.core.codeassist.tests.CompletionProposalsTest#getCompletionPosition() */ protected int getCompletionPosition() { return getBuffer().indexOf("( ") + 2; @@ -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"; + } } diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/CompletionTest_SingleName_Parameter.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/CompletionTest_FunctionReference_Prefix.java similarity index 84% rename from core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/CompletionTest_SingleName_Parameter.java rename to core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/CompletionTest_FunctionReference_Prefix.java index 4deea4b3c02..e945f1326e9 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/CompletionTest_SingleName_Parameter.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/CompletionTest_FunctionReference_Prefix.java @@ -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"; + } } diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/CompletionTest_TypeDef_Bug52948.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/CompletionTest_TypeDef_NoPrefix.java similarity index 93% rename from core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/CompletionTest_TypeDef_Bug52948.java rename to core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/CompletionTest_TypeDef_NoPrefix.java index 897f6cf2220..af7167cb636 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/CompletionTest_TypeDef_Bug52948.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/CompletionTest_TypeDef_NoPrefix.java @@ -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; } diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/failedtests/CompletionFailedTest_TypeDef_Bug52948.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/CompletionTest_TypeDef_Prefix.java similarity index 86% rename from core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/failedtests/CompletionFailedTest_TypeDef_Bug52948.java rename to core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/CompletionTest_TypeDef_Prefix.java index 759120a89c0..fb978dcd310 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/failedtests/CompletionFailedTest_TypeDef_Bug52948.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/CompletionTest_TypeDef_Prefix.java @@ -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; } diff --git a/core/org.eclipse.cdt.ui/ChangeLog b/core/org.eclipse.cdt.ui/ChangeLog index 23eb0fff660..152860c9d32 100644 --- a/core/org.eclipse.cdt.ui/ChangeLog +++ b/core/org.eclipse.cdt.ui/ChangeLog @@ -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. diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/CompletionEngine.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/CompletionEngine.java index 9a6eaaff6dd..e89a0a5976f 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/CompletionEngine.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/CompletionEngine.java @@ -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) {