Fixed Bug 433178 - [1.8] [content assist] should propose keyword 'new'
after 'Type::' (CreationReference)
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CompletionTests18.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CompletionTests18.java
index cd30de5..5a54838 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CompletionTests18.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CompletionTests18.java
@@ -19,6 +19,7 @@
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.core.eval.IEvaluationContext;
+import org.eclipse.jdt.internal.codeassist.RelevanceConstants;
public class CompletionTests18 extends AbstractJavaModelCompletionTests {
@@ -1564,4 +1565,60 @@
"getLastName[METHOD_IMPORT]{getLastName, Ltest.Person;, ()Ljava.lang.String;, getLastName, null, 35}",
requestor.getResults());
}
+//https://bugs.eclipse.org/bugs/show_bug.cgi?id=433178
+public void test433178() throws JavaModelException {
+ this.workingCopies = new ICompilationUnit[1];
+ this.workingCopies[0] = getWorkingCopy(
+ "/Completion/src/X.java",
+ "interface I {\n" +
+ " String foo(String x);\n" +
+ "}\n" +
+ "public class X {\n" +
+ " public String longMethodName(String x) {\n" +
+ " return null;\n" +
+ " }\n" +
+ " void foo() {\n" +
+ " X x = new X();\n" +
+ " I i = x::ne\n" +
+ " System.out.println();\n" +
+ " }\n" +
+ "}\n");
+
+ CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true, true, true, false);
+ requestor.allowAllRequiredProposals();
+ String str = this.workingCopies[0].getSource();
+ String completeBehind = "ne";
+ int cursorLocation = str.lastIndexOf(completeBehind) + completeBehind.length();
+ this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
+ assertResults("new[KEYWORD]{new, null, null, null, null, new, null, [180, 185], " +
+ (RelevanceConstants.R_DEFAULT + RelevanceConstants.R_RESOLVED + RelevanceConstants.R_INTERESTING + RelevanceConstants.R_NON_RESTRICTED
+ + RelevanceConstants.R_CASE + RelevanceConstants.R_CONSTRUCTOR) + "}", requestor.getResults());
+}
+//https://bugs.eclipse.org/bugs/show_bug.cgi?id=433178
+public void test433178a() throws JavaModelException {
+ this.workingCopies = new ICompilationUnit[1];
+ this.workingCopies[0] = getWorkingCopy(
+ "/Completion/src/X.java",
+ "interface I {\n" +
+ " String foo(String x);\n" +
+ "}\n" +
+ "public class X {\n" +
+ " public String longMethodName(String x) {\n" +
+ " return null;\n" +
+ " }\n" +
+ " void foo() {\n" +
+ " X x = new X();\n" +
+ " I i = I::ne\n" +
+ " System.out.println();\n" +
+ " }\n" +
+ "}\n");
+
+ CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true, true, true, false);
+ requestor.allowAllRequiredProposals();
+ String str = this.workingCopies[0].getSource();
+ String completeBehind = "ne";
+ int cursorLocation = str.lastIndexOf(completeBehind) + completeBehind.length();
+ this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
+ assertResults("", requestor.getResults());
+}
}
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 faf8ed4..ef828f9 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
@@ -2803,6 +2803,10 @@
TypeBinding receiverType = (TypeBinding) qualifiedBinding;
if (receiverType != null && receiverType instanceof ReferenceBinding) {
+ if (!(receiverType.isInterface() || this.requestor.isIgnored(CompletionProposal.KEYWORD))) {
+ this.assistNodeIsConstructor = true;
+ findKeywords(this.completionToken, new char[][] { Keywords.NEW }, false, false);
+ }
findMethods(
this.completionToken,
referenceExpression.resolvedTypeArguments,
@@ -8181,6 +8185,9 @@
relevance += computeRelevanceForExpectingType(TypeBinding.BOOLEAN);
relevance += computeRelevanceForQualification(false);
}
+ if (CharOperation.equals(choices[i], Keywords.NEW)) {
+ relevance += computeRelevanceForConstructor();
+ }
this.noProposal = false;
if(!this.requestor.isIgnored(CompletionProposal.KEYWORD)) {
InternalCompletionProposal proposal = createProposal(CompletionProposal.KEYWORD, this.actualCompletionPosition);