diff --git a/spring-core/src/test/java/org/springframework/core/ResolvableTypeTests.java b/spring-core/src/test/java/org/springframework/core/ResolvableTypeTests.java index ba58532c74f..3ca17918b53 100644 --- a/spring-core/src/test/java/org/springframework/core/ResolvableTypeTests.java +++ b/spring-core/src/test/java/org/springframework/core/ResolvableTypeTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2020 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -1159,6 +1159,20 @@ class ResolvableTypeTests { assertThatResolvableType(complex4).isNotAssignableFrom(complex3); } + @Test + void identifyTypeVariable() throws Exception { + Method method = ClassArguments.class.getMethod("typedArgumentFirst", Class.class, Class.class, Class.class); + ResolvableType returnType = ResolvableType.forMethodReturnType(method, ClassArguments.class); + + ResolvableType arg0 = ResolvableType.forMethodParameter(method, 0, ClassArguments.class); + ResolvableType arg1 = ResolvableType.forMethodParameter(method, 1, ClassArguments.class); + ResolvableType arg2 = ResolvableType.forMethodParameter(method, 2, ClassArguments.class); + + assertThat(returnType.getType().equals(arg0.as(Class.class).getGeneric(0).getType())).isTrue(); + assertThat(returnType.getType().equals(arg1.as(Class.class).getGeneric(0).getType())).isFalse(); + assertThat(returnType.getType().equals(arg2.as(Class.class).getGeneric(0).getType())).isFalse(); + } + @Test void hashCodeAndEquals() throws Exception { ResolvableType forClass = ResolvableType.forClass(List.class); @@ -1427,6 +1441,10 @@ class ResolvableTypeTests { } + interface TypedMethods extends Methods { + } + + static class AssignmentBase { public O o; @@ -1479,7 +1497,9 @@ class ResolvableTypeTests { } - interface TypedMethods extends Methods { + interface ClassArguments { + + T typedArgumentFirst(Class arg0, Class arg1, Class arg2); }