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) {