From 7214144c8d32586d44945b0165b986a868e0003b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A9rard=20Paligot?= Date: Wed, 21 Sep 2016 15:46:14 +0200 Subject: [PATCH] fix(factory): Handles null parameter in Type#createReference(Class) and isSubTypeOf. (Closes #825) --- src/main/java/spoon/reflect/factory/TypeFactory.java | 3 +++ .../reflect/reference/CtTypeReferenceImpl.java | 6 +----- .../java/spoon/test/reference/TypeReferenceTest.java | 11 +++++++++++ 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/main/java/spoon/reflect/factory/TypeFactory.java b/src/main/java/spoon/reflect/factory/TypeFactory.java index aaf0597f31a..6b5d35c8dc5 100644 --- a/src/main/java/spoon/reflect/factory/TypeFactory.java +++ b/src/main/java/spoon/reflect/factory/TypeFactory.java @@ -293,6 +293,9 @@ public CtArrayTypeReference createArrayReference(String qualifiedName) { * Creates a reference to a simple type */ public CtTypeReference createReference(Class type) { + if (type == null) { + return null; + } if (type.isArray()) { CtArrayTypeReference array = factory.Core().createArrayTypeReference(); array.setComponentType(createReference(type.getComponentType())); diff --git a/src/main/java/spoon/support/reflect/reference/CtTypeReferenceImpl.java b/src/main/java/spoon/support/reflect/reference/CtTypeReferenceImpl.java index 0122106ec8a..779bf1d67d1 100644 --- a/src/main/java/spoon/support/reflect/reference/CtTypeReferenceImpl.java +++ b/src/main/java/spoon/support/reflect/reference/CtTypeReferenceImpl.java @@ -257,11 +257,7 @@ public boolean isSubtypeOf(CtTypeReference type) { } } CtTypeReference superType = getFactory().Type().createReference(actualSubType.getSuperclass()); - if (superType.equals(type)) { - return true; - } else { - return superType.isSubtypeOf(type); - } + return superType != null && (superType.equals(type) || superType.isSubtypeOf(type)); } catch (Exception e) { Launcher.LOGGER.error("cannot determine runtime types for '" + this + "' and '" + type + "'", e); return false; diff --git a/src/test/java/spoon/test/reference/TypeReferenceTest.java b/src/test/java/spoon/test/reference/TypeReferenceTest.java index f13de5818ce..4a593c43138 100644 --- a/src/test/java/spoon/test/reference/TypeReferenceTest.java +++ b/src/test/java/spoon/test/reference/TypeReferenceTest.java @@ -546,4 +546,15 @@ public void testImproveAPIActualTypeReference() throws Exception { assertEquals(1, typeReference.getActualTypeArguments().size()); } + + @Test + public void testIsSubTypeSuperClassNull() throws Exception { + Factory factory = createFactory(); + + factory.Class().create("Tacos"); + CtTypeReference subRef = factory.Type().createReference(AutoCloseable.class); + CtTypeReference superRef = factory.Type().createReference("Tacos"); + + assertFalse(subRef.isSubtypeOf(superRef)); + } }