Cleaning up for the real fixes.
authorrtrimana <rtrimana@uci.edu>
Thu, 13 Jun 2019 19:53:11 +0000 (12:53 -0700)
committerrtrimana <rtrimana@uci.edu>
Thu, 13 Jun 2019 19:53:11 +0000 (12:53 -0700)
.gitignore
examples/Generic.java [new file with mode: 0644]
examples/Reflection.java [new file with mode: 0644]
src/classes/java/lang/Class.java
src/classes/java/lang/reflect/Method.java
src/main/gov/nasa/jpf/vm/SystemClassLoaderInfo.java
src/peers/gov/nasa/jpf/vm/JPF_java_lang_Class.java
src/peers/gov/nasa/jpf/vm/JPF_java_lang_reflect_Method.java

index 50639fd..1950eb1 100644 (file)
@@ -71,3 +71,4 @@ out/
 
 # JIRA plugin
 atlassian-ide-plugin.xml
+/build-default/
diff --git a/examples/Generic.java b/examples/Generic.java
new file mode 100644 (file)
index 0000000..8f4f1a6
--- /dev/null
@@ -0,0 +1,22 @@
+import java.util.List;
+import java.util.ArrayList;
+
+public class Generic<T,E> {
+       
+       private T t;
+       
+       public T returnT(List<String> test) {
+               return this.t;
+       }
+
+       public List<String> returnL(List<String> test) {
+               return test;
+       }
+       
+       public static void main(String[] args) {
+       
+               Generic gen = new Generic();
+               List<String> list = new ArrayList<>();
+               List<String> ret = gen.returnL(list);
+       }
+}
diff --git a/examples/Reflection.java b/examples/Reflection.java
new file mode 100644 (file)
index 0000000..ac04e04
--- /dev/null
@@ -0,0 +1,60 @@
+import java.lang.reflect.Method;
+import java.lang.reflect.Type;
+import java.lang.reflect.TypeVariable;
+
+import java.util.List;
+import java.util.ArrayList;
+
+public class Reflection {
+
+       class Generic<T,E> {
+       
+       }
+
+       class SampleClass {
+          private String sampleField;
+
+          public String getSampleField() {
+                 return sampleField;
+          }
+
+          /*public List<String> setSampleField(List<String> listString, 
+                               String sampleField, int one, short two, double three, Object obj) {
+                 this.sampleField = sampleField; 
+                 return listString;
+          }
+          
+          public void setSampleField(String sampleField) {
+             this.sampleField = sampleField;
+          }*/
+          
+          public List<String> setSampleField(List<String> listString) {
+                 return listString;
+          }
+       }
+
+   public static void main(String[] args) {
+
+      Method[] methods = SampleClass.class.getMethods();
+      /*Type[] parameters = methods[1].getGenericParameterTypes();
+      for (int i = 0; i < parameters.length; i++) {
+         System.out.println(parameters[i]);
+      }
+      System.out.println();*/
+      Class[] parameterTypes = methods[6].getParameterTypes();
+      for(Class parameterType: parameterTypes){
+         System.out.println(parameterType.getName());   
+      }
+      System.out.println();
+      TypeVariable[] typeParameters = Generic.class.getTypeParameters();
+      for(TypeVariable typeVar: typeParameters){
+         System.out.println(typeVar);   
+      }
+      /*System.out.println();
+      Type returnType = methods[1].getGenericReturnType();
+      System.out.println(returnType);*/
+   }
+}
+
index 6149ba6..0231de7 100644 (file)
@@ -28,11 +28,6 @@ import java.util.Map;
 
 import sun.reflect.ConstantPool;
 import sun.reflect.annotation.AnnotationType;
-// TODO: DIRTY HACKS!
-import sun.reflect.generics.factory.CoreReflectionFactory;
-import sun.reflect.generics.factory.GenericsFactory;
-import sun.reflect.generics.repository.ClassRepository;
-import sun.reflect.generics.scope.ClassScope;
 
 /**
  * MJI model class for java.lang.Class library abstraction
@@ -276,64 +271,9 @@ public final class Class<T> implements Serializable, GenericDeclaration, Type, A
 
   native AnnotationType getAnnotationType();
   
-  // TODO: DIRTY HACKS!
-  //public native TypeVariable<Class<T>>[] getTypeParameters();
-  /*
-  @Override
-  public TypeVariable<Class<T>>[] getTypeParameters() {
-    throw new UnsupportedOperationException();
-  }
-  
-  // Generic info repository; lazily initialized
-  private volatile transient ClassRepository genericInfo;
-  
-  // Generic signature handling
-  //private native String getGenericSignature0();
-  
-  // accessor for factory
-  private GenericsFactory getFactory() {
-    // create scope and factory
-    return CoreReflectionFactory.make(this, ClassScope.make(this));
-  }
-  
-  // accessor for generic info repository;
-  // generic info is lazily initialized
-  private ClassRepository getGenericInfo() {
-       ClassRepository genericInfo = this.genericInfo;
-    if (genericInfo == null) {
-      //String signature = getGenericSignature0();
-         //String signature = "Ljava/lang/Object;";
-         String signature = null;
-      if (signature == null) {
-        genericInfo = ClassRepository.NONE;
-      } else {
-        genericInfo = ClassRepository.make(signature, getFactory());
-      }
-      this.genericInfo = genericInfo;
-    }
-    return (genericInfo != ClassRepository.NONE) ? genericInfo : null;
-  }
-  
-  @Override
-  public TypeVariable<Class<T>>[] getTypeParameters() {
-    //throw new UnsupportedOperationException();
-       ClassRepository info = getGenericInfo();
-    if (info != null)
-      return (TypeVariable<Class<T>>[])info.getTypeParameters();
-    else
-      return (TypeVariable<Class<T>>[])new TypeVariable<?>[0];
-  }*/
-  @Override
-  public TypeVariable<Class<T>>[] getTypeParameters() {
-    //throw new UnsupportedOperationException();
-    System.out.println("Calling getTypeParameters for: " + this.name);
-    TypeVariable[] typeVariables = (TypeVariable<Class<T>>[])new TypeVariable<?>[1];
-    //Object obj = new Object();
-    //typeVariables[0] = (TypeVariable<Class<T>>) obj;
-    return typeVariables;
-  }
-  // TODO: DIRTY HACKS!
-  
+  // TODO: Fix for Groovy's model-checking
+  public native TypeVariable<Class<T>>[] getTypeParameters();
+
   public Type getGenericSuperclass() {
     throw new UnsupportedOperationException();
   }
index 073d874..cc6f57b 100644 (file)
@@ -43,7 +43,7 @@ public final class Method extends AccessibleObject implements Member {
   public native Class<?>[] getParameterTypes();
   public native Type[] getGenericParameterTypes();
   public native Class<?>[] getExceptionTypes();
-  // TODO: DIRTY HACKS
+  // TODO: Fix for Groovy's model-checking
   public native Type getGenericReturnType();
 
   @Override
index 3076681..ce2866a 100644 (file)
@@ -184,7 +184,6 @@ public abstract class SystemClassLoaderInfo extends ClassLoaderInfo {
 
   @Override
   protected ClassInfo loadSystemClass (String typeName){
-    System.out.println("Loading class: " + typeName);
     return new ClassInfo( typeName, this);
   }
 
index 651e48b..56496a8 100644 (file)
@@ -26,13 +26,6 @@ import java.util.Set;
 import gov.nasa.jpf.Config;
 import gov.nasa.jpf.annotation.MJI;
 
-// TODO: DIRTY HACKS!
-import java.lang.reflect.TypeVariable;
-import sun.reflect.generics.factory.CoreReflectionFactory;
-import sun.reflect.generics.factory.GenericsFactory;
-import sun.reflect.generics.repository.ClassRepository;
-import sun.reflect.generics.scope.ClassScope;
-
 /**
  * MJI NativePeer class for java.lang.Class library abstraction
  */
@@ -41,7 +34,7 @@ public class JPF_java_lang_Class extends NativePeer {
   static final String FIELD_CLASSNAME = "java.lang.reflect.Field";
   static final String METHOD_CLASSNAME = "java.lang.reflect.Method";
   static final String CONSTRUCTOR_CLASSNAME = "java.lang.reflect.Constructor";
-  // TODO: DIRTY HACKS!
+  // TODO: Fix for Groovy's model-checking
   static final String TYPEVARIABLE_CLASSNAME = "java.lang.reflect.TypeVariable";
   
   public static boolean init (Config conf){
@@ -154,48 +147,6 @@ public class JPF_java_lang_Class extends NativePeer {
     return ci.getClassObjectRef();
   }
 
-  // TODO: DIRTY HACKS!
-  /*int createTypeVariableObject (MJIEnv env, ClassInfo objectCi, MethodInfo mi) {
-    // NOTE - we rely on Constructor and Method peers being initialized
-    if (mi.isCtor()){
-      return JPF_java_lang_reflect_Constructor.createConstructorObject(env, objectCi, mi);
-    } else {
-      return JPF_java_lang_reflect_Method.createMethodObject(env, objectCi, mi);
-    }
-  }
-
-  // accessor for factory
-  private GenericsFactory getFactory() {
-    // create scope and factory
-    return CoreReflectionFactory.make(this, ClassScope.make(this));
-  }
-
-  @MJI
-  public int getTypeParameters_____3Ljava_lang_reflect_TypeVariable_2 (MJIEnv env, int objRef){
-    ClassInfo tci = getInitializedClassInfo(env, TYPEVARIABLE_CLASSNAME);
-    if (tci == null) {
-      env.repeatInvocation();
-      return MJIEnv.NULL;
-    }
-    // Get the object and the type parameters
-    ClassInfo ci = env.getReferredClassInfo(objRef);
-    String signature = ci.getType();
-    ClassRepository genericInfo = ClassRepository.make(signature, getFactory());
-    TypeVariable[] typeVariables = (TypeVariable[]) genericInfo.getTypeParameters();
-
-    int aref = env.newObjectArray("Ljava/lang/reflect/TypeVariable;", typeVariables.length);
-
-    for(int i=0, j=0; i<typeVariables.length; i++){
-      if (typeVariables[i] != null) {
-        int mref = env.newObject(ci);
-        env.setReferenceArrayElement(aref,j++,mref);
-      }
-    }
-
-    return aref;
-  }*/
-  // TODO: DIRTY HACKS!
-
   @MJI
   public boolean desiredAssertionStatus____Z (MJIEnv env, int robj) {
     ClassInfo ci = env.getReferredClassInfo(robj);
index a7c5ed9..964968d 100644 (file)
@@ -114,7 +114,7 @@ public class JPF_java_lang_reflect_Method extends NativePeer {
     return getParameterTypes(env, getMethodInfo(env, objRef));
   }
 
-  // TODO: DIRTY HACKS
+  // TODO: Fix for Groovy's model-checking
   @MJI
   public int getGenericParameterTypes_____3Ljava_lang_reflect_Type_2 (MJIEnv env, int objRef){
     //return getGenericParameterTypes(env, getMethodInfo(env, objRef));
@@ -125,7 +125,7 @@ public class JPF_java_lang_reflect_Method extends NativePeer {
   public int getGenericReturnType____Ljava_lang_reflect_Type_2 (MJIEnv env, int objRef){
     return getReturnType____Ljava_lang_Class_2(env, objRef);
   }
-  // TODO: DIRTY HACKS
+  // TODO: Fix for Groovy's model-checking
   
   int getExceptionTypes(MJIEnv env, MethodInfo mi) {
     ThreadInfo ti = env.getThreadInfo();