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 09f4931e563..351af2ad606 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 @@ -1196,4 +1196,23 @@ public class CompletionParseTest extends CompletionParseBaseTest { } return false; } + + public void testBug66543() throws Exception + { + Writer writer = new StringWriter(); + writer.write( "struct packet { int a; int b; };\n" ); //$NON-NLS-1$ + writer.write( "struct packet buffer[5];\n" ); //$NON-NLS-1$ + writer.write( "int main(int argc, char **argv) {\n" ); //$NON-NLS-1$ + writer.write( " buffer[2]." ); //$NON-NLS-1$ + String code = writer.toString(); + IASTCompletionNode node = parse( code, code.indexOf( "[2].") + 4 ); //$NON-NLS-1$ + assertNotNull( node ); + assertNotNull( node.getCompletionContext() ); + IASTNode.LookupKind [] kinds = new LookupKind[ 1 ]; + kinds[0] = LookupKind.FIELDS; + ILookupResult result = node.getCompletionScope().lookup( node.getCompletionPrefix(), kinds, node.getCompletionContext(), node.getFunctionParameters() ); + assertNotNull( result ); + assertEquals( result.getResultsSize(), 2 ); + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTCodeScope.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTCodeScope.java index ccd4de59af6..c9e79941e6e 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTCodeScope.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTCodeScope.java @@ -82,8 +82,7 @@ public class ASTCodeScope extends ASTScope implements IASTCodeScope { { if(declarations != null) return declarations.iterator(); - else - return super.getDeclarations(); + return super.getDeclarations(); } public void addDeclaration(IASTDeclaration declaration) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTFunction.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTFunction.java index c2eca1e0b79..e13310175a6 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTFunction.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/ASTFunction.java @@ -330,8 +330,7 @@ public class ASTFunction extends ASTScope implements IASTFunction { if(declarations != null) return declarations.iterator(); - else - return super.getDeclarations(); + return super.getDeclarations(); } public void addDeclaration(IASTDeclaration declaration) 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 1a89a283f92..79d1dd5b2ca 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 @@ -1636,6 +1636,7 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto if ((info != null)) { info.addOperatorExpression( TypeInfo.OperatorExpression.subscript ); + info = info.getFinalType( null ); }else { handleProblem( scope, IProblem.SEMANTIC_MALFORMED_EXPRESSION, null ); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/gcc/GCCASTCompleteExtension.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/gcc/GCCASTCompleteExtension.java index fabe2341e7c..7c588d7f54f 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/gcc/GCCASTCompleteExtension.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/gcc/GCCASTCompleteExtension.java @@ -19,7 +19,6 @@ import java.util.List; import org.eclipse.cdt.core.parser.GCCKeywords; import org.eclipse.cdt.core.parser.ITokenDuple; import org.eclipse.cdt.core.parser.ParserMode; -import org.eclipse.cdt.core.parser.ast.ASTExpressionEvaluationException; import org.eclipse.cdt.core.parser.ast.ASTUtil; import org.eclipse.cdt.core.parser.ast.IASTExpression; import org.eclipse.cdt.core.parser.ast.IASTScope; @@ -29,7 +28,6 @@ import org.eclipse.cdt.core.parser.ast.IASTExpression.Kind; import org.eclipse.cdt.core.parser.ast.gcc.IASTGCCExpression; import org.eclipse.cdt.internal.core.parser.ast.GCCASTExtension; import org.eclipse.cdt.internal.core.parser.ast.complete.ASTBinaryExpression; -import org.eclipse.cdt.internal.core.parser.ast.complete.ASTIdExpression; import org.eclipse.cdt.internal.core.parser.ast.complete.ASTTypeIdExpression; import org.eclipse.cdt.internal.core.parser.ast.complete.ASTUnaryExpression; import org.eclipse.cdt.internal.core.parser.ast.complete.ExpressionFactory; @@ -59,10 +57,10 @@ public class GCCASTCompleteExtension extends GCCASTExtension { { return new ASTBinaryExpression( kind, references, lhs, rhs ){ public String toString(){ - IASTExpression.Kind kind = getExpressionKind(); + IASTExpression.Kind k = getExpressionKind(); StringBuffer buffer = new StringBuffer(); buffer.append( ASTUtil.getExpressionString( getLHSExpression() ) ); - if( kind == IASTGCCExpression.Kind.RELATIONAL_MAX ) + if( k == IASTGCCExpression.Kind.RELATIONAL_MAX ) buffer.append( " >? " ); //$NON-NLS-1$ else buffer.append( " ? " ); //$NON-NLS-1$ else buffer.append( "