types[j] = getTypeVariableImplObject(env, objRef, parameterizedTypes[j]);
} else if (Types.isWildcardType(parameterizedTypes[j])) {
types[j] = getWildcardTypeImplObject(env, objRef, parameterizedTypes[j]);
+ } else if (Types.isParameterizedType(parameterizedTypes[j])) {
+ // Recursion!
+ types[j] = getParameterizedTypeImplObj(parameterizedTypes[j], env, objRef, mi);
} else {
ClassInfo pci = cli.getResolvedClassInfo(parameterizedTypes[j]);
if (!pci.isRegistered()) {
int retRef;
if (Types.isGenericSignature(mi.getGenericReturnTypeName())) {
- retRef = getParameterizedTypeImplObj(mi.getGenericReturnTypeName(), env, objRef, mi);
+ if (Types.isArraySignature(mi.getGenericReturnTypeName())) {
+ // Generic array
+ retRef = getGenericArrayTypeImplObj(mi.getGenericReturnTypeName(), env, objRef, mi);
+ } else {
+ retRef = getParameterizedTypeImplObj(mi.getGenericReturnTypeName(), env, objRef, mi);
+ }
} else {
ClassInfo ci = ClassLoaderInfo.getCurrentResolvedClassInfo(mi.getReturnTypeName());
if (!ci.isRegistered()) {