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;
}