Fixed Bug 445669 - java.lang.IllegalStateException at
org.eclipse.jdt.internal.compiler.lookup.UnresolvedReferenceBinding.clone
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/NullTypeAnnotationTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/NullTypeAnnotationTest.java
index 5258ab4..057cb7d 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/NullTypeAnnotationTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/NullTypeAnnotationTest.java
@@ -5886,4 +5886,48 @@
 		"Contradictory null annotations: method was inferred as \'int compare(@NonNull @Nullable Integer, @NonNull @Nullable Integer)\', but only one of \'@NonNull\' and \'@Nullable\' can be effective at any location\n" + 
 		"----------\n");
 }
+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=445669, java.lang.IllegalStateException at org.eclipse.jdt.internal.compiler.lookup.UnresolvedReferenceBinding.clone
+public void test445669() {
+	Map options = getCompilerOptions();
+	runConformTestWithLibs(
+		new String[] {
+			"Y.java",
+			"import org.eclipse.jdt.annotation.*;\n" +
+			"@NonNullByDefault(DefaultLocation.FIELD)\n" +
+			"public class Y {\n" +
+			"	public Z.ZI zzi = new Z().new ZI();\n" +
+			"	public Z z = new Z();\n" +
+			"}\n",
+			"Z.java",
+			"public class Z {\n" +
+			"	public class ZI {\n" +
+			"	}\n" +
+			"}\n"
+		},
+		options,
+		"");
+	runNegativeTestWithLibs(
+		new String[] {
+			"X.java",
+			"public class X {\n" +
+			"	public static void main(String[] args) {\n" +
+			"		Y y = new Y();\n" +
+			"		y.zzi = null;\n" +
+			"       y.z = null;\n" +
+			"	}\n" +
+			"}\n"
+		},
+		options,
+		"----------\n" + 
+		"1. ERROR in X.java (at line 4)\n" + 
+		"	y.zzi = null;\n" + 
+		"	        ^^^^\n" + 
+		"Null type mismatch: required \'Z.@NonNull ZI\' but the provided value is null\n" + 
+		"----------\n" + 
+		"2. ERROR in X.java (at line 5)\n" + 
+		"	y.z = null;\n" + 
+		"	      ^^^^\n" + 
+		"Null type mismatch: required \'@NonNull Z\' but the provided value is null\n" + 
+		"----------\n");
+}
 }
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/UnresolvedReferenceBinding.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/UnresolvedReferenceBinding.java
index 163b799..ce4f3d8 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/UnresolvedReferenceBinding.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/UnresolvedReferenceBinding.java
@@ -39,8 +39,8 @@
 }
 
 public TypeBinding clone(TypeBinding outerType) {
-	if (this.resolvedType != null || this.depth() > 0)
-		throw new IllegalStateException();
+	if (this.resolvedType != null)
+		return this.resolvedType.clone(outerType);
 	UnresolvedReferenceBinding copy = new UnresolvedReferenceBinding(this);
 	this.addWrapper(copy, null);
 	return copy;