diff --git a/src/main/java/org/springframework/data/util/TypeDiscoverer.java b/src/main/java/org/springframework/data/util/TypeDiscoverer.java index 85c4f2076..03e6eecaa 100644 --- a/src/main/java/org/springframework/data/util/TypeDiscoverer.java +++ b/src/main/java/org/springframework/data/util/TypeDiscoverer.java @@ -148,6 +148,12 @@ class TypeDiscoverer implements TypeInformation { return getTypeArgument(CustomCollections.getMapBaseType(rawType), 0); } + List> arguments = getTypeArguments(); + + if (arguments.size() > 0) { + return arguments.get(0); + } + if (Iterable.class.isAssignableFrom(rawType)) { return getTypeArgument(Iterable.class, 0); } @@ -156,9 +162,7 @@ class TypeDiscoverer implements TypeInformation { return getTypeArgument(rawType, 0); } - List> arguments = getTypeArguments(); - - return arguments.size() > 0 ? arguments.get(0) : null; + return null; } @Override diff --git a/src/test/java/org/springframework/data/util/TypeDiscovererUnitTests.java b/src/test/java/org/springframework/data/util/TypeDiscovererUnitTests.java index 052bfc6c8..4916acce0 100755 --- a/src/test/java/org/springframework/data/util/TypeDiscovererUnitTests.java +++ b/src/test/java/org/springframework/data/util/TypeDiscovererUnitTests.java @@ -31,6 +31,7 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.beans.factory.annotation.Autowire; import org.springframework.core.ResolvableType; +import org.springframework.data.geo.GeoResults; import org.springframework.util.ReflectionUtils; /** @@ -326,6 +327,14 @@ public class TypeDiscovererUnitTests { assertThat(map.getMapValueType().getType()).isEqualTo(String.class); } + @Test + void detectsComponentTypeOfTypedClass() { + + TypeInformation property = TypeInformation.of(GeoResultsWrapper.class).getProperty("results"); + + assertThat(property.getComponentType().getType()).isEqualTo(Leaf.class); + } + class Person { Addresses addresses; @@ -415,4 +424,8 @@ public class TypeDiscovererUnitTests { class EnumMapWrapper { EnumMap map; } + + class GeoResultsWrapper { + GeoResults results; + } }