Testing for all 3 new method implementations.
authorRahmadi Trimananda <rtrimana@uci.edu>
Wed, 19 Jun 2019 08:35:03 +0000 (01:35 -0700)
committerRahmadi Trimananda <rtrimana@uci.edu>
Wed, 19 Jun 2019 08:35:03 +0000 (01:35 -0700)
examples/Reflection.java
src/main/gov/nasa/jpf/vm/ClassInfo.java
src/main/gov/nasa/jpf/vm/MethodInfo.java
src/peers/gov/nasa/jpf/vm/JPF_java_lang_reflect_Method.java

index 0ce09bb..88f41d5 100644 (file)
@@ -26,12 +26,12 @@ public class Reflection {
                  return test;
           }
           
-          /*
-          public String getSampleField() {
+          
+          /*public String getSampleField() {
                  return sampleField;
-          }
+          }*/
           
-          public void setSampleField(String sampleField) {
+          /*public void setSampleField(String sampleField) {
              this.sampleField = sampleField;
           }
           
@@ -43,28 +43,29 @@ 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());   
  
       }
       System.out.println();*/
-      /*TypeVariable[] typeParameters = GenericShort.class.getTypeParameters();
+      TypeVariable[] typeParameters = Generic.class.getTypeParameters();
       //TypeVariable[] typeParameters = SampleClass.class.getTypeParameters();
       for(TypeVariable typeVar: typeParameters){
          System.out.println(typeVar);   
  
-      }*/
+      }
       System.out.println();
       
       Type returnType = methods[0].getGenericReturnType();
       System.out.println(returnType);
+         
    }
 }
 
index 09d59ec..3d5ff58 100644 (file)
@@ -2602,7 +2602,7 @@ public class ClassInfo extends InfoObject implements Iterable<MethodInfo>, Gener
   // TODO: Fix for Groovy's model-checking
   public String[] getGenericTypeVariableNames () {
     // To accommodate methods that do not have generic types
-    if (genericSignature == null)
+    if (genericSignature == null || genericSignature.equals(""))
       return new String[0];
     return Types.getGenericTypeVariableNames(genericSignature);
   }
index ce78281..4c904b7 100644 (file)
@@ -506,7 +506,7 @@ public class MethodInfo extends InfoObject implements GenericSignatureHolder  {
   // TODO: Fix for Groovy's model-checking
   public String[] getArgumentGenericTypeNames () {
     // To accommodate methods that do not have generic types
-    if (genericSignature == null)
+    if (genericSignature == null || genericSignature.equals(""))
       return getArgumentTypeNames();
     return Types.getArgumentTypeNames(genericSignature);
   }
@@ -589,6 +589,8 @@ public class MethodInfo extends InfoObject implements GenericSignatureHolder  {
   }
 
   public String getGenericReturnTypeName () {
+    if (genericSignature == null || genericSignature.equals(""))
+      return Types.getReturnTypeName(signature);
     return Types.getGenericReturnTypeName(genericSignature);
   }
 
index 0fcc830..5b91441 100644 (file)
@@ -199,12 +199,11 @@ public class JPF_java_lang_reflect_Method extends NativePeer {
     MethodInfo mi = getMethodInfo(env, objRef);
     ThreadInfo ti = env.getThreadInfo();
 
-    String returnTypeName = mi.getGenericReturnTypeName();
     int retRef;
-    if (Types.isGenericSignature(returnTypeName)) {
-        retRef = getParameterizedTypeImplObj(returnTypeName, env);
+    if (Types.isGenericSignature(mi.getGenericReturnTypeName())) {
+      retRef = getParameterizedTypeImplObj(mi.getGenericReturnTypeName(), env);
     } else {
-      ClassInfo ci = ClassLoaderInfo.getCurrentResolvedClassInfo(returnTypeName);
+      ClassInfo ci = ClassLoaderInfo.getCurrentResolvedClassInfo(mi.getReturnTypeName());
       if (!ci.isRegistered()) {
         ci.registerClass(ti);
       }