Fixed IType.isAssignableFrom for null type parameter.

Change-Id: I25bfd4e7188006b11f10bd8a1b49dc1532f4cf81
diff --git a/query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/validation/type/AbstractType.java b/query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/validation/type/AbstractType.java
index 11a1ce3..75db616 100644
--- a/query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/validation/type/AbstractType.java
+++ b/query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/validation/type/AbstractType.java
@@ -76,15 +76,18 @@
 	 * @since 4.1
 	 */
 	protected boolean isAssignableFrom(Class<?> toType, Class<?> fromType) {
-		Class<?> wrappedToType = wrapPrimitive(toType);
-		Class<?> wrappedFromType = wrapPrimitive(fromType);
+		final boolean result;
 
-		boolean result = false;
-		if (toType == null || fromType == null) {
+		final Class<?> wrappedToType = wrapPrimitive(toType);
+		final Class<?> wrappedFromType = wrapPrimitive(fromType);
+		if (toType == null) {
 			result = false;
+		} else if (fromType == null) {
+			result = true;
 		} else {
 			result = wrappedToType.isAssignableFrom(wrappedFromType);
 		}
+
 		return result;
 	}
 
diff --git a/query/tests/org.eclipse.acceleo.query.tests/src/org/eclipse/acceleo/query/tests/validation/types/TypeTests.java b/query/tests/org.eclipse.acceleo.query.tests/src/org/eclipse/acceleo/query/tests/validation/types/TypeTests.java
index dc8fee6..b393736 100644
--- a/query/tests/org.eclipse.acceleo.query.tests/src/org/eclipse/acceleo/query/tests/validation/types/TypeTests.java
+++ b/query/tests/org.eclipse.acceleo.query.tests/src/org/eclipse/acceleo/query/tests/validation/types/TypeTests.java
@@ -382,6 +382,53 @@
 		}
 	}
 
+	@Test
+	public void testAssignableFromNullToEClass() {
+		getQueryEnvironment().registerEPackage(EcorePackage.eINSTANCE);
+		final EClassifierType toType = eClassifierType(EcorePackage.eINSTANCE.getEClass());
+		final ClassType fromType = classType(null);
+
+		assertTrue(toType.getType() + " should have been assignable from " + fromType.getType(), toType
+				.isAssignableFrom(fromType));
+	}
+
+	@Test
+	public void testAssignableFromNullToObject() {
+		final ClassType toType = classType(Object.class);
+		final ClassType fromType = classType(null);
+
+		assertTrue(toType.getType() + " should have been assignable from " + fromType.getType(), toType
+				.isAssignableFrom(fromType));
+	}
+
+	@Test
+	public void testAssignableFromEClassToNull() {
+		getQueryEnvironment().registerEPackage(EcorePackage.eINSTANCE);
+		final ClassType toType = classType(null);
+		final EClassifierType fromType = eClassifierType(EcorePackage.eINSTANCE.getEClass());
+
+		assertFalse(toType.getType() + " should not have been assignable from " + fromType.getType(), toType
+				.isAssignableFrom(fromType));
+	}
+
+	@Test
+	public void testAssignableFromObjectToNull() {
+		final ClassType toType = classType(null);
+		final ClassType fromType = classType(Object.class);
+
+		assertFalse(toType.getType() + " should not have been assignable from " + fromType.getType(), toType
+				.isAssignableFrom(fromType));
+	}
+
+	@Test
+	public void testAssignableFromNullToNull() {
+		final ClassType toType = classType(null);
+		final ClassType fromType = classType(null);
+
+		assertFalse(toType.getType() + " should not have been assignable from " + fromType.getType(), toType
+				.isAssignableFrom(fromType));
+	}
+
 	protected IQueryEnvironment getQueryEnvironment() {
 		return queryEnvironment;
 	}