Skip to content

Commit 20bc5ef

Browse files
committed
Accept nested array type for upUntilUnresolvable check as well
Closes gh-33535
1 parent 383fa43 commit 20bc5ef

File tree

3 files changed

+31
-5
lines changed

3 files changed

+31
-5
lines changed

spring-context/src/test/java/org/springframework/context/annotation/Spr16179Tests.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ void repro() {
3838
assertThat(bf.getBean(AssemblerInjection.class).assembler4).isSameAs(bf.getBean("pageAssembler"));
3939
assertThat(bf.getBean(AssemblerInjection.class).assembler5).isSameAs(bf.getBean("pageAssembler"));
4040
assertThat(bf.getBean(AssemblerInjection.class).assembler6).isSameAs(bf.getBean("pageAssembler"));
41+
assertThat(bf.getBean(AssemblerInjection.class).assembler7).isSameAs(bf.getBean("pageAssembler"));
4142
}
4243
}
4344

@@ -80,6 +81,9 @@ public static class AssemblerInjection {
8081

8182
@Autowired(required = false)
8283
PageAssembler<String> assembler6;
84+
85+
@Autowired(required = false)
86+
PageAssembler<String[]> assembler7;
8387
}
8488

8589

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

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -319,17 +319,18 @@ private boolean isAssignableFrom(ResolvableType other, boolean strict,
319319
}
320320
}
321321

322+
if (upUntilUnresolvable && (other.isUnresolvableTypeVariable() || other.isWildcardWithoutBounds())) {
323+
return true;
324+
}
325+
322326
// Deal with array by delegating to the component type
323327
if (isArray()) {
324328
return (other.isArray() && getComponentType().isAssignableFrom(
325329
other.getComponentType(), true, matchedBefore, upUntilUnresolvable));
326330
}
327331

328-
if (upUntilUnresolvable && (other.isUnresolvableTypeVariable() || other.isWildcardWithoutBounds())) {
329-
return true;
330-
}
331-
332-
boolean exactMatch = (strict && matchedBefore != null); // We're checking nested generic variables now...
332+
// We're checking nested generic variables now...
333+
boolean exactMatch = (strict && matchedBefore != null);
333334

334335
// Deal with wildcard bounds
335336
WildcardBounds ourBounds = WildcardBounds.get(this);

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

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1427,6 +1427,23 @@ void gh32327() throws Exception {
14271427
assertThat(repository3.isAssignableFromResolvedPart(repository1)).isFalse();
14281428
}
14291429

1430+
@Test
1431+
void gh33535() throws Exception {
1432+
ResolvableType repository1 = ResolvableType.forField(Fields.class.getField("stringRepository"));
1433+
ResolvableType repository2 = ResolvableType.forField(Fields.class.getField("arrayRepository"));
1434+
ResolvableType repository3 = ResolvableType.forMethodReturnType(Methods.class.getMethod("someRepository"));
1435+
assertThat(repository1.hasUnresolvableGenerics()).isFalse();
1436+
assertThat(repository1.isAssignableFrom(repository3)).isFalse();
1437+
assertThat(repository1.isAssignableFromResolvedPart(repository3)).isTrue();
1438+
assertThat(repository3.isAssignableFrom(repository1)).isTrue();
1439+
assertThat(repository3.isAssignableFromResolvedPart(repository1)).isTrue();
1440+
assertThat(repository2.hasUnresolvableGenerics()).isFalse();
1441+
assertThat(repository2.isAssignableFrom(repository3)).isFalse();
1442+
assertThat(repository2.isAssignableFromResolvedPart(repository3)).isTrue();
1443+
assertThat(repository3.isAssignableFrom(repository2)).isTrue();
1444+
assertThat(repository3.isAssignableFromResolvedPart(repository2)).isTrue();
1445+
}
1446+
14301447

14311448
private ResolvableType testSerialization(ResolvableType type) throws Exception {
14321449
ByteArrayOutputStream bos = new ByteArrayOutputStream();
@@ -1525,6 +1542,10 @@ static class Fields<T> {
15251542
public int[] intArray;
15261543

15271544
public SomeRepository<? extends Serializable> repository;
1545+
1546+
public SomeRepository<String> stringRepository;
1547+
1548+
public SomeRepository<String[]> arrayRepository;
15281549
}
15291550

15301551

0 commit comments

Comments
 (0)