return generics-capable Class references
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@1219 50f2f4bb-b051-0410-bef5-90022cba6387
This commit is contained in:
parent
a7fa7aa05c
commit
d3e65541a0
|
|
@ -45,7 +45,7 @@ public abstract class GenericCollectionTypeResolver {
|
|||
* @param collectionClass the collection class to introspect
|
||||
* @return the generic type, or <code>null</code> if none
|
||||
*/
|
||||
public static Class getCollectionType(Class<? extends Collection> collectionClass) {
|
||||
public static Class<?> getCollectionType(Class<? extends Collection> collectionClass) {
|
||||
return extractTypeFromClass(collectionClass, Collection.class, 0);
|
||||
}
|
||||
|
||||
|
|
@ -55,7 +55,7 @@ public abstract class GenericCollectionTypeResolver {
|
|||
* @param mapClass the map class to introspect
|
||||
* @return the generic type, or <code>null</code> if none
|
||||
*/
|
||||
public static Class getMapKeyType(Class<? extends Map> mapClass) {
|
||||
public static Class<?> getMapKeyType(Class<? extends Map> mapClass) {
|
||||
return extractTypeFromClass(mapClass, Map.class, 0);
|
||||
}
|
||||
|
||||
|
|
@ -65,7 +65,7 @@ public abstract class GenericCollectionTypeResolver {
|
|||
* @param mapClass the map class to introspect
|
||||
* @return the generic type, or <code>null</code> if none
|
||||
*/
|
||||
public static Class getMapValueType(Class<? extends Map> mapClass) {
|
||||
public static Class<?> getMapValueType(Class<? extends Map> mapClass) {
|
||||
return extractTypeFromClass(mapClass, Map.class, 1);
|
||||
}
|
||||
|
||||
|
|
@ -74,7 +74,7 @@ public abstract class GenericCollectionTypeResolver {
|
|||
* @param collectionField the collection field to introspect
|
||||
* @return the generic type, or <code>null</code> if none
|
||||
*/
|
||||
public static Class getCollectionFieldType(Field collectionField) {
|
||||
public static Class<?> getCollectionFieldType(Field collectionField) {
|
||||
return getGenericFieldType(collectionField, Collection.class, 0, 1);
|
||||
}
|
||||
|
||||
|
|
@ -86,7 +86,7 @@ public abstract class GenericCollectionTypeResolver {
|
|||
* nested List, whereas 2 would indicate the element of the nested List)
|
||||
* @return the generic type, or <code>null</code> if none
|
||||
*/
|
||||
public static Class getCollectionFieldType(Field collectionField, int nestingLevel) {
|
||||
public static Class<?> getCollectionFieldType(Field collectionField, int nestingLevel) {
|
||||
return getGenericFieldType(collectionField, Collection.class, 0, nestingLevel);
|
||||
}
|
||||
|
||||
|
|
@ -95,7 +95,7 @@ public abstract class GenericCollectionTypeResolver {
|
|||
* @param mapField the map field to introspect
|
||||
* @return the generic type, or <code>null</code> if none
|
||||
*/
|
||||
public static Class getMapKeyFieldType(Field mapField) {
|
||||
public static Class<?> getMapKeyFieldType(Field mapField) {
|
||||
return getGenericFieldType(mapField, Map.class, 0, 1);
|
||||
}
|
||||
|
||||
|
|
@ -107,7 +107,7 @@ public abstract class GenericCollectionTypeResolver {
|
|||
* nested List, whereas 2 would indicate the element of the nested List)
|
||||
* @return the generic type, or <code>null</code> if none
|
||||
*/
|
||||
public static Class getMapKeyFieldType(Field mapField, int nestingLevel) {
|
||||
public static Class<?> getMapKeyFieldType(Field mapField, int nestingLevel) {
|
||||
return getGenericFieldType(mapField, Map.class, 0, nestingLevel);
|
||||
}
|
||||
|
||||
|
|
@ -116,7 +116,7 @@ public abstract class GenericCollectionTypeResolver {
|
|||
* @param mapField the map field to introspect
|
||||
* @return the generic type, or <code>null</code> if none
|
||||
*/
|
||||
public static Class getMapValueFieldType(Field mapField) {
|
||||
public static Class<?> getMapValueFieldType(Field mapField) {
|
||||
return getGenericFieldType(mapField, Map.class, 1, 1);
|
||||
}
|
||||
|
||||
|
|
@ -128,7 +128,7 @@ public abstract class GenericCollectionTypeResolver {
|
|||
* nested List, whereas 2 would indicate the element of the nested List)
|
||||
* @return the generic type, or <code>null</code> if none
|
||||
*/
|
||||
public static Class getMapValueFieldType(Field mapField, int nestingLevel) {
|
||||
public static Class<?> getMapValueFieldType(Field mapField, int nestingLevel) {
|
||||
return getGenericFieldType(mapField, Map.class, 1, nestingLevel);
|
||||
}
|
||||
|
||||
|
|
@ -137,7 +137,7 @@ public abstract class GenericCollectionTypeResolver {
|
|||
* @param methodParam the method parameter specification
|
||||
* @return the generic type, or <code>null</code> if none
|
||||
*/
|
||||
public static Class getCollectionParameterType(MethodParameter methodParam) {
|
||||
public static Class<?> getCollectionParameterType(MethodParameter methodParam) {
|
||||
return getGenericParameterType(methodParam, Collection.class, 0);
|
||||
}
|
||||
|
||||
|
|
@ -146,7 +146,7 @@ public abstract class GenericCollectionTypeResolver {
|
|||
* @param methodParam the method parameter specification
|
||||
* @return the generic type, or <code>null</code> if none
|
||||
*/
|
||||
public static Class getMapKeyParameterType(MethodParameter methodParam) {
|
||||
public static Class<?> getMapKeyParameterType(MethodParameter methodParam) {
|
||||
return getGenericParameterType(methodParam, Map.class, 0);
|
||||
}
|
||||
|
||||
|
|
@ -155,7 +155,7 @@ public abstract class GenericCollectionTypeResolver {
|
|||
* @param methodParam the method parameter specification
|
||||
* @return the generic type, or <code>null</code> if none
|
||||
*/
|
||||
public static Class getMapValueParameterType(MethodParameter methodParam) {
|
||||
public static Class<?> getMapValueParameterType(MethodParameter methodParam) {
|
||||
return getGenericParameterType(methodParam, Map.class, 1);
|
||||
}
|
||||
|
||||
|
|
@ -164,7 +164,7 @@ public abstract class GenericCollectionTypeResolver {
|
|||
* @param method the method to check the return type for
|
||||
* @return the generic type, or <code>null</code> if none
|
||||
*/
|
||||
public static Class getCollectionReturnType(Method method) {
|
||||
public static Class<?> getCollectionReturnType(Method method) {
|
||||
return getGenericReturnType(method, Collection.class, 0, 1);
|
||||
}
|
||||
|
||||
|
|
@ -178,7 +178,7 @@ public abstract class GenericCollectionTypeResolver {
|
|||
* nested List, whereas 2 would indicate the element of the nested List)
|
||||
* @return the generic type, or <code>null</code> if none
|
||||
*/
|
||||
public static Class getCollectionReturnType(Method method, int nestingLevel) {
|
||||
public static Class<?> getCollectionReturnType(Method method, int nestingLevel) {
|
||||
return getGenericReturnType(method, Collection.class, 0, nestingLevel);
|
||||
}
|
||||
|
||||
|
|
@ -187,7 +187,7 @@ public abstract class GenericCollectionTypeResolver {
|
|||
* @param method the method to check the return type for
|
||||
* @return the generic type, or <code>null</code> if none
|
||||
*/
|
||||
public static Class getMapKeyReturnType(Method method) {
|
||||
public static Class<?> getMapKeyReturnType(Method method) {
|
||||
return getGenericReturnType(method, Map.class, 0, 1);
|
||||
}
|
||||
|
||||
|
|
@ -199,7 +199,7 @@ public abstract class GenericCollectionTypeResolver {
|
|||
* nested List, whereas 2 would indicate the element of the nested List)
|
||||
* @return the generic type, or <code>null</code> if none
|
||||
*/
|
||||
public static Class getMapKeyReturnType(Method method, int nestingLevel) {
|
||||
public static Class<?> getMapKeyReturnType(Method method, int nestingLevel) {
|
||||
return getGenericReturnType(method, Map.class, 0, nestingLevel);
|
||||
}
|
||||
|
||||
|
|
@ -208,7 +208,7 @@ public abstract class GenericCollectionTypeResolver {
|
|||
* @param method the method to check the return type for
|
||||
* @return the generic type, or <code>null</code> if none
|
||||
*/
|
||||
public static Class getMapValueReturnType(Method method) {
|
||||
public static Class<?> getMapValueReturnType(Method method) {
|
||||
return getGenericReturnType(method, Map.class, 1, 1);
|
||||
}
|
||||
|
||||
|
|
@ -220,7 +220,7 @@ public abstract class GenericCollectionTypeResolver {
|
|||
* nested List, whereas 2 would indicate the element of the nested List)
|
||||
* @return the generic type, or <code>null</code> if none
|
||||
*/
|
||||
public static Class getMapValueReturnType(Method method, int nestingLevel) {
|
||||
public static Class<?> getMapValueReturnType(Method method, int nestingLevel) {
|
||||
return getGenericReturnType(method, Map.class, 1, nestingLevel);
|
||||
}
|
||||
|
||||
|
|
@ -233,7 +233,7 @@ public abstract class GenericCollectionTypeResolver {
|
|||
* 0 for Map keys, 1 for Map values)
|
||||
* @return the generic type, or <code>null</code> if none
|
||||
*/
|
||||
private static Class getGenericParameterType(MethodParameter methodParam, Class source, int typeIndex) {
|
||||
private static Class<?> getGenericParameterType(MethodParameter methodParam, Class<?> source, int typeIndex) {
|
||||
return extractType(methodParam, GenericTypeResolver.getTargetType(methodParam),
|
||||
source, typeIndex, methodParam.getNestingLevel(), 1);
|
||||
}
|
||||
|
|
@ -247,7 +247,7 @@ public abstract class GenericCollectionTypeResolver {
|
|||
* @param nestingLevel the nesting level of the target type
|
||||
* @return the generic type, or <code>null</code> if none
|
||||
*/
|
||||
private static Class getGenericFieldType(Field field, Class source, int typeIndex, int nestingLevel) {
|
||||
private static Class<?> getGenericFieldType(Field field, Class<?> source, int typeIndex, int nestingLevel) {
|
||||
return extractType(null, field.getGenericType(), source, typeIndex, nestingLevel, 1);
|
||||
}
|
||||
|
||||
|
|
@ -260,7 +260,7 @@ public abstract class GenericCollectionTypeResolver {
|
|||
* @param nestingLevel the nesting level of the target type
|
||||
* @return the generic type, or <code>null</code> if none
|
||||
*/
|
||||
private static Class getGenericReturnType(Method method, Class source, int typeIndex, int nestingLevel) {
|
||||
private static Class<?> getGenericReturnType(Method method, Class<?> source, int typeIndex, int nestingLevel) {
|
||||
return extractType(null, method.getGenericReturnType(), source, typeIndex, nestingLevel, 1);
|
||||
}
|
||||
|
||||
|
|
@ -268,14 +268,14 @@ public abstract class GenericCollectionTypeResolver {
|
|||
* Extract the generic type from the given Type object.
|
||||
* @param methodParam the method parameter specification
|
||||
* @param type the Type to check
|
||||
* @param source the source collection/map Class that we check
|
||||
* @param source the source collection/map Class<?> that we check
|
||||
* @param typeIndex the index of the actual type argument
|
||||
* @param nestingLevel the nesting level of the target type
|
||||
* @param currentLevel the current nested level
|
||||
* @return the generic type as Class, or <code>null</code> if none
|
||||
*/
|
||||
private static Class extractType(
|
||||
MethodParameter methodParam, Type type, Class source, int typeIndex, int nestingLevel, int currentLevel) {
|
||||
private static Class<?> extractType(
|
||||
MethodParameter methodParam, Type type, Class<?> source, int typeIndex, int nestingLevel, int currentLevel) {
|
||||
|
||||
Type resolvedType = type;
|
||||
if (type instanceof TypeVariable && methodParam != null && methodParam.typeVariableMap != null) {
|
||||
|
|
@ -306,8 +306,8 @@ public abstract class GenericCollectionTypeResolver {
|
|||
* @param currentLevel the current nested level
|
||||
* @return the generic type as Class, or <code>null</code> if none
|
||||
*/
|
||||
private static Class extractTypeFromParameterizedType(MethodParameter methodParam,
|
||||
ParameterizedType ptype, Class source, int typeIndex, int nestingLevel, int currentLevel) {
|
||||
private static Class<?> extractTypeFromParameterizedType(MethodParameter methodParam,
|
||||
ParameterizedType ptype, Class<?> source, int typeIndex, int nestingLevel, int currentLevel) {
|
||||
|
||||
if (!(ptype.getRawType() instanceof Class)) {
|
||||
return null;
|
||||
|
|
@ -371,28 +371,28 @@ public abstract class GenericCollectionTypeResolver {
|
|||
}
|
||||
|
||||
/**
|
||||
* Extract the generic type from the given Class object.
|
||||
* @param clazz the Class to check
|
||||
* Extract the generic type from the given Class<?> object.
|
||||
* @param clazz the Class<?> to check
|
||||
* @param source the expected raw source type (can be <code>null</code>)
|
||||
* @param typeIndex the index of the actual type argument
|
||||
* @return the generic type as Class, or <code>null</code> if none
|
||||
*/
|
||||
private static Class extractTypeFromClass(Class clazz, Class source, int typeIndex) {
|
||||
private static Class<?> extractTypeFromClass(Class clazz, Class<?> source, int typeIndex) {
|
||||
return extractTypeFromClass(null, clazz, source, typeIndex, 1, 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Extract the generic type from the given Class object.
|
||||
* Extract the generic type from the given Class<?> object.
|
||||
* @param methodParam the method parameter specification
|
||||
* @param clazz the Class to check
|
||||
* @param clazz the Class<?> to check
|
||||
* @param source the expected raw source type (can be <code>null</code>)
|
||||
* @param typeIndex the index of the actual type argument
|
||||
* @param nestingLevel the nesting level of the target type
|
||||
* @param currentLevel the current nested level
|
||||
* @return the generic type as Class, or <code>null</code> if none
|
||||
*/
|
||||
private static Class extractTypeFromClass(
|
||||
MethodParameter methodParam, Class clazz, Class source, int typeIndex, int nestingLevel, int currentLevel) {
|
||||
private static Class<?> extractTypeFromClass(
|
||||
MethodParameter methodParam, Class<?> clazz, Class<?> source, int typeIndex, int nestingLevel, int currentLevel) {
|
||||
|
||||
if (clazz.getName().startsWith("java.util.")) {
|
||||
return null;
|
||||
|
|
@ -407,7 +407,7 @@ public abstract class GenericCollectionTypeResolver {
|
|||
if (ifc instanceof ParameterizedType) {
|
||||
rawType = ((ParameterizedType) ifc).getRawType();
|
||||
}
|
||||
if (rawType instanceof Class && isIntrospectionCandidate((Class) rawType)) {
|
||||
if (rawType instanceof Class<?> && isIntrospectionCandidate((Class) rawType)) {
|
||||
return extractType(methodParam, ifc, source, typeIndex, nestingLevel, currentLevel);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue