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

@@ -199,8 +199,13 @@ public final class GenericTypeResolver {
private static ResolvableType resolveVariable(TypeVariable<?> typeVariable, ResolvableType contextType) {
ResolvableType resolvedType;
if (contextType.hasGenerics()) {
resolvedType = ResolvableType.forType(typeVariable, contextType);
if (resolvedType.resolve() != null) {
ResolvableType.VariableResolver variableResolver = contextType.asVariableResolver();
if (variableResolver == null) {
return ResolvableType.NONE;
}
resolvedType = variableResolver.resolveVariable(typeVariable);
if (resolvedType != null) {
return resolvedType;
}
}
@@ -208,16 +213,17 @@ public final class GenericTypeResolver {
ResolvableType superType = contextType.getSuperType();
if (superType != ResolvableType.NONE) {
resolvedType = resolveVariable(typeVariable, superType);
if (resolvedType.resolve() != null) {
if (resolvedType != ResolvableType.NONE) {
return resolvedType;
}
}
for (ResolvableType ifc : contextType.getInterfaces()) {
resolvedType = resolveVariable(typeVariable, ifc);
if (resolvedType.resolve() != null) {
if (resolvedType != ResolvableType.NONE) {
return resolvedType;
}
}
return ResolvableType.NONE;
}