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(),
+    		"");
+    }
 }