@SuppressWarnings("unchecked") private <T> T castToRequiredType(Object key, Object value, Class<T> requiredType) { if (value == null) { return null; } if (isAssignableTo(value, requiredType)) { if (requiredType.isPrimitive()) { return (T) getWrapperType(requiredType).cast(value); } return requiredType.cast(value); } // else throw new ExtensionContextException( String.format("Object stored under key [%s] is not of required type [%s]", key, requiredType.getName())); }
private void validateResolvedType(Parameter parameter, Object value, Executable executable, ParameterResolver resolver) { Class<?> type = parameter.getType(); // Note: null is permissible as a resolved value but only for non-primitive types. if (!isAssignableTo(value, type)) { String message; if (value == null && type.isPrimitive()) { message = String.format( "ParameterResolver [%s] resolved a null value for parameter [%s] " + "in %s [%s], but a primitive of type [%s] is required.", resolver.getClass().getName(), parameter, asLabel(executable), executable.toGenericString(), type.getName()); } else { message = String.format( "ParameterResolver [%s] resolved a value of type [%s] for parameter [%s] " + "in %s [%s], but a value assignment compatible with [%s] is required.", resolver.getClass().getName(), (value != null ? value.getClass().getName() : null), parameter, asLabel(executable), executable.toGenericString(), type.getName()); } throw new ParameterResolutionException(message); } }
@Override public Object convert(Object source, Class<?> targetType) { if (source == null) { if (targetType.isPrimitive()) { throw new ArgumentConversionException( "Cannot convert null to primitive value of type " + targetType.getName()); } return null; } if (ReflectionUtils.isAssignableTo(source, targetType)) { return source; } return convertToTargetType(source, toWrapperType(targetType)); }