From b75497c8ffbfae5eed0c1372530d8c412cb4feff Mon Sep 17 00:00:00 2001 From: Joel Dice Date: Thu, 20 Dec 2012 09:05:30 -0700 Subject: [PATCH] implement JNIEnv::NewLocalRef --- src/jnienv.cpp | 9 +++++++++ test/JNI.java | 6 ++++++ test/jni.cpp | 6 ++++++ 3 files changed, 21 insertions(+) diff --git a/src/jnienv.cpp b/src/jnienv.cpp index 9d73a233df..f8a0ff3987 100644 --- a/src/jnienv.cpp +++ b/src/jnienv.cpp @@ -396,6 +396,14 @@ Throw(Thread* t, jthrowable throwable) return 0; } +jobject JNICALL +NewLocalRef(Thread* t, jobject o) +{ + ENTER(t, Thread::ActiveState); + + return makeLocalReference(t, *o); +} + void JNICALL DeleteLocalRef(Thread* t, jobject r) { @@ -3513,6 +3521,7 @@ populateJNITables(JavaVMVTable* vmTable, JNIEnvVTable* envTable) envTable->NewDirectByteBuffer = local::NewDirectByteBuffer; envTable->GetDirectBufferAddress = local::GetDirectBufferAddress; envTable->GetDirectBufferCapacity = local::GetDirectBufferCapacity; + envTable->NewLocalRef = local::NewLocalRef; envTable->DeleteLocalRef = local::DeleteLocalRef; envTable->GetObjectClass = local::GetObjectClass; envTable->GetSuperclass = local::GetSuperclass; diff --git a/test/JNI.java b/test/JNI.java index cbb17cc925..955bfc9052 100644 --- a/test/JNI.java +++ b/test/JNI.java @@ -57,6 +57,8 @@ public class JNI { private static native int getStaticIntField(Class c, long id); + private static native Object testLocalRef(Object o); + public static int method242() { return 242; } public static final int field950 = 950; @@ -106,5 +108,9 @@ public class JNI { (JNI.class, fromReflectedField (JNI.class.getField("field950")), true) .getName().equals("field950")); + + { Object o = new Object(); + expect(testLocalRef(o) == o); + } } } diff --git a/test/jni.cpp b/test/jni.cpp index eacf9e31bc..8b8d6dc8c9 100644 --- a/test/jni.cpp +++ b/test/jni.cpp @@ -101,6 +101,12 @@ Java_JNI_getStaticIntField(JNIEnv* e, jclass, jclass c, jlong id) return e->GetStaticIntField(c, reinterpret_cast(id)); } +extern "C" JNIEXPORT jobject JNICALL +Java_JNI_testLocalRef(JNIEnv* e, jclass, jobject o) +{ + return e->NewLocalRef(o); +} + extern "C" JNIEXPORT jobject JNICALL Java_Buffers_allocateNative(JNIEnv* e, jclass, jint capacity) {