SPR-6977: added support for array parameter types
This commit is contained in:
parent
991c982e5b
commit
145dcfd0c2
|
|
@ -18,6 +18,7 @@ package org.springframework.core;
|
||||||
|
|
||||||
import java.lang.ref.Reference;
|
import java.lang.ref.Reference;
|
||||||
import java.lang.ref.WeakReference;
|
import java.lang.ref.WeakReference;
|
||||||
|
import java.lang.reflect.Array;
|
||||||
import java.lang.reflect.GenericArrayType;
|
import java.lang.reflect.GenericArrayType;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.lang.reflect.ParameterizedType;
|
import java.lang.reflect.ParameterizedType;
|
||||||
|
|
@ -146,14 +147,7 @@ public abstract class GenericTypeResolver {
|
||||||
Class[] result = new Class[typeArgs.length];
|
Class[] result = new Class[typeArgs.length];
|
||||||
for (int i = 0; i < typeArgs.length; i++) {
|
for (int i = 0; i < typeArgs.length; i++) {
|
||||||
Type arg = typeArgs[i];
|
Type arg = typeArgs[i];
|
||||||
if (arg instanceof TypeVariable) {
|
result[i] = extractClass(ownerClass, arg);
|
||||||
TypeVariable tv = (TypeVariable) arg;
|
|
||||||
arg = getTypeVariableMap(ownerClass).get(tv);
|
|
||||||
if (arg == null) {
|
|
||||||
arg = extractBoundForTypeVariable(tv);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
result[i] = (arg instanceof Class ? (Class) arg : Object.class);
|
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
@ -169,6 +163,26 @@ public abstract class GenericTypeResolver {
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static Class extractClass(Class ownerClass, Type arg) {
|
||||||
|
if (arg instanceof TypeVariable) {
|
||||||
|
TypeVariable tv = (TypeVariable) arg;
|
||||||
|
arg = getTypeVariableMap(ownerClass).get(tv);
|
||||||
|
if (arg == null) {
|
||||||
|
arg = extractBoundForTypeVariable(tv);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
arg = extractClass(ownerClass, arg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (arg instanceof GenericArrayType) {
|
||||||
|
GenericArrayType gat = (GenericArrayType) arg;
|
||||||
|
Type gt = gat.getGenericComponentType();
|
||||||
|
Class<?> componentClass = extractClass(ownerClass, gt);
|
||||||
|
arg = Array.newInstance(componentClass, 0).getClass();
|
||||||
|
}
|
||||||
|
return (arg instanceof Class ? (Class) arg : Object.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue