Skip to content

Commit 16ec167

Browse files
ResolvedType.getAllTypes() returns parent, this, and interfaces
Fixes FasterXML#50
1 parent 473e70b commit 16ec167

File tree

2 files changed

+42
-1
lines changed

2 files changed

+42
-1
lines changed

src/main/java/com/fasterxml/classmate/ResolvedType.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,26 @@ public final boolean canCreateSubtype(Class<?> subtype) {
9696
*/
9797
public abstract List<ResolvedType> getImplementedInterfaces();
9898

99+
/**
100+
* Returns Ordered list of parent, current and interfaces of this type.
101+
*
102+
* @return List of parent, current and interfaces of this type containing at least current type
103+
*/
104+
public List<ResolvedType> getAllTypes() {
105+
List<ResolvedType> allTypes = new ArrayList<ResolvedType>();
106+
ResolvedType parentClass = getParentClass();
107+
if (parentClass != null) {
108+
allTypes.add(parentClass);
109+
}
110+
allTypes.add(this);
111+
List<ResolvedType> implementedInterfaces = getImplementedInterfaces();
112+
if (implementedInterfaces != null) {
113+
allTypes.addAll(implementedInterfaces);
114+
}
115+
116+
return allTypes;
117+
};
118+
99119
/**
100120
* Returns list of generic type declarations for this type, in order they
101121
* are declared in class description.

src/test/java/com/fasterxml/classmate/ResolvedTypeTest.java

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,13 @@ private static class Foo16 extends Bar16 { }
1919
private static class Bar16 extends Zen16<Bar16, Foo16> { }
2020

2121
private static class Zen16<A, B extends A> { }
22-
22+
23+
private static class ClassWithInterfaces implements FirstInterface, SecondInterface { }
24+
25+
interface FirstInterface {}
26+
27+
interface SecondInterface {}
28+
2329
@Test
2430
public void testCanCreateSubtype() {
2531
ResolvedObjectType stringType = ResolvedObjectType.create(String.class, null, null, null);
@@ -140,4 +146,19 @@ public void testIssue16()
140146
assertEquals(Bar16.class, params.get(0).getErasedType());
141147
assertEquals(Foo16.class, params.get(1).getErasedType());
142148
}
149+
150+
@Test
151+
public void testFindAllClasses() {
152+
TypeResolver resolver = new TypeResolver();
153+
ResolvedType type = resolver.resolve(ClassWithInterfaces.class);
154+
155+
List<ResolvedType> allTypes = type.getAllTypes();
156+
157+
assertNotNull(allTypes);
158+
assertEquals(4, allTypes.size());
159+
assertEquals(Object.class, allTypes.get(0).getErasedType());
160+
assertEquals(ClassWithInterfaces.class, allTypes.get(1).getErasedType());
161+
assertEquals(FirstInterface.class, allTypes.get(2).getErasedType());
162+
assertEquals(SecondInterface.class, allTypes.get(3).getErasedType());
163+
}
143164
}

0 commit comments

Comments
 (0)