Improve resolution of generic type variables

See gh-23418
This commit is contained in:
Frederik Boster
2019-08-05 15:23:15 +02:00
committed by Stephane Nicoll
parent 267908a118
commit 124a76b1ad
2 changed files with 35 additions and 4 deletions

View File

@@ -173,6 +173,19 @@ class GenericTypeResolverTests {
assertThat(resolved[1]).isEqualTo(Long.class);
}
@Test
public void resolvePartiallySpecializedTypeVariables() {
Type resolved = resolveType(BiGenericClass.class.getTypeParameters()[0], TypeFixedBiGenericClass.class);
assertThat(resolved).isNotNull();
assertThat(D.class).isEqualTo(resolved);
}
@Test
public void resolveTransitiveTypeVariableWithDifferentName() {
Type resolved = resolveType(BiGenericClass.class.getTypeParameters()[1], TypeFixedBiGenericClass.class);
assertThat(resolved).isNotNull();
assertThat(E.class).isEqualTo(resolved);
}
public interface MyInterfaceType<T> {
}
@@ -293,11 +306,23 @@ class GenericTypeResolverTests {
class B<T>{}
class C extends A {}
class D extends B<Long> {}
class E extends C {}
class TestIfc<T>{}
class TestImpl<I extends A, T extends B<I>> extends TestIfc<T>{
}
static abstract class BiGenericClass<T extends B<?>, V extends A> {}
static abstract class SpecializedBiGenericClass<U extends C> extends BiGenericClass<D, U>{}
static class TypeFixedBiGenericClass extends SpecializedBiGenericClass<E> {}
static class TopLevelClass<T> {
class Nested<X> {
}