Revert "Support WildcardType resolution in GenericTypeResolver"

This reverts commit f075120675.

See gh-22313
See gh-31690
This commit is contained in:
Sébastien Deleuze
2023-11-29 14:37:44 +01:00
parent 35fcbae8c6
commit 7cf124b696
2 changed files with 18 additions and 107 deletions

View File

@@ -39,7 +39,6 @@ import org.springframework.util.ConcurrentReferenceHashMap;
* @author Rob Harrop
* @author Sam Brannen
* @author Phillip Webb
* @author Sebastien Deleuze
* @since 2.5.2
*/
public final class GenericTypeResolver {
@@ -167,30 +166,29 @@ public final class GenericTypeResolver {
}
else if (genericType instanceof ParameterizedType parameterizedType) {
ResolvableType resolvedType = ResolvableType.forType(genericType);
Class<?>[] generics = new Class<?>[parameterizedType.getActualTypeArguments().length];
Type[] typeArguments = parameterizedType.getActualTypeArguments();
ResolvableType contextType = ResolvableType.forClass(contextClass);
for (int i = 0; i < typeArguments.length; i++) {
Type typeArgument = typeArguments[i];
if (typeArgument instanceof TypeVariable<?> typeVariable) {
ResolvableType resolvedTypeArgument = resolveVariable(typeVariable, contextType);
if (resolvedTypeArgument != ResolvableType.NONE) {
generics[i] = resolvedTypeArgument.resolve();
if (resolvedType.hasUnresolvableGenerics()) {
Class<?>[] generics = new Class<?>[parameterizedType.getActualTypeArguments().length];
Type[] typeArguments = parameterizedType.getActualTypeArguments();
ResolvableType contextType = ResolvableType.forClass(contextClass);
for (int i = 0; i < typeArguments.length; i++) {
Type typeArgument = typeArguments[i];
if (typeArgument instanceof TypeVariable<?> typeVariable) {
ResolvableType resolvedTypeArgument = resolveVariable(typeVariable, contextType);
if (resolvedTypeArgument != ResolvableType.NONE) {
generics[i] = resolvedTypeArgument.resolve();
}
else {
generics[i] = ResolvableType.forType(typeArgument).resolve();
}
}
else {
generics[i] = ResolvableType.forType(typeArgument).resolve();
}
}
else if (typeArgument instanceof WildcardType wildcardType) {
generics[i] = resolveWildcard(wildcardType, contextType).resolve();
Class<?> rawClass = resolvedType.getRawClass();
if (rawClass != null) {
return ResolvableType.forClassWithGenerics(rawClass, generics).getType();
}
else {
generics[i] = ResolvableType.forType(typeArgument).resolve();
}
}
Class<?> rawClass = resolvedType.getRawClass();
if (rawClass != null) {
return ResolvableType.forClassWithGenerics(rawClass, generics).getType();
}
}
}
@@ -226,26 +224,6 @@ public final class GenericTypeResolver {
return ResolvableType.NONE;
}
private static ResolvableType resolveWildcard(WildcardType wildcardType, ResolvableType contextType) {
for (Type bound : wildcardType.getUpperBounds()) {
if (bound instanceof TypeVariable<?> typeVariable) {
ResolvableType resolvedTypeArgument = resolveVariable(typeVariable, contextType);
if (resolvedTypeArgument != ResolvableType.NONE) {
return resolvedTypeArgument;
}
}
}
for (Type bound : wildcardType.getLowerBounds()) {
if (bound instanceof TypeVariable<?> typeVariable) {
ResolvableType resolvedTypeArgument = resolveVariable(typeVariable, contextType);
if (resolvedTypeArgument != ResolvableType.NONE) {
return resolvedTypeArgument;
}
}
}
return ResolvableType.forType(wildcardType);
}
/**
* Resolve the specified generic type against the given TypeVariable map.
* <p>Used by Spring Data.