diff --git a/spring-core/src/test/java/org/springframework/core/GenericTypeResolverTests.java b/spring-core/src/test/java/org/springframework/core/GenericTypeResolverTests.java index c140a5cfc5c..0b04f859d56 100644 --- a/spring-core/src/test/java/org/springframework/core/GenericTypeResolverTests.java +++ b/spring-core/src/test/java/org/springframework/core/GenericTypeResolverTests.java @@ -239,6 +239,13 @@ class GenericTypeResolverTests { assertThat(resolvableType.resolveGenerics()).containsExactly(Object.class); } + @Test // gh-28904 + void resolveGenericWithDifferentInterfaceOrder() { + Type f = First.class.getTypeParameters()[0]; + assertThat(resolveType(f, FirstSecondService.class)).isEqualTo(Integer.class); + assertThat(resolveType(f, SecondFirstService.class)).isEqualTo(Integer.class); + } + private static Method method(Class target, String methodName, Class... parameterTypes) { Method method = findMethod(target, methodName, parameterTypes); assertThat(method).describedAs(target.getName() + "#" + methodName).isNotNull(); @@ -428,4 +435,25 @@ class GenericTypeResolverTests { interface IdFixingRepository extends Repository { } + interface First { + + default void foo(F f) { + // ... + } + } + + interface Second { + + default void bar(B b) { + // ... + } + } + + static class FirstSecondService implements First, Second { + } + + static class SecondFirstService implements Second, First { + } + + }