mirror of
https://github.com/spring-projects/spring-framework
synced 2026-06-08 17:33:33 +00:00
Use ResolvableType in GenericTypeResolver
Refactor GenericTypeResolver to make use of ResolvableType for generic resolution. Issue: SPR-10978
This commit is contained in:
@@ -25,6 +25,7 @@ import java.util.Map;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.hamcrest.Matchers.*;
|
||||
import static org.junit.Assert.*;
|
||||
import static org.springframework.core.GenericTypeResolver.*;
|
||||
import static org.springframework.util.ReflectionUtils.*;
|
||||
@@ -158,6 +159,43 @@ public class GenericTypeResolverTests {
|
||||
assertEquals(B.class, resolveTypeArgument(TestImpl.class, ITest.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetTypeVariableMap() throws Exception {
|
||||
Map<TypeVariable, Type> map;
|
||||
|
||||
map = GenericTypeResolver.getTypeVariableMap(MySimpleInterfaceType.class);
|
||||
assertThat(map.toString(), equalTo("{T=class java.lang.String}"));
|
||||
|
||||
map = GenericTypeResolver.getTypeVariableMap(MyCollectionInterfaceType.class);
|
||||
assertThat(map.toString(), equalTo("{T=java.util.Collection<java.lang.String>}"));
|
||||
|
||||
map = GenericTypeResolver.getTypeVariableMap(MyCollectionSuperclassType.class);
|
||||
assertThat(map.toString(), equalTo("{T=java.util.Collection<java.lang.String>}"));
|
||||
|
||||
map = GenericTypeResolver.getTypeVariableMap(MySimpleTypeWithMethods.class);
|
||||
assertThat(map.toString(), equalTo("{T=class java.lang.Integer}"));
|
||||
|
||||
map = GenericTypeResolver.getTypeVariableMap(TopLevelClass.class);
|
||||
assertThat(map.toString(), equalTo("{}"));
|
||||
|
||||
map = GenericTypeResolver.getTypeVariableMap(TypedTopLevelClass.class);
|
||||
assertThat(map.toString(), equalTo("{T=class java.lang.Integer}"));
|
||||
|
||||
map = GenericTypeResolver.getTypeVariableMap(TypedTopLevelClass.TypedNested.class);
|
||||
assertThat(map.size(), equalTo(2));
|
||||
Type t = null;
|
||||
Type x = null;
|
||||
for (Map.Entry<TypeVariable, Type> entry : map.entrySet()) {
|
||||
if(entry.getKey().toString().equals("T")) {
|
||||
t = entry.getValue();
|
||||
}
|
||||
else {
|
||||
x = entry.getValue();
|
||||
}
|
||||
}
|
||||
assertThat(t, equalTo((Type) Integer.class));
|
||||
assertThat(x, equalTo((Type) Long.class));
|
||||
}
|
||||
|
||||
public interface MyInterfaceType<T> {
|
||||
}
|
||||
@@ -284,4 +322,14 @@ public class GenericTypeResolverTests {
|
||||
class TestImpl<I extends A, T extends B<I>> extends ITest<T>{
|
||||
}
|
||||
|
||||
static class TopLevelClass<T> {
|
||||
class Nested<X> {
|
||||
}
|
||||
}
|
||||
|
||||
static class TypedTopLevelClass extends TopLevelClass<Integer> {
|
||||
class TypedNested extends Nested<Long> {
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user