From: Rahmadi Trimananda <rtrimana@uci.edu>
Date: Wed, 19 Jun 2019 03:24:15 +0000 (-0700)
Subject: A proper implementation of getGenericReturnType using the class ParameterizedTypeImpl.
X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=c9acde01b456c40967ce0b466af8e6847564de7a;p=jpf-core.git

A proper implementation of getGenericReturnType using the class ParameterizedTypeImpl.
---

diff --git a/examples/Reflection.java b/examples/Reflection.java
index fe2927c..0ce09bb 100644
--- a/examples/Reflection.java
+++ b/examples/Reflection.java
@@ -43,12 +43,12 @@ public class Reflection {
    public static void main(String[] args) {
 
       Method[] methods = SampleClass.class.getMethods();
-      Type[] parameters = methods[0].getGenericParameterTypes();
+      /*Type[] parameters = methods[0].getGenericParameterTypes();
       //Type[] parameters = methods[0].getGenericParameterTypes();
       for (int i = 0; i < parameters.length; i++) {
          System.out.println(parameters[i]);
       }
-      System.out.println();
+      System.out.println();*/
       /*Class[] parameterTypes = methods[0].getParameterTypes();
       for(Class parameterType: parameterTypes){
          System.out.println(parameterType.getName());   
@@ -62,9 +62,9 @@ public class Reflection {
  
       }*/
       System.out.println();
-      /*
+      
       Type returnType = methods[0].getGenericReturnType();
-      System.out.println(returnType);*/
+      System.out.println(returnType);
    }
 }
 
diff --git a/src/main/gov/nasa/jpf/vm/MethodInfo.java b/src/main/gov/nasa/jpf/vm/MethodInfo.java
index 1a51c47..ce78281 100644
--- a/src/main/gov/nasa/jpf/vm/MethodInfo.java
+++ b/src/main/gov/nasa/jpf/vm/MethodInfo.java
@@ -588,11 +588,10 @@ public class MethodInfo extends InfoObject implements GenericSignatureHolder  {
     return Types.getReturnTypeName(signature);
   }
 
-  // TODO: Fix for Groovy's model-checking
   public String getGenericReturnTypeName () {
-    return Types.getGenericReturnTypeName(signature);
+    return Types.getGenericReturnTypeName(genericSignature);
   }
-  
+
   public String getSourceFileName () {
     if (ci != null) {
       return ci.getSourceFileName();
diff --git a/src/peers/gov/nasa/jpf/vm/JPF_java_lang_reflect_Method.java b/src/peers/gov/nasa/jpf/vm/JPF_java_lang_reflect_Method.java
index efb46e8..0fcc830 100644
--- a/src/peers/gov/nasa/jpf/vm/JPF_java_lang_reflect_Method.java
+++ b/src/peers/gov/nasa/jpf/vm/JPF_java_lang_reflect_Method.java
@@ -199,12 +199,19 @@ public class JPF_java_lang_reflect_Method extends NativePeer {
     MethodInfo mi = getMethodInfo(env, objRef);
     ThreadInfo ti = env.getThreadInfo();
 
-    ClassInfo ci = ClassLoaderInfo.getCurrentResolvedClassInfo(mi.getReturnTypeName());
-    if (!ci.isRegistered()) {
-      ci.registerClass(ti);
+    String returnTypeName = mi.getGenericReturnTypeName();
+    int retRef;
+    if (Types.isGenericSignature(returnTypeName)) {
+        retRef = getParameterizedTypeImplObj(returnTypeName, env);
+    } else {
+      ClassInfo ci = ClassLoaderInfo.getCurrentResolvedClassInfo(returnTypeName);
+      if (!ci.isRegistered()) {
+        ci.registerClass(ti);
+      }
+      retRef = ci.getClassObjectRef();
     }
 
-    return ci.getClassObjectRef();
+    return retRef;
   }
   // TODO: Fix for Groovy's model-checking
   // TODO: We have been able to only register the generic class and not yet the parameterized types