diff options
Diffstat (limited to 'org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/CompletionEngine.java')
-rw-r--r-- | org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/CompletionEngine.java | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/CompletionEngine.java b/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/CompletionEngine.java index 875818bb8d..de893efe99 100644 --- a/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/CompletionEngine.java +++ b/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/CompletionEngine.java @@ -51,6 +51,7 @@ import org.eclipse.jdt.core.WorkingCopyOwner; import org.eclipse.jdt.core.compiler.CategorizedProblem; import org.eclipse.jdt.core.compiler.CharOperation; import org.eclipse.jdt.core.compiler.IProblem; +import org.eclipse.jdt.core.compiler.InvalidInputException; import org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants; import org.eclipse.jdt.core.search.IJavaSearchConstants; import org.eclipse.jdt.core.search.IJavaSearchScope; @@ -1503,10 +1504,10 @@ public final class CompletionEngine } else if ((modifiers & ClassFileConstants.AccStatic) == 0) { continue next; } else { - completionName = CharOperation.concat(completionName, new char[] { ';' }); + completionName = appendUnlessNextToken(completionName, new char[] { ';' }, TerminalTokens.TokenNameSEMICOLON); } } else { - completionName = CharOperation.concat(completionName, new char[] { ';' }); + completionName = appendUnlessNextToken(completionName, new char[] {';'}, TerminalTokens.TokenNameSEMICOLON); } int relevance = computeBaseRelevance(); @@ -1665,6 +1666,18 @@ public final class CompletionEngine } } + private char[] appendUnlessNextToken(char[] completionName, char[] suffix, int nextToken) { + this.parser.scanner.resetTo(this.endPosition, Integer.MAX_VALUE); + try { + if (this.parser.scanner.getNextToken() != nextToken) { + return CharOperation.concat(completionName, suffix); + } + } catch (InvalidInputException e) { + // ignore + } + return completionName; + } + public void acceptUnresolvedName(char[] name) { int relevance = computeBaseRelevance(); relevance += computeRelevanceForResolution(false); @@ -1862,6 +1875,8 @@ public final class CompletionEngine } } else if (astNode instanceof CompletionOnKeyword3 && ((CompletionOnKeyword3) astNode).afterTryOrCatch()) { context.setTokenLocation(CompletionContext.TL_STATEMENT_START); + } else if (astNode instanceof CompletionOnImportReference) { + context.setTokenLocation(CompletionContext.TL_IN_IMPORT); } else { ReferenceContext referenceContext = scope.referenceContext(); if (referenceContext instanceof AbstractMethodDeclaration) { @@ -2183,7 +2198,7 @@ public final class CompletionEngine this.lookupEnvironment.buildTypeBindings(parsedUnit, null /*no access restriction*/); if ((this.unitScope = parsedUnit.scope) != null) { contextAccepted = true; - buildContext(importReference, null, parsedUnit, null, null); + buildContext(importReference, null, parsedUnit, null, this.unitScope); long positions = importReference.sourcePositions[importReference.tokens.length - 1]; setSourceAndTokenRange((int) (positions >>> 32), (int) positions); |