Bug 575149 - Revert add support to resolve 1st arg type on overload methods
This reverts commit f9169864da76ea22cff964f83c4d77c200a7c4e1.
Reason for revert: rework the solution
Change-Id: I7d611496362a1ea972e3ba7d335cbedeebf0e375
Reviewed-on: https://git.eclipse.org/r/c/jdt/eclipse.jdt.core/+/185752
Tested-by: JDT Bot <jdt-bot@eclipse.org>
Reviewed-by: Gayan Perera <gayanper@gmail.com>
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CompletionTests.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CompletionTests.java
index 62dea73..cd84004 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CompletionTests.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CompletionTests.java
@@ -5163,8 +5163,8 @@
cu.codeComplete(cu.getSourceRange().getOffset() + cu.getSourceRange().getLength(), requestor);
assertEquals(
"should have two methods of 'foo'",
- "element:foo completion:foo() relevance:"+(R_DEFAULT + R_RESOLVED + R_INTERESTING + R_CASE + R_EXACT_NAME + R_UNQUALIFIED + R_NON_RESTRICTED + R_METHOD_OVERLOAD)+"\n" +
- "element:foo completion:foo() relevance:"+(R_DEFAULT + R_RESOLVED + R_INTERESTING + R_CASE + R_EXACT_NAME + R_UNQUALIFIED + R_NON_RESTRICTED + R_METHOD_OVERLOAD),
+ "element:foo completion:foo() relevance:"+(R_DEFAULT + R_RESOLVED + R_INTERESTING + R_CASE + R_EXACT_NAME + R_UNQUALIFIED + R_NON_RESTRICTED)+"\n" +
+ "element:foo completion:foo() relevance:"+(R_DEFAULT + R_RESOLVED + R_INTERESTING + R_CASE + R_EXACT_NAME + R_UNQUALIFIED + R_NON_RESTRICTED),
requestor.getResults());
}
/*
@@ -13323,32 +13323,9 @@
int tStart = str.lastIndexOf("xBar(1,") + "xBar(1,".length();
int tEnd = tStart;
- assertResults("finalize[METHOD_REF]{CompletionPrefixMethodName3.this.finalize(), Ljava.lang.Object;, ()V, finalize, null, replace[150, 150], token[150, 150], 44}\n"
- + "notify[METHOD_REF]{CompletionPrefixMethodName3.this.notify(), Ljava.lang.Object;, ()V, notify, null, replace[150, 150], token[150, 150], 44}\n"
- + "notifyAll[METHOD_REF]{CompletionPrefixMethodName3.this.notifyAll(), Ljava.lang.Object;, ()V, notifyAll, null, replace[150, 150], token[150, 150], 44}\n"
- + "wait[METHOD_REF]{CompletionPrefixMethodName3.this.wait(), Ljava.lang.Object;, ()V, wait, null, replace[150, 150], token[150, 150], 44}\n"
- + "wait[METHOD_REF]{CompletionPrefixMethodName3.this.wait(), Ljava.lang.Object;, (J)V, wait, (millis), replace[150, 150], token[150, 150], 44}\n"
- + "wait[METHOD_REF]{CompletionPrefixMethodName3.this.wait(), Ljava.lang.Object;, (JI)V, wait, (millis, nanos), replace[150, 150], token[150, 150], 44}\n"
- + "finalize[METHOD_REF]{finalize(), Ljava.lang.Object;, ()V, finalize, null, replace[150, 150], token[150, 150], 47}\n"
- + "foo[METHOD_REF]{foo(), LCompletionPrefixMethodName3$classFoo;, ()V, foo, null, replace[150, 150], token[150, 150], 47}\n"
- + "notify[METHOD_REF]{notify(), Ljava.lang.Object;, ()V, notify, null, replace[150, 150], token[150, 150], 47}\n"
- + "notifyAll[METHOD_REF]{notifyAll(), Ljava.lang.Object;, ()V, notifyAll, null, replace[150, 150], token[150, 150], 47}\n"
- + "wait[METHOD_REF]{wait(), Ljava.lang.Object;, ()V, wait, null, replace[150, 150], token[150, 150], 47}\n"
- + "wait[METHOD_REF]{wait(), Ljava.lang.Object;, (J)V, wait, (millis), replace[150, 150], token[150, 150], 47}\n"
- + "wait[METHOD_REF]{wait(), Ljava.lang.Object;, (JI)V, wait, (millis, nanos), replace[150, 150], token[150, 150], 47}\n"
- + "clone[METHOD_REF]{CompletionPrefixMethodName3.this.clone(), Ljava.lang.Object;, ()Ljava.lang.Object;, clone, null, replace[150, 150], token[150, 150], 49}\n"
- + "equals[METHOD_REF]{CompletionPrefixMethodName3.this.equals(), Ljava.lang.Object;, (Ljava.lang.Object;)Z, equals, (obj), replace[150, 150], token[150, 150], 49}\n"
- + "getClass[METHOD_REF]{CompletionPrefixMethodName3.this.getClass(), Ljava.lang.Object;, ()Ljava.lang.Class;, getClass, null, replace[150, 150], token[150, 150], 49}\n"
- + "toString[METHOD_REF]{CompletionPrefixMethodName3.this.toString(), Ljava.lang.Object;, ()Ljava.lang.String;, toString, null, replace[150, 150], token[150, 150], 49}\n"
- + "CompletionPrefixMethodName3[TYPE_REF]{CompletionPrefixMethodName3, , LCompletionPrefixMethodName3;, null, null, replace[150, 150], token[150, 150], 52}\n"
- + "clone[METHOD_REF]{clone(), Ljava.lang.Object;, ()Ljava.lang.Object;, clone, null, replace[150, 150], token[150, 150], 52}\n"
- + "equals[METHOD_REF]{equals(), Ljava.lang.Object;, (Ljava.lang.Object;)Z, equals, (obj), replace[150, 150], token[150, 150], 52}\n"
- + "getClass[METHOD_REF]{getClass(), Ljava.lang.Object;, ()Ljava.lang.Class;, getClass, null, replace[150, 150], token[150, 150], 52}\n"
- + "toString[METHOD_REF]{toString(), Ljava.lang.Object;, ()Ljava.lang.String;, toString, null, replace[150, 150], token[150, 150], 52}\n"
- + "xBar[METHOD_REF]{CompletionPrefixMethodName3.this.xBar(1,, LCompletionPrefixMethodName3;, (II)I, xBar, (a, b), replace["+rStart1+", "+rEnd1+"], token["+tStart+", "+tEnd+"], "+(R_DEFAULT + R_RESOLVED + R_INTERESTING + R_CASE + R_EXACT_NAME+ R_NON_RESTRICTED)+"}\n"
- + "xBar[METHOD_REF]{, LCompletionPrefixMethodName3$classFoo;, (II)I, xBar, (a, b), replace["+rStart2+", "+rEnd2+"], token["+tStart+", "+tEnd+"], "+(R_DEFAULT + R_RESOLVED + R_INTERESTING + R_CASE + R_EXACT_NAME + R_UNQUALIFIED + R_NON_RESTRICTED)+"}\n"
- + "hashCode[METHOD_REF]{CompletionPrefixMethodName3.this.hashCode(), Ljava.lang.Object;, ()I, hashCode, null, replace[150, 150], token[150, 150], 79}\n"
- + "hashCode[METHOD_REF]{hashCode(), Ljava.lang.Object;, ()I, hashCode, null, replace[150, 150], token[150, 150], 82}",
+ assertResults(
+ "xBar[METHOD_REF]{CompletionPrefixMethodName3.this.xBar(1,, LCompletionPrefixMethodName3;, (II)I, xBar, (a, b), replace["+rStart1+", "+rEnd1+"], token["+tStart+", "+tEnd+"], "+(R_DEFAULT + R_RESOLVED + R_INTERESTING + R_CASE + R_EXACT_NAME+ R_NON_RESTRICTED)+"}\n"+
+ "xBar[METHOD_REF]{, LCompletionPrefixMethodName3$classFoo;, (II)I, xBar, (a, b), replace["+rStart2+", "+rEnd2+"], token["+tStart+", "+tEnd+"], "+(R_DEFAULT + R_RESOLVED + R_INTERESTING + R_CASE + R_EXACT_NAME + R_UNQUALIFIED + R_NON_RESTRICTED)+"}",
requestor.getResults());
}
public void testCompletionQualifiedAllocationType1() throws JavaModelException {
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 ec79b7b..90aad65 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
@@ -4670,7 +4670,7 @@
"toString[METHOD_REF]{toString(), Ljava.lang.Object;, ()Ljava.lang.String;, toString, null, "+normalRelevance+"}\n" +
"List<java.lang.Long>[TYPE_REF]{List, java.util, Ljava.util.List<Ljava.lang.Long;>;, null, null, "+expectedTypeRelevance+"}\n" +
"findAll[METHOD_REF]{findAll(), Ltest.TestApp;, ()Ljava.util.List<Ljava.lang.String;>;, findAll, null, "+expectedTypeRelevance+"}\n" +
- "load[METHOD_REF]{, Ltest.TestApp;, (Ljava.util.List<Ljava.lang.Long;>;)Ljava.util.List<Ljava.lang.String;>;, load, (ids), 86}",
+ "load[METHOD_REF]{load(), Ltest.TestApp;, (Ljava.util.List<Ljava.lang.Long;>;)Ljava.util.List<Ljava.lang.String;>;, load, (ids), "+expectedTypeRelevance+"}",
requestor.getResults());
}
public void testBug539617_alloc() throws JavaModelException {
@@ -4711,8 +4711,8 @@
String completeBehind = "meth(";
int cursorLocation = str.indexOf(completeBehind) + completeBehind.length();
this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
- int relevance = R_DEFAULT + R_RESOLVED + R_INTERESTING + R_CASE + R_EXACT_NAME + R_UNQUALIFIED + R_NON_RESTRICTED + R_METHOD_OVERLOAD;
- int relevanceExpectedType = R_DEFAULT + R_RESOLVED + R_INTERESTING + R_CASE + R_EXACT_NAME + R_UNQUALIFIED + R_NON_RESTRICTED + R_EXACT_EXPECTED_TYPE + R_METHOD_OVERLOAD;
+ int relevance = R_DEFAULT + R_RESOLVED + R_INTERESTING + R_CASE + R_EXACT_NAME + R_UNQUALIFIED + R_NON_RESTRICTED;
+ int relevanceExpectedType = R_DEFAULT + R_RESOLVED + R_INTERESTING + R_CASE + R_EXACT_NAME + R_UNQUALIFIED + R_NON_RESTRICTED + R_EXACT_EXPECTED_TYPE;
assertResults(
"meth[METHOD_REF]{, LCodeCompletion;, (Ljava.lang.String;Z)Ljava.lang.Number;, meth, (arg, flag), "+relevance+"}\n" +
"meth[METHOD_REF]{, LCodeCompletion;, (Ljava.lang.String;)Ljava.lang.Double;, meth, (arg), "+relevanceExpectedType+"}",
@@ -5306,8 +5306,8 @@
this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner, new NullProgressMonitor());
String result = requestor.getResults();
- assertTrue(String.format("Result doesn''t contain defaultParam method (%s)", result),
- result.contains("defaultParam[METHOD_REF]{, LBug573313;, (I)Ljava.util.concurrent.TimeUnit;, defaultParam, (amout), 118}"));
+ assertTrue(String.format("Result doesn''t contain enum literal SECONDS (%s)", result),
+ result.contains("defaultParam[METHOD_REF]{, LBug573313;, (I)Ljava.util.concurrent.TimeUnit;, defaultParam, (amout), 86}"));
}
public void testBug573313_MethodParametersCompletions_InCompleteMessageSendOnMiddleParam_MethodCompletionsForType_2() throws JavaModelException {
@@ -5682,8 +5682,8 @@
String result = requestor.getResults();
assertTrue(String.format("Result doesn't contain expected methods (%s)", result),
- result.contains("sorted[METHOD_REF]{, Ljava.util.stream.Stream<Ljava.lang.String;>;, ()Ljava.util.stream.Stream<Ljava.lang.String;>;, sorted, null, 88}\n"
- + "sorted[METHOD_REF]{, Ljava.util.stream.Stream<Ljava.lang.String;>;, (Ljava.util.Comparator<-Ljava.lang.String;>;)Ljava.util.stream.Stream<Ljava.lang.String;>;, sorted, (arg0), 88}"));
+ result.contains("sorted[METHOD_REF]{, Ljava.util.stream.Stream<Ljava.lang.String;>;, ()Ljava.util.stream.Stream<Ljava.lang.String;>;, sorted, null, 56}\n"
+ + "sorted[METHOD_REF]{, Ljava.util.stream.Stream<Ljava.lang.String;>;, (Ljava.util.Comparator<-Ljava.lang.String;>;)Ljava.util.stream.Stream<Ljava.lang.String;>;, sorted, (arg0), 56}"));
}
public void testBug563020_lambdaWithMethodRef_overloadedMethodref_expectCompletionForNextChainWithToken() throws JavaModelException {
this.workingCopies = new ICompilationUnit[1];
@@ -5948,11 +5948,7 @@
int cursorLocation = str.lastIndexOf(completeBehind) + completeBehind.length();
this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
String result = requestor.getResults();
- assertResults("LambdaFreeze2[TYPE_REF]{LambdaFreeze2, , LLambdaFreeze2;, null, null, 52}\n"
- + "SUPPLIER[FIELD_REF]{SUPPLIER, LLambdaFreeze2;, Ljava.util.function.Supplier<Ljava.util.Date;>;, SUPPLIER, null, 52}\n"
- + "calendar[LOCAL_VARIABLE_REF]{calendar, null, Ljava.util.Calendar;, calendar, null, 52}\n"
- + "num[FIELD_REF]{num, LLambdaFreeze2;, I, num, null, 82}\n"
- + "getMinimum[METHOD_REF]{, Ljava.util.Calendar;, (I)I, getMinimum, (arg0), 86}",
+ assertResults("getMinimum[METHOD_REF]{, Ljava.util.Calendar;, (I)I, getMinimum, (arg0), 86}",
result);
}
public void testBug574912_comment6b() throws JavaModelException {
@@ -6028,91 +6024,4 @@
"completion token location={STATEMENT_START}", // this is required for sysout template proposal
requestor.getContext());
}
-public void testBug575149_expectOverloadedMethodsAndVariablesRankedWithExpectedType() throws JavaModelException {
- this.workingCopies = new ICompilationUnit[1];
- this.workingCopies[0] = getWorkingCopy(
- "Completion/src/Bug443091.java",
- "import java.util.function.Consumer;\n" +
- "import java.util.function.Function;\n" +
- "\n" +
- "public class Bug443091 {\n" +
- " private void foo() {\n" +
- " Consumer<Integer> capture = null;\n" +
- " forEach()" +
- " }\n" +
- " private void forEach(Consumer<Integer> in) {}\n" +
- " private void forEach(Function<Integer, String> in) {}\n" +
- "}\n");
-
- CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
- requestor.allowAllRequiredProposals();
- String str = this.workingCopies[0].getSource();
- String completeBehind = "forEach(";
- int cursorLocation = str.indexOf(completeBehind) + completeBehind.length();
- this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
- String result = requestor.getResults();
- assertResults("finalize[METHOD_REF]{finalize(), Ljava.lang.Object;, ()V, finalize, null, 47}\n"
- + "foo[METHOD_REF]{foo(), LBug443091;, ()V, foo, null, 47}\n"
- + "notify[METHOD_REF]{notify(), Ljava.lang.Object;, ()V, notify, null, 47}\n"
- + "notifyAll[METHOD_REF]{notifyAll(), Ljava.lang.Object;, ()V, notifyAll, null, 47}\n"
- + "wait[METHOD_REF]{wait(), Ljava.lang.Object;, ()V, wait, null, 47}\n"
- + "wait[METHOD_REF]{wait(), Ljava.lang.Object;, (J)V, wait, (millis), 47}\n"
- + "wait[METHOD_REF]{wait(), Ljava.lang.Object;, (JI)V, wait, (millis, nanos), 47}\n"
- + "Bug443091[TYPE_REF]{Bug443091, , LBug443091;, null, null, 52}\n"
- + "clone[METHOD_REF]{clone(), Ljava.lang.Object;, ()Ljava.lang.Object;, clone, null, 52}\n"
- + "equals[METHOD_REF]{equals(), Ljava.lang.Object;, (Ljava.lang.Object;)Z, equals, (obj), 52}\n"
- + "getClass[METHOD_REF]{getClass(), Ljava.lang.Object;, ()Ljava.lang.Class<*>;, getClass, null, 52}\n"
- + "hashCode[METHOD_REF]{hashCode(), Ljava.lang.Object;, ()I, hashCode, null, 52}\n"
- + "toString[METHOD_REF]{toString(), Ljava.lang.Object;, ()Ljava.lang.String;, toString, null, 52}\n"
- + "Consumer<java.lang.Integer>[TYPE_REF]{Consumer, java.util.function, Ljava.util.function.Consumer<Ljava.lang.Integer;>;, null, null, 82}\n"
- + "Function<java.lang.Integer,java.lang.String>[TYPE_REF]{Function, java.util.function, Ljava.util.function.Function<Ljava.lang.Integer;Ljava.lang.String;>;, null, null, 82}\n"
- + "capture[LOCAL_VARIABLE_REF]{capture, null, Ljava.util.function.Consumer<Ljava.lang.Integer;>;, capture, null, 82}\n"
- + "forEach[METHOD_REF]{, LBug443091;, (Ljava.util.function.Consumer<Ljava.lang.Integer;>;)V, forEach, (in), 88}\n"
- + "forEach[METHOD_REF]{, LBug443091;, (Ljava.util.function.Function<Ljava.lang.Integer;Ljava.lang.String;>;)V, forEach, (in), 88}",
- result);
-
-}
-public void testBug575149_expectRemainingOverloadedMethodsMatchingFilledArguments() throws JavaModelException {
- this.workingCopies = new ICompilationUnit[1];
- this.workingCopies[0] = getWorkingCopy(
- "Completion/src/Bug443091.java",
- "import java.util.function.Consumer;\n" +
- "import java.util.function.Function;\n" +
- "\n" +
- "public class Bug443091 {\n" +
- " private void foo() {\n" +
- " Consumer<Integer> capture = null;\n" +
- " forEach(capture, )" +
- " }\n" +
- " private void forEach(Consumer<Integer> in) {}\n" +
- " private void forEach(Consumer<Integer> in, Integer limit) {}\n" +
- "}\n");
-
- CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
- requestor.allowAllRequiredProposals();
- String str = this.workingCopies[0].getSource();
- String completeBehind = "forEach(capture, ";
- int cursorLocation = str.indexOf(completeBehind) + completeBehind.length();
- this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
- String result = requestor.getResults();
- assertResults("finalize[METHOD_REF]{finalize(), Ljava.lang.Object;, ()V, finalize, null, 47}\n"
- + "foo[METHOD_REF]{foo(), LBug443091;, ()V, foo, null, 47}\n"
- + "forEach[METHOD_REF]{forEach(), LBug443091;, (Ljava.util.function.Consumer<Ljava.lang.Integer;>;)V, forEach, (in), 47}\n"
- + "notify[METHOD_REF]{notify(), Ljava.lang.Object;, ()V, notify, null, 47}\n"
- + "notifyAll[METHOD_REF]{notifyAll(), Ljava.lang.Object;, ()V, notifyAll, null, 47}\n"
- + "wait[METHOD_REF]{wait(), Ljava.lang.Object;, ()V, wait, null, 47}\n"
- + "wait[METHOD_REF]{wait(), Ljava.lang.Object;, (J)V, wait, (millis), 47}\n"
- + "wait[METHOD_REF]{wait(), Ljava.lang.Object;, (JI)V, wait, (millis, nanos), 47}\n"
- + "Bug443091[TYPE_REF]{Bug443091, , LBug443091;, null, null, 52}\n"
- + "capture[LOCAL_VARIABLE_REF]{capture, null, Ljava.util.function.Consumer<Ljava.lang.Integer;>;, capture, null, 52}\n"
- + "clone[METHOD_REF]{clone(), Ljava.lang.Object;, ()Ljava.lang.Object;, clone, null, 52}\n"
- + "equals[METHOD_REF]{equals(), Ljava.lang.Object;, (Ljava.lang.Object;)Z, equals, (obj), 52}\n"
- + "getClass[METHOD_REF]{getClass(), Ljava.lang.Object;, ()Ljava.lang.Class<*>;, getClass, null, 52}\n"
- + "toString[METHOD_REF]{toString(), Ljava.lang.Object;, ()Ljava.lang.String;, toString, null, 52}\n"
- + "hashCode[METHOD_REF]{hashCode(), Ljava.lang.Object;, ()I, hashCode, null, 72}\n"
- + "Integer[TYPE_REF]{Integer, java.lang, Ljava.lang.Integer;, null, null, 82}\n"
- + "forEach[METHOD_REF]{, LBug443091;, (Ljava.util.function.Consumer<Ljava.lang.Integer;>;Ljava.lang.Integer;)V, forEach, (in, limit), 83}",
- result);
-
-}
}
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 11a4ccc..0002480 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
@@ -844,9 +844,6 @@
private int foundConstructorsCount;
private ObjectVector acceptedConstructors;
- // Introduce to disable Bug575149
- private static final boolean DISABLE_OVERLOAD_EXPERIMENT = Boolean.parseBoolean(System.getProperty("org.eclipse.jdt.disableOverloadExperiment", "false")); //$NON-NLS-1$ //$NON-NLS-2$
-
/**
* The CompletionEngine is responsible for computing source completions.
*
@@ -1978,7 +1975,7 @@
} else if (astNode instanceof CompletionOnMethodReturnType) {
completionOnMethodReturnType(astNode, scope);
} else if (astNode instanceof CompletionOnSingleNameReference) {
- completionOnSingleNameReference(astNode, astNodeParent, scope, insideTypeAnnotation, qualifiedBinding);
+ completionOnSingleNameReference(astNode, astNodeParent, scope, insideTypeAnnotation);
} else if (astNode instanceof CompletionOnProvidesInterfacesQualifiedTypeReference) {
completionOnProvidesInterfacesQualifiedTypeReference(astNode, astNodeParent, qualifiedBinding, scope);
} else if (astNode instanceof CompletionOnProvidesInterfacesSingleTypeReference) {
@@ -3187,9 +3184,9 @@
CompletionOnMessageSend messageSend = (CompletionOnMessageSend) astNode;
TypeBinding[] argTypes = computeTypes(messageSend.arguments);
this.completionToken = messageSend.selector;
- ObjectVector methodsFound = new ObjectVector();
if (qualifiedBinding == null) {
if (!this.requestor.isIgnored(CompletionProposal.METHOD_REF)) {
+ ObjectVector methodsFound = new ObjectVector();
findImplicitMessageSends(this.completionToken, argTypes, scope, messageSend, scope, methodsFound);
@@ -3211,7 +3208,7 @@
argTypes,
(ReferenceBinding)((ReferenceBinding) qualifiedBinding).capture(scope, messageSend.receiver.sourceStart, messageSend.receiver.sourceEnd),
scope,
- methodsFound,
+ new ObjectVector(),
false,
true,
messageSend,
@@ -3227,30 +3224,6 @@
-1,
-1);
}
-
- if(this.assistNodeInJavadoc > 0 || DISABLE_OVERLOAD_EXPERIMENT) {
- return;
- }
- // find completions for first parameters of matching overloaded methods.
- CompletionOnSingleNameReference name = new CompletionOnSingleNameReference(new char[0], (((long)(messageSend.sourceEnd + 1)) << 32) + (messageSend.sourceEnd + 1), false);
-
- MessageSend send = new MessageSend();
- send.receiver = messageSend.receiver;
- send.typeArguments = messageSend.typeArguments;
- send.bits = messageSend.bits;
- send.sourceStart = messageSend.sourceStart;
- send.sourceEnd = messageSend.sourceEnd;
- send.selector = messageSend.selector;
- send.arguments = messageSend.arguments;
- send.resolveType((BlockScope) scope);
-
- computeExpectedTypes(send, name, scope);
- if(this.expectedTypesPtr > -1) {
- // rest of the completion logic must based on first argument completion with the following positions
- this.startPosition = this.endPosition = name.sourceStart;
- this.tokenStart = this.tokenEnd = name.sourceStart;
- completionOnSingleNameReference(name, messageSend, scope, false, qualifiedBinding, methodsFound);
- }
}
private void completionOnMessageSendName(ASTNode astNode, Binding qualifiedBinding, Scope scope) {
@@ -3801,11 +3774,7 @@
}
private void completionOnSingleNameReference(ASTNode astNode, ASTNode astNodeParent, Scope scope,
- boolean insideTypeAnnotation, Binding qualifiedBinding) {
- completionOnSingleNameReference(astNode, astNodeParent, scope, insideTypeAnnotation, qualifiedBinding, new ObjectVector());
- }
- private void completionOnSingleNameReference(ASTNode astNode, ASTNode astNodeParent, Scope scope,
- boolean insideTypeAnnotation, Binding qualifiedBinding, ObjectVector methodsFound) {
+ boolean insideTypeAnnotation) {
CompletionOnSingleNameReference singleNameReference = (CompletionOnSingleNameReference) astNode;
this.completionToken = singleNameReference.token;
SwitchStatement switchStatement = astNodeParent instanceof SwitchStatement ? (SwitchStatement) astNodeParent : null;
@@ -3877,28 +3846,13 @@
checkCancel();
- if(!DISABLE_OVERLOAD_EXPERIMENT && this.assistNodeInJavadoc == 0 && singleNameReference.token.length == 0
- && methodsFound.size() == 0 && (astNodeParent instanceof MessageSend)) {
- MessageSend message = (MessageSend) astNodeParent;
-
- // find only overloads by performing a exact match
- findMethods(message.selector, null, computeTypes(message.arguments),
- (ReferenceBinding)((ReferenceBinding) message.actualReceiverType).capture(scope, message.receiver.sourceStart, message.receiver.sourceEnd),
- scope, methodsFound, false, true, message, scope,
- false, message.receiver instanceof SuperReference,
- false,
- null, null, null,
- false, null,
- -1, -1);
- }
-
findVariablesAndMethods(
this.completionToken,
scope,
singleNameReference,
scope,
insideTypeAnnotation,
- singleNameReference.isInsideAnnotationAttribute, methodsFound);
+ singleNameReference.isInsideAnnotationAttribute);
checkCancel();
@@ -4541,7 +4495,7 @@
}
}
- if(this.expectedTypesPtr > -1 && this.expectedTypesPtr + 1 != this.expectedTypes.length) {
+ if(this.expectedTypesPtr + 1 != this.expectedTypes.length) {
System.arraycopy(this.expectedTypes, 0, this.expectedTypes = new TypeBinding[this.expectedTypesPtr + 1], 0, this.expectedTypesPtr + 1);
}
}
@@ -4593,6 +4547,9 @@
InvocationSite invocationSite,
boolean isStatic) {
+ if (arguments == null)
+ return;
+
MethodBinding[] methods = binding.availableMethods();
nextMethod : for (int i = 0; i < methods.length; i++) {
MethodBinding method = methods[i];
@@ -4610,30 +4567,24 @@
if(!CharOperation.equals(method.selector, selector)) continue nextMethod;
TypeBinding[] parameters = method.parameters;
- if(method.parameters.length == 0) {
+ if(parameters.length < arguments.length)
continue nextMethod;
- }
- int completionArgIndex = 0;
- if(arguments != null) {
- if(parameters.length < arguments.length)
+ int length = arguments.length - 1;
+ int completionArgIndex = arguments.length - 1;
+
+ for (int j = 0; j < length; j++) {
+ Expression argument = arguments[j];
+ TypeBinding argType = argument.resolvedType;
+ if(argType != null && !argType.erasure().isCompatibleWith(parameters[j].erasure()))
continue nextMethod;
- int length = arguments.length - 1;
- completionArgIndex = arguments.length - 1;
-
- for (int j = 0; j < length; j++) {
- Expression argument = arguments[j];
- TypeBinding argType = argument.resolvedType;
- if(argType != null && !argType.erasure().isCompatibleWith(parameters[j].erasure()))
- continue nextMethod;
-
- if((argument.sourceStart >= this.startPosition)
- && (argument.sourceEnd <= this.endPosition)) {
- completionArgIndex = j;
- }
+ if((argument.sourceStart >= this.startPosition)
+ && (argument.sourceEnd <= this.endPosition)) {
+ completionArgIndex = j;
}
}
+
TypeBinding expectedType = method.parameters[completionArgIndex];
if(expectedType != null) {
addExpectedType(expectedType, scope);
@@ -5026,14 +4977,6 @@
return 0;
}
- private int computeRelevanceForOverload(MethodBinding method, char[] overloadSelector, boolean completingOverloadedMethod) {
- if(!DISABLE_OVERLOAD_EXPERIMENT && CharOperation.equals(method.selector, overloadSelector) && completingOverloadedMethod) {
- return R_METHOD_OVERLOAD;
- }
- return 0;
- }
-
-
private long computeTargetedElement(CompletionOnAnnotationOfType fakeNode) {
ASTNode annotatedElement = fakeNode.potentialAnnotatedNode;
@@ -9245,22 +9188,6 @@
int minTypeArgLength = typeArgTypes == null ? 0 : typeArgTypes.length;
int minArgLength = argTypes == null ? 0 : argTypes.length;
- // find if the current method in search is an overloaded method.
- int sameNameCount = 0;
- boolean currentMethodIsOverloaded = false;
- if(this.assistNodeInJavadoc == 0) {
- for (MethodBinding methodBinding : methods) {
- if(CharOperation.equals(methodName, methodBinding.selector) &&
- TypeBinding.equalsEquals(receiverType, methodBinding.declaringClass)) {
- sameNameCount++;
- if(sameNameCount == 2) {
- currentMethodIsOverloaded = true;
- break;
- }
- }
- }
- }
-
next : for (int f = methods.length; --f >= 0;) {
MethodBinding method = methods[f];
@@ -9470,7 +9397,6 @@
relevance += computeRelevanceForMissingElements(missingElementsHaveProblems);
}
relevance += computeRelevanceForSuper(method, scope, invocationSite);
- relevance += computeRelevanceForOverload(method, methodName, currentMethodIsOverloaded);
this.noProposal = false;
if (castedReceiver == null) {
@@ -12713,25 +12639,13 @@
}
}
-
- private void findVariablesAndMethods(
- char[] token,
- Scope scope,
- InvocationSite invocationSite,
- Scope invocationScope,
- boolean insideTypeAnnotation,
- boolean insideAnnotationAttribute) {
- findVariablesAndMethods(token, scope, invocationSite, invocationScope, insideTypeAnnotation,
- insideAnnotationAttribute, new ObjectVector());
- }
-
private void findVariablesAndMethods(
char[] token,
Scope scope,
InvocationSite invocationSite,
Scope invocationScope,
boolean insideTypeAnnotation,
- boolean insideAnnotationAttribute, ObjectVector methodsFound) {
+ boolean insideAnnotationAttribute) {
if (token == null)
return;
@@ -12745,6 +12659,7 @@
ObjectVector localsFound = new ObjectVector();
ObjectVector fieldsFound = new ObjectVector();
+ ObjectVector methodsFound = new ObjectVector();
Scope currentScope = scope;
diff --git a/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/RelevanceConstants.java b/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/RelevanceConstants.java
index f412bfd..6e43a84 100644
--- a/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/RelevanceConstants.java
+++ b/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/RelevanceConstants.java
@@ -61,5 +61,4 @@
int R_FINAL = 3; // https://bugs.eclipse.org/bugs/show_bug.cgi?id=195346
int R_CONSTRUCTOR = 3; // https://bugs.eclipse.org/bugs/show_bug.cgi?id=373409
int R_MODULE_DECLARATION = 31;
- int R_METHOD_OVERLOAD = 32;
}