@@ -20,12 +20,10 @@ void javaReflectionGetMethods(JNIEnv *env, jclass clazz, std::list<jobject>* met
2020 jobject method = env->GetObjectArrayElement (methodObjects, i);
2121 jint methodModifiers = env->CallIntMethod (method, method_getModifiers);
2222 if ((methodModifiers & MODIFIER_STATIC) == MODIFIER_STATIC) {
23- env->DeleteLocalRef (method);
2423 continue ;
2524 }
2625 methods->push_back (method);
2726 }
28- env->DeleteLocalRef (methodObjects);
2927}
3028
3129void javaReflectionGetFields (JNIEnv *env, jclass clazz, std::list<jobject>* fields) {
@@ -40,12 +38,10 @@ void javaReflectionGetFields(JNIEnv *env, jclass clazz, std::list<jobject>* fiel
4038 jobject field = env->GetObjectArrayElement (fieldObjects, i);
4139 jint fieldModifiers = env->CallIntMethod (field, field_getModifiers);
4240 if ((fieldModifiers & MODIFIER_STATIC) == MODIFIER_STATIC) {
43- env->DeleteLocalRef (field);
4441 continue ;
4542 }
4643 fields->push_back (field);
4744 }
48- env->DeleteLocalRef (fieldObjects);
4945}
5046
5147std::string javaToString (JNIEnv *env, jstring str) {
@@ -171,17 +167,12 @@ jobject javaFindField(JNIEnv* env, jclass clazz, std::string& fieldName) {
171167 jobject field = env->GetObjectArrayElement (fieldObjects, i);
172168 jstring fieldNameJava = (jstring)env->CallObjectMethod (field, field_getName);
173169 std::string itFieldName = javaToString (env, fieldNameJava);
174- env->DeleteLocalRef (fieldNameJava);
175170 if (strcmp (itFieldName.c_str (), fieldName.c_str ()) == 0 ) {
176171 result = field;
177172 break ;
178173 }
179- env->DeleteLocalRef (field);
180174 }
181175
182- env->DeleteLocalRef (fieldObjects);
183- env->DeleteLocalRef (clazzclazz);
184- env->DeleteLocalRef (fieldClazz);
185176 return result;
186177}
187178
@@ -295,9 +286,7 @@ jobjectArray v8ToJava(JNIEnv* env, const v8::Arguments& args, int start, int end
295286 for (int i=start; i<end; i++) {
296287 jobject val = v8ToJava (env, args[i]);
297288 env->SetObjectArrayElement (results, i - start, val);
298- env->DeleteLocalRef (val);
299289 }
300- env->DeleteLocalRef (clazz);
301290
302291 return results;
303292}
@@ -436,6 +425,8 @@ v8::Handle<v8::Value> javaToV8(Java* java, JNIEnv* env, jobject obj) {
436425}
437426
438427jobjectArray javaObjectArrayToClasses (JNIEnv *env, jobjectArray objs) {
428+ PUSH_LOCAL_JAVA_FRAME ();
429+
439430 jclass clazzClazz = env->FindClass (" java/lang/Class" );
440431 jsize objsLength = env->GetArrayLength (objs);
441432 jobjectArray results = env->NewObjectArray (objsLength, clazzClazz, NULL );
@@ -446,27 +437,23 @@ jobjectArray javaObjectArrayToClasses(JNIEnv *env, jobjectArray objs) {
446437 } else {
447438 jclass objClazz = env->GetObjectClass (elem);
448439 env->SetObjectArrayElement (results, i, objClazz);
449- env->DeleteLocalRef (objClazz);
450440 }
451- env->DeleteLocalRef (elem);
452441 }
453- env-> DeleteLocalRef (clazzClazz);
454- return results;
442+
443+ POP_LOCAL_JAVA_FRAME_AND_RETURN_JAVA ( results) ;
455444}
456445
457446jobject javaFindMethod (JNIEnv *env, jclass clazz, std::string& methodName, jobjectArray methodArgs) {
447+ PUSH_LOCAL_JAVA_FRAME ();
448+
458449 jclass methodUtilsClazz = env->FindClass (" com/nearinfinity/org/apache/commons/lang3/reflect/MethodUtils" );
459450 jmethodID methodUtils_getMatchingAccessibleMethod = env->GetStaticMethodID (methodUtilsClazz, " getMatchingAccessibleMethod" , " (Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;" );
460451 const char *methodNameCStr = methodName.c_str ();
461452 jstring methodNameJavaStr = env->NewStringUTF (methodNameCStr);
462453 jobjectArray methodArgClasses = javaObjectArrayToClasses (env, methodArgs);
463454 jobject method = env->CallStaticObjectMethod (methodUtilsClazz, methodUtils_getMatchingAccessibleMethod, clazz, methodNameJavaStr, methodArgClasses);
464455
465- env->DeleteLocalRef (methodUtilsClazz);
466- env->DeleteLocalRef (methodNameJavaStr);
467- env->DeleteLocalRef (methodArgClasses);
468-
469- return method;
456+ POP_LOCAL_JAVA_FRAME_AND_RETURN_JAVA (method);
470457}
471458
472459jobject javaFindConstructor (JNIEnv *env, jclass clazz, jobjectArray methodArgs) {
0 commit comments