| // Copyright 2005-2006 Google Inc. |
| // All Rights Reserved. |
| |
| // A slim and portable set of JNI methods for GWT hosted mode |
| |
| #include <jni.h> |
| #include <stdlib.h> |
| |
| extern "C" { |
| |
| /* |
| * Class: com_google_gwt_dev_shell_LowLevel |
| * Method: newGlobalRefInt |
| * Signature: (Ljava/lang/Object;)I |
| */ |
| JNIEXPORT jint JNICALL Java_com_google_gwt_dev_shell_LowLevel__1newGlobalRefInt(JNIEnv* env, jclass, jobject o) { |
| return reinterpret_cast<int>(env->NewGlobalRef(o)); |
| } |
| /* |
| * Class: com_google_gwt_dev_shell_LowLevel |
| * Method: objFromGlobalRefInt |
| * Signature: (I)Ljava/lang/Object; |
| */ |
| JNIEXPORT jobject JNICALL Java_com_google_gwt_dev_shell_LowLevel__1objFromGlobalRefInt(JNIEnv* env, jclass, jint globalRef) { |
| return reinterpret_cast<jobject>(globalRef); |
| } |
| |
| /* |
| * Class: com_google_gwt_dev_shell_LowLevel |
| * Method: deleteGlobalRefInt |
| * Signature: (I)I |
| */ |
| JNIEXPORT void JNICALL Java_com_google_gwt_dev_shell_LowLevel__1deleteGlobalRefInt(JNIEnv* env, jclass, jint globalRef) { |
| env->DeleteGlobalRef(reinterpret_cast<jobject>(globalRef)); |
| } |
| |
| /* |
| * Class: com_google_gwt_dev_shell_LowLevel |
| * Method: getEnv |
| * Signature: (Ljava/lang/String;)Ljava/lang/String; |
| */ |
| JNIEXPORT jstring JNICALL Java_com_google_gwt_dev_shell_LowLevel__1getEnv(JNIEnv* env, jclass, jstring key) { |
| if (!key) { |
| // null -> null |
| return 0; |
| } |
| |
| const char* keyPtr = env->GetStringUTFChars(key, 0); |
| if (!keyPtr) { |
| // There will be a pending OutOfMemoryException on this thread, so leave immediately and let it be thrown. |
| return 0; |
| } |
| |
| const char* valuePtr = getenv(keyPtr); |
| env->ReleaseStringUTFChars(key, keyPtr); |
| |
| if (!valuePtr) { |
| // no match found |
| return 0; |
| } |
| |
| // return the result |
| return env->NewStringUTF(valuePtr); |
| } |
| |
| } // extern "C" |