Introduce ResolvableType.toClass() shortcut
Issue: SPR-17086
This commit is contained in:
@@ -159,12 +159,12 @@ public final class BridgeMethodResolver {
|
||||
Class<?> candidateParameter = candidateParameters[i];
|
||||
if (candidateParameter.isArray()) {
|
||||
// An array type: compare the component type.
|
||||
if (!candidateParameter.getComponentType().equals(genericParameter.getComponentType().resolve(Object.class))) {
|
||||
if (!candidateParameter.getComponentType().equals(genericParameter.getComponentType().toClass())) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// A non-array type: compare the type itself.
|
||||
if (!candidateParameter.equals(genericParameter.resolve(Object.class))) {
|
||||
if (!candidateParameter.equals(genericParameter.toClass())) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -212,7 +212,7 @@ public final class Conventions {
|
||||
ReactiveAdapter adapter = reactiveAdapterRegistry.getAdapter(valueClass);
|
||||
if (adapter != null && !adapter.getDescriptor().isNoValue()) {
|
||||
reactiveSuffix = ClassUtils.getShortName(valueClass);
|
||||
valueClass = ResolvableType.forMethodReturnType(method).getGeneric().resolve(Object.class);
|
||||
valueClass = ResolvableType.forMethodReturnType(method).getGeneric().toClass();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -229,7 +229,7 @@ public final class GenericTypeResolver {
|
||||
*/
|
||||
@SuppressWarnings("rawtypes")
|
||||
public static Class<?> resolveType(Type genericType, Map<TypeVariable, Type> map) {
|
||||
return ResolvableType.forType(genericType, new TypeVariableMapVariableResolver(map)).resolve(Object.class);
|
||||
return ResolvableType.forType(genericType, new TypeVariableMapVariableResolver(map)).toClass();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -229,6 +229,18 @@ public class ResolvableType implements Serializable {
|
||||
return (source != null ? source : this.type);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return this type as a resolved {@code Class}, falling back to
|
||||
* {@link java.lang.Object} if no specific class can be resolved.
|
||||
* @return the resolved {@link Class} or the {@code Object} fallback
|
||||
* @since 5.1
|
||||
* @see #getRawClass()
|
||||
* @see #resolve(Class)
|
||||
*/
|
||||
public Class<?> toClass() {
|
||||
return resolve(Object.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the given object is an instance of this {@code ResolvableType}.
|
||||
* @param obj the object to check
|
||||
@@ -328,7 +340,7 @@ public class ResolvableType implements Serializable {
|
||||
if (ourResolved == null) {
|
||||
ourResolved = resolve(Object.class);
|
||||
}
|
||||
Class<?> otherResolved = other.resolve(Object.class);
|
||||
Class<?> otherResolved = other.toClass();
|
||||
|
||||
// We need an exact type match for generics
|
||||
// List<CharSequence> is not assignable from List<String>
|
||||
|
||||
@@ -43,7 +43,7 @@ public class ByteArrayEncoder extends AbstractEncoder<byte[]> {
|
||||
|
||||
@Override
|
||||
public boolean canEncode(ResolvableType elementType, @Nullable MimeType mimeType) {
|
||||
Class<?> clazz = elementType.resolve(Object.class);
|
||||
Class<?> clazz = elementType.toClass();
|
||||
return super.canEncode(elementType, mimeType) && byte[].class.isAssignableFrom(clazz);
|
||||
}
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@ public class ByteBufferEncoder extends AbstractEncoder<ByteBuffer> {
|
||||
|
||||
@Override
|
||||
public boolean canEncode(ResolvableType elementType, @Nullable MimeType mimeType) {
|
||||
Class<?> clazz = elementType.resolve(Object.class);
|
||||
Class<?> clazz = elementType.toClass();
|
||||
return super.canEncode(elementType, mimeType) && ByteBuffer.class.isAssignableFrom(clazz);
|
||||
}
|
||||
|
||||
|
||||
@@ -56,7 +56,7 @@ public final class CharSequenceEncoder extends AbstractEncoder<CharSequence> {
|
||||
|
||||
@Override
|
||||
public boolean canEncode(ResolvableType elementType, @Nullable MimeType mimeType) {
|
||||
Class<?> clazz = elementType.resolve(Object.class);
|
||||
Class<?> clazz = elementType.toClass();
|
||||
return super.canEncode(elementType, mimeType) && CharSequence.class.isAssignableFrom(clazz);
|
||||
}
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ public class DataBufferEncoder extends AbstractEncoder<DataBuffer> {
|
||||
|
||||
@Override
|
||||
public boolean canEncode(ResolvableType elementType, @Nullable MimeType mimeType) {
|
||||
Class<?> clazz = elementType.resolve(Object.class);
|
||||
Class<?> clazz = elementType.toClass();
|
||||
return super.canEncode(elementType, mimeType) && DataBuffer.class.isAssignableFrom(clazz);
|
||||
}
|
||||
|
||||
|
||||
@@ -60,7 +60,7 @@ public class ResourceEncoder extends AbstractSingleValueEncoder<Resource> {
|
||||
|
||||
@Override
|
||||
public boolean canEncode(ResolvableType elementType, @Nullable MimeType mimeType) {
|
||||
Class<?> clazz = elementType.resolve(Object.class);
|
||||
Class<?> clazz = elementType.toClass();
|
||||
return (super.canEncode(elementType, mimeType) && Resource.class.isAssignableFrom(clazz));
|
||||
}
|
||||
|
||||
|
||||
@@ -73,7 +73,7 @@ public class ResourceRegionEncoder extends AbstractEncoder<ResourceRegion> {
|
||||
@Override
|
||||
public boolean canEncode(ResolvableType elementType, @Nullable MimeType mimeType) {
|
||||
return super.canEncode(elementType, mimeType)
|
||||
&& ResourceRegion.class.isAssignableFrom(elementType.resolve(Object.class));
|
||||
&& ResourceRegion.class.isAssignableFrom(elementType.toClass());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -120,7 +120,7 @@ public class TypeDescriptor implements Serializable {
|
||||
*/
|
||||
protected TypeDescriptor(ResolvableType resolvableType, @Nullable Class<?> type, @Nullable Annotation[] annotations) {
|
||||
this.resolvableType = resolvableType;
|
||||
this.type = (type != null ? type : resolvableType.resolve(Object.class));
|
||||
this.type = (type != null ? type : resolvableType.toClass());
|
||||
this.annotatedElement = new AnnotatedElementAdapter(annotations);
|
||||
}
|
||||
|
||||
|
||||
@@ -117,7 +117,7 @@ public class GenericConversionService implements ConfigurableConversionService {
|
||||
"ConverterFactory [" + factory.getClass().getName() + "]; does the class parameterize those types?");
|
||||
}
|
||||
addConverter(new ConverterFactoryAdapter(factory,
|
||||
new ConvertiblePair(typeInfo[0].resolve(Object.class), typeInfo[1].resolve(Object.class))));
|
||||
new ConvertiblePair(typeInfo[0].toClass(), typeInfo[1].toClass())));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -351,7 +351,7 @@ public class GenericConversionService implements ConfigurableConversionService {
|
||||
|
||||
public ConverterAdapter(Converter<?, ?> converter, ResolvableType sourceType, ResolvableType targetType) {
|
||||
this.converter = (Converter<Object, Object>) converter;
|
||||
this.typeInfo = new ConvertiblePair(sourceType.resolve(Object.class), targetType.resolve(Object.class));
|
||||
this.typeInfo = new ConvertiblePair(sourceType.toClass(), targetType.toClass());
|
||||
this.targetType = targetType;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user