ClassLoader* rvmGetSystemClassLoader(Env* env) { Class* holder = rvmFindClassUsingLoader(env, "java/lang/ClassLoader$SystemClassLoader", NULL); if (!holder) return NULL; ClassField* field = rvmGetClassField(env, holder, "loader", "Ljava/lang/ClassLoader;"); if (!field) return NULL; return (ClassLoader*) rvmGetObjectClassFieldValue(env, holder, field); }
Object* Java_java_lang_ClassCache_loadReflectionAccess(Env* env, JClass* c) { JClass* ao = rvmFindClassUsingLoader(env, "java/lang/reflect/AccessibleObject", NULL); if (!ao) return NULL; ClassField* f = rvmGetClassField(env, ao, "REFLECTION_ACCESS", "Lorg/robovm/rt/ReflectionAccess;"); if (!f) return NULL; return rvmGetObjectClassFieldValue(env, ao, f); }
jboolean rvmInitPrimitiveWrapperClasses(Env* env) { Class* c = NULL; ClassField* f = NULL; f = rvmGetClassField(env, java_lang_Boolean, "TRUE", "Ljava/lang/Boolean;"); if (!f) return FALSE; java_lang_Boolean_TRUE = (Boolean*) rvmGetObjectClassFieldValue(env, java_lang_Boolean, f); if (!java_lang_Boolean_TRUE) return FALSE; f = rvmGetClassField(env, java_lang_Boolean, "FALSE", "Ljava/lang/Boolean;"); if (!f) return FALSE; java_lang_Boolean_FALSE = (Boolean*) rvmGetObjectClassFieldValue(env, java_lang_Boolean, f); if (!java_lang_Boolean_FALSE) return FALSE; java_lang_Byte_valueOf = rvmGetClassMethod(env, java_lang_Byte, "valueOf", "(B)Ljava/lang/Byte;"); if (!java_lang_Byte_valueOf) return FALSE; f = rvmGetClassField(env, java_lang_Byte, "VALUES", "[Ljava/lang/Byte;"); if (!f) return FALSE; bytesCache = (ObjectArray*) rvmGetObjectClassFieldValue(env, java_lang_Byte, f); if (!bytesCache) return FALSE; java_lang_Short_valueOf = rvmGetClassMethod(env, java_lang_Short, "valueOf", "(S)Ljava/lang/Short;"); if (!java_lang_Short_valueOf) return FALSE; f = rvmGetClassField(env, java_lang_Short, "SMALL_VALUES", "[Ljava/lang/Short;"); if (!f) return FALSE; shortsCache = (ObjectArray*) rvmGetObjectClassFieldValue(env, c, f); if (!shortsCache) return FALSE; java_lang_Character_valueOf = rvmGetClassMethod(env, java_lang_Character, "valueOf", "(C)Ljava/lang/Character;"); if (!java_lang_Character_valueOf) return FALSE; f = rvmGetClassField(env, java_lang_Character, "SMALL_VALUES", "[Ljava/lang/Character;"); if (!f) return FALSE; charactersCache = (ObjectArray*) rvmGetObjectClassFieldValue(env, c, f); if (!charactersCache) return FALSE; java_lang_Integer_valueOf = rvmGetClassMethod(env, java_lang_Integer, "valueOf", "(I)Ljava/lang/Integer;"); if (!java_lang_Integer_valueOf) return FALSE; f = rvmGetClassField(env, java_lang_Integer, "SMALL_VALUES", "[Ljava/lang/Integer;"); if (!f) return FALSE; integersCache = (ObjectArray*) rvmGetObjectClassFieldValue(env, c, f); if (!integersCache) return FALSE; java_lang_Long_valueOf = rvmGetClassMethod(env, java_lang_Long, "valueOf", "(J)Ljava/lang/Long;"); if (!java_lang_Long_valueOf) return FALSE; f = rvmGetClassField(env, java_lang_Long, "SMALL_VALUES", "[Ljava/lang/Long;"); if (!f) return FALSE; longsCache = (ObjectArray*) rvmGetObjectClassFieldValue(env, c, f); if (!longsCache) return FALSE; java_lang_Float_valueOf = rvmGetClassMethod(env, java_lang_Float, "valueOf", "(F)Ljava/lang/Float;"); if (!java_lang_Float_valueOf) return FALSE; java_lang_Double_valueOf = rvmGetClassMethod(env, java_lang_Double, "valueOf", "(D)Ljava/lang/Double;"); if (!java_lang_Double_valueOf) return FALSE; return TRUE; }
static jboolean parseEnumElementValue(Env* env, void** attributes, Object* classLoader, jvalue* result) { jbyte tag = getByte(attributes); if (tag != 'e') return throwFormatError(env, "java.lang.Enum"); char* className = getString(attributes); char* constName = getString(attributes); Class* c = findType(env, className, classLoader); if (c) { ClassField* f = rvmGetClassField(env, c, constName, className); if (f) { result->l = (jobject) rvmGetObjectClassFieldValue(env, c, f); } } return result->l ? TRUE : FALSE; }
static jfieldID GetStaticFieldID(JNIEnv* env, jclass clazz, const char* name, const char* sig) { return (jfieldID) rvmGetClassField((Env*) env, (Class*) clazz, (char*) name, (char*) sig); }