Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
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.java21
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);

Back to the top