Bug 486292: NPE in Dependencies.ensureBindingState():989
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/control/Dependencies.java b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/control/Dependencies.java
index 7e796b0..e4ecbce 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/control/Dependencies.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/control/Dependencies.java
@@ -33,7 +33,6 @@
import org.eclipse.jdt.internal.compiler.impl.CompilerOptions.WeavingScheme;
import org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding;
import org.eclipse.jdt.internal.compiler.lookup.Binding;
-import org.eclipse.jdt.internal.compiler.lookup.CaptureBinding;
import org.eclipse.jdt.internal.compiler.lookup.ClassScope;
import org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment;
import org.eclipse.jdt.internal.compiler.lookup.MemberTypeBinding;
@@ -46,6 +45,7 @@
import org.eclipse.jdt.internal.compiler.lookup.TypeBinding;
import org.eclipse.jdt.internal.compiler.lookup.TypeConstants;
import org.eclipse.jdt.internal.compiler.lookup.TypeIds;
+import org.eclipse.jdt.internal.compiler.lookup.TypeVariableBinding;
import org.eclipse.jdt.internal.compiler.parser.Parser;
import org.eclipse.objectteams.otdt.core.compiler.IOTConstants;
import org.eclipse.objectteams.otdt.core.compiler.OTNameUtils;
@@ -485,11 +485,10 @@
TypeBinding proto = type.prototype();
if (proto instanceof ReferenceBinding)
type = (ReferenceBinding) proto;
- if (type instanceof CaptureBinding) {
+ if (type.isTypeVariable()) {
boolean success = true;
- CaptureBinding capture = (CaptureBinding)type;
- success &= ensureBindingState(capture.superclass, state);
- for (ReferenceBinding superIfc : capture.superInterfaces) {
+ success &= ensureBindingState(((TypeVariableBinding) type).superclass, state);
+ for (ReferenceBinding superIfc : ((TypeVariableBinding) type).superInterfaces) {
success &= ensureBindingState(superIfc, state);
}
return success;
diff --git a/testplugins/org.eclipse.objectteams.otdt.tests/otjld/org/eclipse/objectteams/otdt/tests/otjld/other/OTNullTypeAnnotationTest.java b/testplugins/org.eclipse.objectteams.otdt.tests/otjld/org/eclipse/objectteams/otdt/tests/otjld/other/OTNullTypeAnnotationTest.java
index b851ad5..f1f7386 100644
--- a/testplugins/org.eclipse.objectteams.otdt.tests/otjld/org/eclipse/objectteams/otdt/tests/otjld/other/OTNullTypeAnnotationTest.java
+++ b/testplugins/org.eclipse.objectteams.otdt.tests/otjld/org/eclipse/objectteams/otdt/tests/otjld/other/OTNullTypeAnnotationTest.java
@@ -255,4 +255,23 @@
"----------\n");
}
+ public void testBug486292() {
+ runConformTestWithLibs(
+ new String[] {
+ "X.java",
+ "import java.util.*;\n" +
+ "import org.eclipse.jdt.annotation.*;\n" +
+ "public class X {\n" +
+ " public static <C extends Collection<?>>@NonNull C requireNonEmpty(@Nullable C value) {\n" +
+ " if ((value == null))\n" +
+ " throw new NullPointerException();\n" +
+ " if (value.isEmpty())\n" +
+ " throw new IllegalArgumentException();\n" +
+ " return value;\n" +
+ " }\n" +
+ "}\n"
+ },
+ getCompilerOptions(),
+ "");
+ }
}