|
|
|
@ -1219,11 +1219,11 @@ public class ResolvableType implements Serializable { |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
public static ResolvableType forMethodParameter(MethodParameter methodParameter, ResolvableType implementationType) { |
|
|
|
public static ResolvableType forMethodParameter(MethodParameter methodParameter, ResolvableType implementationType) { |
|
|
|
Assert.notNull(methodParameter, "MethodParameter must not be null"); |
|
|
|
Assert.notNull(methodParameter, "MethodParameter must not be null"); |
|
|
|
implementationType = (implementationType == null ? forType(methodParameter.getContainingClass()) : implementationType); |
|
|
|
implementationType = (implementationType != null ? implementationType : |
|
|
|
|
|
|
|
forType(methodParameter.getContainingClass())); |
|
|
|
ResolvableType owner = implementationType.as(methodParameter.getDeclaringClass()); |
|
|
|
ResolvableType owner = implementationType.as(methodParameter.getDeclaringClass()); |
|
|
|
return forType(null, new MethodParameterTypeProvider(methodParameter), |
|
|
|
return forType(null, new MethodParameterTypeProvider(methodParameter), owner.asVariableResolver()). |
|
|
|
owner.asVariableResolver()).getNested(methodParameter.getNestingLevel(), |
|
|
|
getNested(methodParameter.getNestingLevel(), methodParameter.typeIndexesPerLevel); |
|
|
|
methodParameter.typeIndexesPerLevel); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
@ -1241,13 +1241,26 @@ public class ResolvableType implements Serializable { |
|
|
|
getNested(methodParameter.getNestingLevel(), methodParameter.typeIndexesPerLevel); |
|
|
|
getNested(methodParameter.getNestingLevel(), methodParameter.typeIndexesPerLevel); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* Resolve the top-level parameter type of the given {@code MethodParameter}. |
|
|
|
|
|
|
|
* @param methodParameter the method parameter to resolve |
|
|
|
|
|
|
|
* @since 4.1.9 |
|
|
|
|
|
|
|
* @see MethodParameter#setParameterType |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
static void resolveMethodParameter(MethodParameter methodParameter) { |
|
|
|
|
|
|
|
Assert.notNull(methodParameter, "MethodParameter must not be null"); |
|
|
|
|
|
|
|
ResolvableType owner = forType(methodParameter.getContainingClass()).as(methodParameter.getDeclaringClass()); |
|
|
|
|
|
|
|
methodParameter.setParameterType( |
|
|
|
|
|
|
|
forType(null, new MethodParameterTypeProvider(methodParameter), owner.asVariableResolver()).resolve()); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* Return a {@link ResolvableType} as a array of the specified {@code componentType}. |
|
|
|
* Return a {@link ResolvableType} as a array of the specified {@code componentType}. |
|
|
|
* @param componentType the component type |
|
|
|
* @param componentType the component type |
|
|
|
* @return a {@link ResolvableType} as an array of the specified component type |
|
|
|
* @return a {@link ResolvableType} as an array of the specified component type |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
public static ResolvableType forArrayComponent(ResolvableType componentType) { |
|
|
|
public static ResolvableType forArrayComponent(ResolvableType componentType) { |
|
|
|
Assert.notNull(componentType, "componentType must not be null"); |
|
|
|
Assert.notNull(componentType, "Component type must not be null"); |
|
|
|
Class<?> arrayClass = Array.newInstance(componentType.resolve(), 0).getClass(); |
|
|
|
Class<?> arrayClass = Array.newInstance(componentType.resolve(), 0).getClass(); |
|
|
|
return new ResolvableType(arrayClass, null, null, componentType); |
|
|
|
return new ResolvableType(arrayClass, null, null, componentType); |
|
|
|
} |
|
|
|
} |
|
|
|
|