diff --git a/impl/core/src/main/java/br/gov/frameworkdemoiselle/util/Reflections.java b/impl/core/src/main/java/br/gov/frameworkdemoiselle/util/Reflections.java index 507618a..d1128b5 100644 --- a/impl/core/src/main/java/br/gov/frameworkdemoiselle/util/Reflections.java +++ b/impl/core/src/main/java/br/gov/frameworkdemoiselle/util/Reflections.java @@ -58,7 +58,7 @@ public final class Reflections { try { paramType = (ParameterizedType) type; } catch (ClassCastException cause) { - paramType = (ParameterizedType) ((Class) type).getGenericSuperclass(); + return getGenericTypeArgument((Class) type, idx); } return (Class) paramType.getActualTypeArguments()[idx]; diff --git a/impl/core/src/test/java/br/gov/frameworkdemoiselle/util/ReflectionsTest.java b/impl/core/src/test/java/br/gov/frameworkdemoiselle/util/ReflectionsTest.java index f1952ff..842850b 100644 --- a/impl/core/src/test/java/br/gov/frameworkdemoiselle/util/ReflectionsTest.java +++ b/impl/core/src/test/java/br/gov/frameworkdemoiselle/util/ReflectionsTest.java @@ -56,6 +56,12 @@ public class ReflectionsTest { assertEquals(Long.class, Reflections.getGenericTypeArgument(members[0], 0)); assertEquals(String.class, Reflections.getGenericTypeArgument(members[1], 0)); } + + @Test + public void testGetGenericTypeArgumentClassMultipleChildren() { + assertEquals(Long.class, Reflections.getGenericTypeArgument(OtherClass3.class, 0)); + assertEquals(String.class, Reflections.getGenericTypeArgument(OtherClass3.class, 1)); + } } class SomeClass { @@ -71,3 +77,11 @@ class OtherClass extends SomeClass { public Class text; } + +class OtherClass2 extends OtherClass { + +} + +class OtherClass3 extends OtherClass2 { + +} -- libgit2 0.21.2