Skip to content

Commit 260404b

Browse files
committed
Consistently detect wildcard without bounds as unresolvable
Closes gh-32327 See gh-20727
1 parent 567547b commit 260404b

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

spring-core/src/main/java/org/springframework/core/ResolvableType.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -325,7 +325,7 @@ private boolean isAssignableFrom(ResolvableType other, boolean strict,
325325
other.getComponentType(), true, matchedBefore, upUntilUnresolvable));
326326
}
327327

328-
if (upUntilUnresolvable && other.isUnresolvableTypeVariable()) {
328+
if (upUntilUnresolvable && (other.isUnresolvableTypeVariable() || other.isWildcardWithoutBounds())) {
329329
return true;
330330
}
331331

spring-core/src/test/java/org/springframework/core/ResolvableTypeTests.java

+17-1
Original file line numberDiff line numberDiff line change
@@ -1367,6 +1367,18 @@ void spr16456() throws Exception {
13671367
assertThat(type.resolveGeneric()).isEqualTo(Integer.class);
13681368
}
13691369

1370+
@Test
1371+
void gh32327() throws Exception {
1372+
ResolvableType repository1 = ResolvableType.forField(Fields.class.getField("repository"));
1373+
ResolvableType repository2 = ResolvableType.forMethodReturnType(Methods.class.getMethod("repository"));
1374+
assertThat(repository1.hasUnresolvableGenerics());
1375+
assertThat(repository1.isAssignableFrom(repository2)).isFalse();
1376+
assertThat(repository1.isAssignableFromResolvedPart(repository2)).isTrue();
1377+
assertThat(repository2.hasUnresolvableGenerics());
1378+
assertThat(repository2.isAssignableFrom(repository1)).isTrue();
1379+
assertThat(repository2.isAssignableFromResolvedPart(repository1)).isTrue();
1380+
}
1381+
13701382

13711383
private ResolvableType testSerialization(ResolvableType type) throws Exception {
13721384
ByteArrayOutputStream bos = new ByteArrayOutputStream();
@@ -1407,7 +1419,7 @@ static class ExtendsMap extends HashMap<String, Integer> {
14071419
}
14081420

14091421

1410-
interface SomeRepository {
1422+
interface SomeRepository<S extends Serializable> {
14111423

14121424
<T> T someMethod(Class<T> arg0, Class<?> arg1, Class<Object> arg2);
14131425
}
@@ -1458,6 +1470,8 @@ static class Fields<T> {
14581470
public Integer[] integerArray;
14591471

14601472
public int[] intArray;
1473+
1474+
public SomeRepository<? extends Serializable> repository;
14611475
}
14621476

14631477

@@ -1486,6 +1500,8 @@ interface Methods<T> {
14861500
List<String> list1();
14871501

14881502
List<String> list2();
1503+
1504+
SomeRepository<?> repository();
14891505
}
14901506

14911507

0 commit comments

Comments
 (0)