A proper implementation of getGenericReturnType using the class ParameterizedTypeImpl.
authorRahmadi Trimananda <rtrimana@uci.edu>
Wed, 19 Jun 2019 03:24:15 +0000 (20:24 -0700)
committerRahmadi Trimananda <rtrimana@uci.edu>
Wed, 19 Jun 2019 03:24:15 +0000 (20:24 -0700)
examples/Reflection.java
src/main/gov/nasa/jpf/vm/MethodInfo.java
src/peers/gov/nasa/jpf/vm/JPF_java_lang_reflect_Method.java

index fe2927c8bd25d3e9083aef918f35bef394dcd502..0ce09bb28f90a6a593beb4462cf928cbf20e18d0 100644 (file)
@@ -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);
    }
 }
 
index 1a51c470a98c07c6fab0d3a3ffe4e2d920aff85f..ce7828183e7e0873baa648bf06cc0eed0b090678 100644 (file)
@@ -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();
index efb46e8ec1fdf8415ac5a48e4c01f5cb563095da..0fcc83077183e0db0cbeaf21215274a5a5d60ae7 100644 (file)
@@ -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