diff --git a/src/main/java/com/fasterxml/classmate/ResolvedType.java b/src/main/java/com/fasterxml/classmate/ResolvedType.java index 9e0ab68..f643a0d 100644 --- a/src/main/java/com/fasterxml/classmate/ResolvedType.java +++ b/src/main/java/com/fasterxml/classmate/ResolvedType.java @@ -96,6 +96,26 @@ public final boolean canCreateSubtype(Class subtype) { */ public abstract List getImplementedInterfaces(); + /** + * Returns Ordered list of parent, current and interfaces of this type. + * + * @return List of parent, current and interfaces of this type containing at least current type + */ + public List getAllTypes() { + List allTypes = new ArrayList(); + ResolvedType parentClass = getParentClass(); + if (parentClass != null) { + allTypes.add(parentClass); + } + allTypes.add(this); + List implementedInterfaces = getImplementedInterfaces(); + if (implementedInterfaces != null) { + allTypes.addAll(implementedInterfaces); + } + + return allTypes; + }; + /** * Returns list of generic type declarations for this type, in order they * are declared in class description. diff --git a/src/test/java/com/fasterxml/classmate/ResolvedTypeTest.java b/src/test/java/com/fasterxml/classmate/ResolvedTypeTest.java index 60a46da..94f8ca9 100644 --- a/src/test/java/com/fasterxml/classmate/ResolvedTypeTest.java +++ b/src/test/java/com/fasterxml/classmate/ResolvedTypeTest.java @@ -19,7 +19,13 @@ private static class Foo16 extends Bar16 { } private static class Bar16 extends Zen16 { } private static class Zen16 { } - + + private static class ClassWithInterfaces implements FirstInterface, SecondInterface { } + + interface FirstInterface {} + + interface SecondInterface {} + @Test public void testCanCreateSubtype() { ResolvedObjectType stringType = ResolvedObjectType.create(String.class, null, null, null); @@ -140,4 +146,19 @@ public void testIssue16() assertEquals(Bar16.class, params.get(0).getErasedType()); assertEquals(Foo16.class, params.get(1).getErasedType()); } + + @Test + public void testFindAllClasses() { + TypeResolver resolver = new TypeResolver(); + ResolvedType type = resolver.resolve(ClassWithInterfaces.class); + + List allTypes = type.getAllTypes(); + + assertNotNull(allTypes); + assertEquals(4, allTypes.size()); + assertEquals(Object.class, allTypes.get(0).getErasedType()); + assertEquals(ClassWithInterfaces.class, allTypes.get(1).getErasedType()); + assertEquals(FirstInterface.class, allTypes.get(2).getErasedType()); + assertEquals(SecondInterface.class, allTypes.get(3).getErasedType()); + } }