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
*/
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){
return MJIEnv.NULL;
}
}
+
+ // TODO: Fix for Groovy's model-checking
+ @MJI
+ public int getTypeParameters_____3Ljava_lang_reflect_TypeVariable_2 (MJIEnv env, int robj){
+ ClassInfo ci = env.getReferredClassInfo( robj);
+ AnnotationInfo[] ai = ci.getAnnotations();
+
+ return 1;
+ }
@MJI
public int getAnnotation__Ljava_lang_Class_2__Ljava_lang_annotation_Annotation_2 (MJIEnv env, int robj,
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);