// Get field information and fill out the fields
String clsSig = Types.getArrayClassName(signature);
- int paramTypeRef = getParameterizedTypeImplObj(clsSig, env, objRef, mi);
+ int paramTypeRef;
+ if (Types.isParameterWithType(clsSig)) {
+ paramTypeRef = getTypeVariableImplObject(env, objRef, clsSig);
+ } else {
+ paramTypeRef = getParameterizedTypeImplObj(clsSig, env, objRef, mi);
+ }
ei.setReferenceField("genericComponentType", paramTypeRef);
return genArrRef;
String[] argTypeNames = mi.getArgumentGenericTypeNames();
int[] ar = new int[argTypeNames.length];
+ String classGenericSig = mi.getClassInfo().getGenericSignature();
+ String methodGenericSig = mi.getGenericSignature();
for (int i = 0; i < argTypeNames.length; i++) {
// Change this into just the generic class type if it is a generic class
if (Types.isGenericSignature(argTypeNames[i])) {
} else {
ar[i] = getParameterizedTypeImplObj(argTypeNames[i], env, objRef, mi);
}
+ } else if (Types.isTypeParameter(argTypeNames[i], methodGenericSig) ||
+ Types.isTypeParameter(argTypeNames[i], classGenericSig)) {
+ if (Types.isArraySignature(argTypeNames[i])) {
+ // Generic array
+ ar[i] = getGenericArrayTypeImplObj(argTypeNames[i], env, objRef, mi);
+ } else {
+ ar[i] = getTypeVariableImplObject(env, objRef, argTypeNames[i]);
+ }
} else {
ClassInfo ci = ClassLoaderInfo.getCurrentResolvedClassInfo(argTypeNames[i]);
if (!ci.isRegistered()) {
MethodInfo mi = getMethodInfo(env, objRef);
ThreadInfo ti = env.getThreadInfo();
+ String genRetType = mi.getGenericReturnTypeName();
+ String classGenericSig = mi.getClassInfo().getGenericSignature();
+ String methodGenericSig = mi.getGenericSignature();
int retRef;
- if (Types.isGenericSignature(mi.getGenericReturnTypeName())) {
- if (Types.isArraySignature(mi.getGenericReturnTypeName())) {
+
+ if (Types.isGenericSignature(genRetType)) {
+ if (Types.isArraySignature(genRetType)) {
+ // Generic array
+ retRef = getGenericArrayTypeImplObj(genRetType, env, objRef, mi);
+ } else {
+ retRef = getParameterizedTypeImplObj(genRetType, env, objRef, mi);
+ }
+ } else if (Types.isTypeParameter(genRetType, methodGenericSig) ||
+ Types.isTypeParameter(genRetType, classGenericSig)) {
+ if (Types.isArraySignature(genRetType)) {
// Generic array
- retRef = getGenericArrayTypeImplObj(mi.getGenericReturnTypeName(), env, objRef, mi);
+ retRef = getGenericArrayTypeImplObj(genRetType, env, objRef, mi);
} else {
- retRef = getParameterizedTypeImplObj(mi.getGenericReturnTypeName(), env, objRef, mi);
+ retRef = getTypeVariableImplObject(env, objRef, genRetType);
}
} else {
ClassInfo ci = ClassLoaderInfo.getCurrentResolvedClassInfo(mi.getReturnTypeName());