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;
 }