From a355b2cf1d4a15df62e5b611b581ab9df1b08eba Mon Sep 17 00:00:00 2001 From: John Camelon Date: Fri, 21 May 2004 17:54:41 +0000 Subject: [PATCH] Fixed https://bugs.eclipse.org/bugs/show_bug.cgi?id=62728 --- .../core/parser/tests/CompletionParseTest.java | 15 +++++++++++++++ .../cdt/core/parser/ast/IASTExpression.java | 13 +++++++++++++ .../ast/complete/CompleteParseASTFactory.java | 5 +++-- 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompletionParseTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompletionParseTest.java index 44241f5234f..c08660f1f1b 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompletionParseTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompletionParseTest.java @@ -1102,4 +1102,19 @@ public class CompletionParseTest extends CompletionParseBaseTest { assertTrue( ((IASTFunction)node.getCompletionScope()).getName().equals( "f" ) ); //$NON-NLS-1$ assertEquals( node.getCompletionKind(), IASTCompletionNode.CompletionKind.SINGLE_NAME_REFERENCE ); } + + public void testBug62728() throws Exception + { + Writer writer = new StringWriter(); + writer.write( "struct Temp { char * t; };" ); //$NON-NLS-1$ + writer.write( "int f(Temp * t) {\n" ); //$NON-NLS-1$ + writer.write( "t->t[5] = t-> "); //$NON-NLS-1$ + String code = writer.toString(); + IASTCompletionNode node = parse( code, code.indexOf( "= t->") + 5 ); //$NON-NLS-1$ + assertNotNull( node ); + assertEquals( node.getCompletionKind(), IASTCompletionNode.CompletionKind.MEMBER_REFERENCE ); + assertTrue( node.getCompletionScope() instanceof IASTFunction ); + assertTrue( ((IASTFunction)node.getCompletionScope()).getName().equals( "f" ) ); //$NON-NLS-1$ + assertNotNull( node.getCompletionContext() ); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTExpression.java index dd15c6e4138..a8616b942ed 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTExpression.java @@ -239,6 +239,19 @@ public interface IASTExpression extends ISourceElementCallbackDelegate, IASTNode return false; } + + /** + * @return + */ + public boolean isLiteral() { + if( this == PRIMARY_INTEGER_LITERAL || + this == PRIMARY_CHAR_LITERAL || + this == PRIMARY_FLOAT_LITERAL || + this == PRIMARY_STRING_LITERAL || + this == PRIMARY_BOOLEAN_LITERAL ) + return true; + return false; + } } 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 56003820818..de5141f68eb 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 @@ -1415,7 +1415,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto } ExpressionResult result = null; - if( literal != null && !literal.equals(EMPTY_STRING) ){ + if( literal != null && !literal.equals(EMPTY_STRING) && kind.isLiteral() ){ info.setDefault( literal ); } // types that resolve to void @@ -1573,7 +1573,8 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto if(left == null) handleProblem( scope, IProblem.SEMANTIC_MALFORMED_EXPRESSION, null ); info = left.getResultType().getResult(); - if ((info != null) && (info.getTypeSymbol() != null)){ + if ((info != null)) + { info.addOperatorExpression( TypeInfo.OperatorExpression.subscript ); }else { handleProblem( scope, IProblem.SEMANTIC_MALFORMED_EXPRESSION, null );