Skip to content

Commit

Permalink
use a newer interface FindClass in field and method reflection
Browse files Browse the repository at this point in the history
  • Loading branch information
guoyiteng committed Dec 18, 2019
1 parent 551c3cb commit 3b1fec0
Showing 1 changed file with 8 additions and 9 deletions.
17 changes: 8 additions & 9 deletions runtime/native/jvm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -699,7 +699,7 @@ jobjectArray JVM_GetClassDeclaredMethods(JNIEnv *env, jclass ofClass,
return (jobjectArray)create1DArray(methodArrType, 0);
}

jclass MethodClass = env->FindClass("java.lang.reflect.Method");
jclass MethodClass = FindClass("java.lang.reflect.Method");

// dw475 TODO take into account publiconly argument

Expand All @@ -719,9 +719,9 @@ jobjectArray JVM_GetClassDeclaredMethods(JNIEnv *env, jclass ofClass,

if (methods[i].returnType == nullptr) {
methods[i].returnType =
new jclass(GetJavaClassFromName(classNames.back().c_str()));
new jclass(FindClass(classNames.back().c_str()));
} else if (*methods[i].returnType == NULL) {
LoadJavaClassFromLib(classNames.back().c_str());
FindClass(classNames.back().c_str());
}
jclass returnType = *methods[i].returnType;

Expand All @@ -730,9 +730,9 @@ jobjectArray JVM_GetClassDeclaredMethods(JNIEnv *env, jclass ofClass,
for (int k = 0; k < methods[i].numArgTypes; k++) {
if (methods[i].argTypes[k] == nullptr) {
methods[i].argTypes[k] =
new jclass(GetJavaClassFromName(classNames[k].c_str()));
new jclass(FindClass(classNames[k].c_str()));
} else if (*methods[i].argTypes[k] == nullptr) {
LoadJavaClassFromLib(classNames[k].c_str());
FindClass(classNames[k].c_str());
}
JVM_SetArrayElement(env, paramTypes, k,
*methods[i].argTypes[k]);
Expand Down Expand Up @@ -784,7 +784,7 @@ jobjectArray JVM_GetClassDeclaredFields(JNIEnv *env, jclass ofClass,
return (jobjectArray)create1DArray(fieldArrType, 0);
}

jclass FieldsClass = env->FindClass("java.lang.reflect.Field");
jclass FieldsClass = FindClass("java.lang.reflect.Field");

// dw475 TODO take into account publiconly argument

Expand Down Expand Up @@ -826,13 +826,12 @@ jobjectArray JVM_GetClassDeclaredFields(JNIEnv *env, jclass ofClass,
printf("WARNING: Non-Array field has null type_ptr\n");
}
std::string className = SigToClassName(signature);
*typePtrPtr =
new jclass(GetJavaClassFromName(className.c_str()));
*typePtrPtr = new jclass(FindClass(className.c_str()));
} else if (**typePtrPtr == nullptr) {
// The typeClass that type_ptr points to has not initialized
// yet. Call the class loading function to load it.
std::string className = SigToClassName(signature);
LoadJavaClassFromLib(className.c_str());
FindClass(className.c_str());
if (**typePtrPtr == nullptr) {
printf("WARNING: Class is not loaded correctly\n");
}
Expand Down

0 comments on commit 3b1fec0

Please sign in to comment.