implement JNIEnv::NewLocalRef

This commit is contained in:
Joel Dice 2012-12-20 09:05:30 -07:00
parent 1094483a7c
commit b75497c8ff
3 changed files with 21 additions and 0 deletions

View File

@ -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;

View File

@ -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);
}
}
}

View File

@ -101,6 +101,12 @@ Java_JNI_getStaticIntField(JNIEnv* e, jclass, jclass c, jlong id)
return e->GetStaticIntField(c, reinterpret_cast<jfieldID>(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)
{