From 08f62553a67715bc952e47b4601459b5f29c2ce4 Mon Sep 17 00:00:00 2001 From: John Camelon Date: Thu, 23 Sep 2004 00:43:45 +0000 Subject: [PATCH] Fixed 69439 - [Content Assist] confusion when completing after "123." --- .../cdt/core/parser/tests/CompletionParseTest.java | 9 +++++++++ .../org/eclipse/cdt/internal/core/parser/Parser.java | 7 +------ .../cdt/internal/core/parser/scanner2/Scanner2.java | 9 ++++++++- 3 files changed, 18 insertions(+), 7 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 fdd2c99e3a4..66cca9ab846 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 @@ -1251,4 +1251,13 @@ public class CompletionParseTest extends CompletionParseBaseTest { assertEquals( result.getResultsSize(), 2 ); } + public void testBug69439() throws Exception + { + String code = "float f = 123."; //$NON-NLS-1$ + IASTCompletionNode node = parse( code, code.indexOf( ".") + 1 ); //$NON-NLS-1$ + assertNotNull( node ); + assertEquals( node.getCompletionKind(), IASTCompletionNode.CompletionKind.NO_SUCH_KIND ); + + } + } 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 d6963d23521..72ce1ec6425 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 @@ -752,14 +752,9 @@ public class Parser implements IParserData, IParser ITokenDuple nameDuple = null; if (LT(1) == IToken.tIDENTIFIER || LT(1) == IToken.tCOLONCOLON) { try { - try { - nameDuple = name(d.getScope(), + nameDuple = name(d.getScope(), CompletionKind.SINGLE_NAME_REFERENCE, KeywordSetKey.EMPTY); - } catch (OffsetLimitReachedException olre) { - backup(mark); - return null; - } } catch (BacktrackException bt) { backup(mark); return null; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java index 70c17470f6c..3bfaafa6cc6 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java @@ -1124,7 +1124,7 @@ public class Scanner2 implements IScanner, IScannerData { return lineNum; } - private IToken scanNumber() { + private IToken scanNumber() throws EndOfFileException { char[] buffer = bufferStack[bufferStackPos]; int start = bufferPos[bufferStackPos]; int limit = bufferLimit[bufferStackPos]; @@ -1158,6 +1158,9 @@ public class Scanner2 implements IScanner, IScannerData { continue; case '.': + if( isLimitReached() ) + handleNoSuchCompletion(); + if (isFloat){ // second dot handleProblem( IProblem.SCANNER_BAD_FLOATING_POINT, start, null ); @@ -3080,6 +3083,10 @@ public class Scanner2 implements IScanner, IScannerData { throw new OffsetLimitReachedException( node ); } + protected void handleNoSuchCompletion() throws EndOfFileException + { + throw new OffsetLimitReachedException( new ASTCompletionNode( IASTCompletionNode.CompletionKind.NO_SUCH_KIND, null, null, EMPTY_STRING, KeywordSets.getKeywords(KeywordSetKey.EMPTY, language ) , EMPTY_STRING, null)); + } protected void handleInvalidCompletion() throws EndOfFileException {