Bug 562382 - [11] NPE on anonymous class with inferred generics

Change-Id: I56e838b57cc6d01cdf8f0735940da4a73045b873
Also-by: Andrey Loskutov <loskutov@gmx.de>
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ResolveTests10.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ResolveTests10.java
index c086841..863d50d 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ResolveTests10.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ResolveTests10.java
@@ -127,4 +127,31 @@
 				Signature.getUnionTypeBounds(typeSignature) // method name is wrong, it actually means: getIntersectionTypeBounds
 			);
 	}
+	public void testBug562382() throws CoreException {
+		this.wc = getWorkingCopy("/Resolve/src/X.java",
+				"class X {\n" +
+				"	class Number {};\n" +
+				"	class Integer extends Number {};\n" +
+				"	interface Function<T, R> {\n" +
+				"	    R apply(T t);\n" +
+				"	}\n" +
+				"	Function<Number, Integer> fail() {\n" +
+				"		return new Function<>() {\n" +
+				"			@Override\n" +
+				"			public Integer apply(Number t) {\n" +
+				"				return null;\n" +
+				"			}\n" +
+				"		};\n" +
+				"	}\n" +
+				"}"
+				);
+		String str = this.wc.getSource();
+		String selection = "Number";
+		int start = str.lastIndexOf(selection);
+		int length = selection.length();
+
+		IJavaElement[] selected = this.wc.codeSelect(start, length);
+		assertEquals(1, selected.length);
+		assertEquals("Number", selected[0].getElementName());
+	}
 }
diff --git a/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/select/SelectionParser.java b/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/select/SelectionParser.java
index fea7d23..2a8bb8b 100644
--- a/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/select/SelectionParser.java
+++ b/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/select/SelectionParser.java
@@ -678,14 +678,6 @@
 protected void consumeFormalParameter(boolean isVarArgs) {
 	if (this.indexOfAssistIdentifier() < 0) {
 		super.consumeFormalParameter(isVarArgs);
-		if((!this.diet || this.dietInt != 0) && this.astPtr > -1) {
-			Argument argument = (Argument) this.astStack[this.astPtr];
-			if(argument.type == this.assistNode) {
-				this.isOrphanCompletionNode = true;
-				this.restartRecovery	= true;	// force to restart in recovery mode
-				this.lastIgnoredToken = -1;
-			}
-		}
 	} else {
 		boolean isReceiver = this.intStack[this.intPtr--] == 0;
 	    if (isReceiver) {