From b988081c1febe8eb20e44e7a739e0878acdc0368 Mon Sep 17 00:00:00 2001 From: John Camelon Date: Tue, 11 May 2004 19:43:05 +0000 Subject: [PATCH] Another partial fix for https://bugs.eclipse.org/bugs/show_bug.cgi?id=60298 --- .../core/parser/tests/CompletionParseTest.java | 11 +++++++++++ .../cdt/core/parser/ast/IASTCompletionNode.java | 5 +---- .../internal/core/parser/ExpressionParser.java | 10 +++++++++- .../cdt/internal/core/parser/Parser.java | 17 +++-------------- .../ui/text/contentassist/CompletionEngine.java | 2 -- 5 files changed, 24 insertions(+), 21 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 421ddc5ba84..92295a6d3ca 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 @@ -1026,4 +1026,15 @@ public class CompletionParseTest extends CompletionParseBaseTest { assertEquals( result.getResultsSize(), 2 ); } + + public void testBug60298() throws Exception + { + Writer writer = new StringWriter(); + writer.write( "class ABC { public: ABC(); int myInt(); };\n"); + writer.write( "int ABC::" ); + String code = writer.toString(); + IASTCompletionNode node = parse( code, code.indexOf( "::") + 2 ); + assertEquals( node.getCompletionKind(), CompletionKind.SINGLE_NAME_REFERENCE ); + + } } 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 d3a9cbaf202..3b38bd12163 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 @@ -34,7 +34,7 @@ public interface IASTCompletionNode { // function/method argument type reference public static final CompletionKind ARGUMENT_TYPE = new CompletionKind( 4 ); - // inside code body - name reference + // inside code body - name reference || int X::[ ] public static final CompletionKind SINGLE_NAME_REFERENCE = new CompletionKind( 5 ); // any place one can expect a type @@ -58,9 +58,6 @@ public interface IASTCompletionNode { // any place where exclusively a preprocessor directive is expected public static final CompletionKind PREPROCESSOR_DIRECTIVE = new CompletionKind( 13 ); - // any place where a type or variable name is expected to be introduced - public static final CompletionKind NESTED_NAME_REFERENCE = new CompletionKind( 14 ); - // any place where function parameters are expected public static final CompletionKind FUNCTION_REFERENCE = new CompletionKind( 15 ); 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 e715fd87288..702c3089e5f 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 @@ -694,7 +694,15 @@ public class ExpressionParser implements IExpressionParser, IParserData { { try { - nameDuple = name(d.getScope(), CompletionKind.SINGLE_NAME_REFERENCE, Key.EMPTY ); + try + { + nameDuple = name(d.getScope(), CompletionKind.SINGLE_NAME_REFERENCE, Key.EMPTY ); + } + catch( OffsetLimitReachedException olre ) + { + backup( mark ); + return null; + } } catch( BacktrackException bt ) { 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 5bc687fddff..4f3713ec2b8 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 @@ -1671,9 +1671,8 @@ public abstract class Parser extends ExpressionParser implements IParser setTypeName(sdw, typeNameBegin, typeNameEnd); return; } - IASTCompletionNode.CompletionKind ourKind = determineDeclSpecCompletionKind(sdw, kind); - setCompletionValues(sdw.getScope(), ourKind, key ); - ITokenDuple d = name(sdw.getScope(), ourKind, key ); + setCompletionValues(sdw.getScope(), kind, key ); + ITokenDuple d = name(sdw.getScope(), kind, key ); sdw.setTypeName(d); sdw.setSimpleType( IASTSimpleTypeSpecifier.Type.CLASS_OR_TYPENAME ); flags.setEncounteredTypename(true); @@ -1727,17 +1726,7 @@ public abstract class Parser extends ExpressionParser implements IParser setTypeName(sdw, typeNameBegin, typeNameEnd); return; } - /** - * @param sdw - * @param kind - * @return - */ - protected CompletionKind determineDeclSpecCompletionKind(DeclarationWrapper sdw, CompletionKind kind) { - if( kind == CompletionKind.ARGUMENT_TYPE ) return kind; - if( sdw.getScope() instanceof IASTCompilationUnit || sdw.getScope() instanceof IASTNamespaceDefinition ) - return sdw.consumedRawType() ? CompletionKind.NESTED_NAME_REFERENCE: kind; - return kind; - } + /** 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 72ce8430a5c..c0b06c2c558 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 @@ -885,8 +885,6 @@ public class CompletionEngine implements RelevanceConstants { kindStr = "NEW_TYPE_REFERENCE"; //$NON-NLS-1$ else if(kind == IASTCompletionNode.CompletionKind.PREPROCESSOR_DIRECTIVE) kindStr = "PREPROCESSOR_DIRECTIVE"; //$NON-NLS-1$ - else if(kind == IASTCompletionNode.CompletionKind.NESTED_NAME_REFERENCE) - kindStr = "NESTED_NAME_REFERENCE"; //$NON-NLS-1$ else if(kind == IASTCompletionNode.CompletionKind.STRUCT_REFERENCE) kindStr = "STRUCT_REFERENCE"; //$NON-NLS-1$ else if(kind == IASTCompletionNode.CompletionKind.UNION_REFERENCE)