Accept nested array type for upUntilUnresolvable check as well
Closes gh-33535
This commit is contained in:
parent
383fa43ded
commit
20bc5ef68b
|
@ -38,6 +38,7 @@ class Spr16179Tests {
|
|||
assertThat(bf.getBean(AssemblerInjection.class).assembler4).isSameAs(bf.getBean("pageAssembler"));
|
||||
assertThat(bf.getBean(AssemblerInjection.class).assembler5).isSameAs(bf.getBean("pageAssembler"));
|
||||
assertThat(bf.getBean(AssemblerInjection.class).assembler6).isSameAs(bf.getBean("pageAssembler"));
|
||||
assertThat(bf.getBean(AssemblerInjection.class).assembler7).isSameAs(bf.getBean("pageAssembler"));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -80,6 +81,9 @@ class Spr16179Tests {
|
|||
|
||||
@Autowired(required = false)
|
||||
PageAssembler<String> assembler6;
|
||||
|
||||
@Autowired(required = false)
|
||||
PageAssembler<String[]> assembler7;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -319,17 +319,18 @@ public class ResolvableType implements Serializable {
|
|||
}
|
||||
}
|
||||
|
||||
if (upUntilUnresolvable && (other.isUnresolvableTypeVariable() || other.isWildcardWithoutBounds())) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Deal with array by delegating to the component type
|
||||
if (isArray()) {
|
||||
return (other.isArray() && getComponentType().isAssignableFrom(
|
||||
other.getComponentType(), true, matchedBefore, upUntilUnresolvable));
|
||||
}
|
||||
|
||||
if (upUntilUnresolvable && (other.isUnresolvableTypeVariable() || other.isWildcardWithoutBounds())) {
|
||||
return true;
|
||||
}
|
||||
|
||||
boolean exactMatch = (strict && matchedBefore != null); // We're checking nested generic variables now...
|
||||
// We're checking nested generic variables now...
|
||||
boolean exactMatch = (strict && matchedBefore != null);
|
||||
|
||||
// Deal with wildcard bounds
|
||||
WildcardBounds ourBounds = WildcardBounds.get(this);
|
||||
|
|
|
@ -1427,6 +1427,23 @@ class ResolvableTypeTests {
|
|||
assertThat(repository3.isAssignableFromResolvedPart(repository1)).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
void gh33535() throws Exception {
|
||||
ResolvableType repository1 = ResolvableType.forField(Fields.class.getField("stringRepository"));
|
||||
ResolvableType repository2 = ResolvableType.forField(Fields.class.getField("arrayRepository"));
|
||||
ResolvableType repository3 = ResolvableType.forMethodReturnType(Methods.class.getMethod("someRepository"));
|
||||
assertThat(repository1.hasUnresolvableGenerics()).isFalse();
|
||||
assertThat(repository1.isAssignableFrom(repository3)).isFalse();
|
||||
assertThat(repository1.isAssignableFromResolvedPart(repository3)).isTrue();
|
||||
assertThat(repository3.isAssignableFrom(repository1)).isTrue();
|
||||
assertThat(repository3.isAssignableFromResolvedPart(repository1)).isTrue();
|
||||
assertThat(repository2.hasUnresolvableGenerics()).isFalse();
|
||||
assertThat(repository2.isAssignableFrom(repository3)).isFalse();
|
||||
assertThat(repository2.isAssignableFromResolvedPart(repository3)).isTrue();
|
||||
assertThat(repository3.isAssignableFrom(repository2)).isTrue();
|
||||
assertThat(repository3.isAssignableFromResolvedPart(repository2)).isTrue();
|
||||
}
|
||||
|
||||
|
||||
private ResolvableType testSerialization(ResolvableType type) throws Exception {
|
||||
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
||||
|
@ -1525,6 +1542,10 @@ class ResolvableTypeTests {
|
|||
public int[] intArray;
|
||||
|
||||
public SomeRepository<? extends Serializable> repository;
|
||||
|
||||
public SomeRepository<String> stringRepository;
|
||||
|
||||
public SomeRepository<String[]> arrayRepository;
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue