2727import org .junit .jupiter .params .provider .MethodSource ;
2828import org .springframework .core .MethodParameter ;
2929import org .springframework .core .ResolvableType ;
30+ import org .springframework .data .geo .Distance ;
31+ import org .springframework .data .geo .GeoResult ;
32+ import org .springframework .data .geo .Point ;
3033import org .springframework .javapoet .ClassName ;
3134import org .springframework .javapoet .ParameterizedTypeName ;
3235import org .springframework .javapoet .TypeName ;
@@ -136,6 +139,20 @@ void resolvedTypeNamesForMethodParameters() {
136139 assertThat (TypeNames .typeName (resolvedReturnType )).extracting (TypeName ::toString ).isEqualTo ("RT" );
137140 assertThat (TypeNames .resolvedTypeName (resolvedReturnType )).isEqualTo (TypeName .get (Object .class ));
138141 });
142+
143+ ReflectionUtils .doWithMethods (Concrete .class , method -> {
144+ if (!method .getName ().contains ("findByLocationNear" )) {
145+ return ;
146+ }
147+
148+ ResolvableType resolvedReturnType = ResolvableType .forMethodReturnType (method , Concrete .class );
149+
150+ assertThat (TypeNames .typeName (resolvedReturnType )).extracting (TypeName ::toString ).isEqualTo (
151+ "java.util.List<org.springframework.data.geo.GeoResult<org.springframework.data.javapoet.TypeNamesUnitTests.MyType>>" );
152+ assertThat (TypeNames .resolvedTypeName (resolvedReturnType )).isEqualTo (ParameterizedTypeName
153+ .get (ClassName .get (java .util .List .class ), ParameterizedTypeName .get (GeoResult .class , MyType .class )));
154+ });
155+
139156 }
140157
141158 interface GenericBase <T > {
@@ -147,6 +164,7 @@ interface GenericBase<T> {
147164
148165 interface Concrete extends GenericBase <MyType > {
149166
167+ List <GeoResult <MyType >> findByLocationNear (Point point , Distance maxDistance );
150168 }
151169
152170 static class MyType {}
0 commit comments