Fixing getGenericReturnType to recognize the GenericArrayTypeImpl and ParameterizedTy...
[jpf-core.git] / src / peers / gov / nasa / jpf / vm / JPF_java_lang_reflect_Method.java
index 299fb619fe13f7e8286ff9bc6e89ce2d86b0136e..4fcf1d93487eb201c3ebcb903415787616f279c4 100644 (file)
@@ -162,6 +162,9 @@ public class JPF_java_lang_reflect_Method extends NativePeer {
         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()) {
@@ -278,7 +281,12 @@ public class JPF_java_lang_reflect_Method extends NativePeer {
 
     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()) {