| Index: base/android/jni_generator/golden_sample_for_tests_jni.h
|
| diff --git a/base/android/jni_generator/golden_sample_for_tests_jni.h b/base/android/jni_generator/golden_sample_for_tests_jni.h
|
| index 2767665935e95bb69f4d890a37c84edb1ad42402..0d4cc5bcfbbbb64a4bfa6f5339f84871c7e9ede7 100644
|
| --- a/base/android/jni_generator/golden_sample_for_tests_jni.h
|
| +++ b/base/android/jni_generator/golden_sample_for_tests_jni.h
|
| @@ -12,12 +12,7 @@
|
|
|
| #include <jni.h>
|
|
|
| -#include "base/android/jni_android.h"
|
| -#include "base/android/scoped_java_ref.h"
|
| -#include "base/basictypes.h"
|
| -#include "base/logging.h"
|
| -
|
| -using base::android::ScopedJavaLocalRef;
|
| +#include "base/android/jni_generator/jni_generator_helper.h"
|
|
|
| // Step 1: forward declarations.
|
| namespace {
|
| @@ -33,6 +28,7 @@ jclass g_InnerStructA_clazz = NULL;
|
| jclass g_SampleForTests_clazz = NULL;
|
| // Leaking this jclass as we cannot use LazyInstance from some threads.
|
| jclass g_InnerStructB_clazz = NULL;
|
| +
|
| } // namespace
|
|
|
| namespace base {
|
| @@ -53,46 +49,53 @@ static jobject GetNonPODDatatype(JNIEnv* env, jobject obj);
|
| // Step 2: method stubs.
|
| static void Destroy(JNIEnv* env, jobject obj,
|
| jint nativeCPPClass) {
|
| - DCHECK(nativeCPPClass) << "Destroy";
|
| CPPClass* native = reinterpret_cast<CPPClass*>(nativeCPPClass);
|
| + CHECK_NATIVE_PTR(native, "Destroy");
|
| return native->Destroy(env, obj);
|
| }
|
|
|
| static jint Method(JNIEnv* env, jobject obj,
|
| jint nativeCPPClass) {
|
| - DCHECK(nativeCPPClass) << "Method";
|
| CPPClass* native = reinterpret_cast<CPPClass*>(nativeCPPClass);
|
| + CHECK_NATIVE_PTR(native, "Method", 0);
|
| return native->Method(env, obj);
|
| }
|
|
|
| static jdouble MethodOtherP0(JNIEnv* env, jobject obj,
|
| jint nativePtr) {
|
| - DCHECK(nativePtr) << "MethodOtherP0";
|
| CPPClass::InnerClass* native =
|
| reinterpret_cast<CPPClass::InnerClass*>(nativePtr);
|
| + CHECK_NATIVE_PTR(native, "MethodOtherP0", 0);
|
| return native->MethodOtherP0(env, obj);
|
| }
|
|
|
| static void AddStructB(JNIEnv* env, jobject obj,
|
| jint nativeCPPClass,
|
| jobject b) {
|
| - DCHECK(nativeCPPClass) << "AddStructB";
|
| CPPClass* native = reinterpret_cast<CPPClass*>(nativeCPPClass);
|
| + CHECK_NATIVE_PTR(native, "AddStructB");
|
| return native->AddStructB(env, obj, b);
|
| }
|
|
|
| static void IterateAndDoSomethingWithStructB(JNIEnv* env, jobject obj,
|
| jint nativeCPPClass) {
|
| - DCHECK(nativeCPPClass) << "IterateAndDoSomethingWithStructB";
|
| CPPClass* native = reinterpret_cast<CPPClass*>(nativeCPPClass);
|
| + CHECK_NATIVE_PTR(native, "IterateAndDoSomethingWithStructB");
|
| return native->IterateAndDoSomethingWithStructB(env, obj);
|
| }
|
|
|
| +static jstring ReturnAString(JNIEnv* env, jobject obj,
|
| + jint nativeCPPClass) {
|
| + CPPClass* native = reinterpret_cast<CPPClass*>(nativeCPPClass);
|
| + CHECK_NATIVE_PTR(native, "ReturnAString", NULL);
|
| + return native->ReturnAString(env, obj).Release();
|
| +}
|
| +
|
| static base::subtle::AtomicWord g_SampleForTests_javaMethod = 0;
|
| static jint Java_SampleForTests_javaMethod(JNIEnv* env, jobject obj, jint foo,
|
| jint bar) {
|
| /* Must call RegisterNativesImpl() */
|
| - DCHECK(g_SampleForTests_clazz);
|
| + CHECK_CLAZZ(g_SampleForTests_clazz, 0);
|
| jmethodID method_id =
|
| base::android::MethodID::LazyGet<
|
| base::android::MethodID::TYPE_INSTANCE>(
|
| @@ -107,16 +110,16 @@ static jint Java_SampleForTests_javaMethod(JNIEnv* env, jobject obj, jint foo,
|
| &g_SampleForTests_javaMethod);
|
|
|
| jint ret =
|
| - env->CallIntMethod(obj,
|
| - method_id, foo, bar);
|
| - base::android::CheckException(env);
|
| + env->CallIntMethod(obj,
|
| + method_id, foo, bar);
|
| + jni_generator::CheckException(env);
|
| return ret;
|
| }
|
|
|
| static base::subtle::AtomicWord g_SampleForTests_staticJavaMethod = 0;
|
| static jboolean Java_SampleForTests_staticJavaMethod(JNIEnv* env) {
|
| /* Must call RegisterNativesImpl() */
|
| - DCHECK(g_SampleForTests_clazz);
|
| + CHECK_CLAZZ(g_SampleForTests_clazz, false);
|
| jmethodID method_id =
|
| base::android::MethodID::LazyGet<
|
| base::android::MethodID::TYPE_STATIC>(
|
| @@ -129,9 +132,9 @@ static jboolean Java_SampleForTests_staticJavaMethod(JNIEnv* env) {
|
| &g_SampleForTests_staticJavaMethod);
|
|
|
| jboolean ret =
|
| - env->CallStaticBooleanMethod(g_SampleForTests_clazz,
|
| - method_id);
|
| - base::android::CheckException(env);
|
| + env->CallStaticBooleanMethod(g_SampleForTests_clazz,
|
| + method_id);
|
| + jni_generator::CheckException(env);
|
| return ret;
|
| }
|
|
|
| @@ -139,7 +142,7 @@ static base::subtle::AtomicWord g_SampleForTests_packagePrivateJavaMethod = 0;
|
| static void Java_SampleForTests_packagePrivateJavaMethod(JNIEnv* env, jobject
|
| obj) {
|
| /* Must call RegisterNativesImpl() */
|
| - DCHECK(g_SampleForTests_clazz);
|
| + CHECK_CLAZZ(g_SampleForTests_clazz);
|
| jmethodID method_id =
|
| base::android::MethodID::LazyGet<
|
| base::android::MethodID::TYPE_INSTANCE>(
|
| @@ -151,9 +154,9 @@ static void Java_SampleForTests_packagePrivateJavaMethod(JNIEnv* env, jobject
|
| "V",
|
| &g_SampleForTests_packagePrivateJavaMethod);
|
|
|
| - env->CallVoidMethod(obj,
|
| - method_id);
|
| - base::android::CheckException(env);
|
| + env->CallVoidMethod(obj,
|
| + method_id);
|
| + jni_generator::CheckException(env);
|
|
|
| }
|
|
|
| @@ -161,7 +164,7 @@ static base::subtle::AtomicWord g_SampleForTests_methodThatThrowsException = 0;
|
| static void Java_SampleForTests_methodThatThrowsException(JNIEnv* env, jobject
|
| obj) {
|
| /* Must call RegisterNativesImpl() */
|
| - DCHECK(g_SampleForTests_clazz);
|
| + CHECK_CLAZZ(g_SampleForTests_clazz);
|
| jmethodID method_id =
|
| base::android::MethodID::LazyGet<
|
| base::android::MethodID::TYPE_INSTANCE>(
|
| @@ -173,18 +176,18 @@ static void Java_SampleForTests_methodThatThrowsException(JNIEnv* env, jobject
|
| "V",
|
| &g_SampleForTests_methodThatThrowsException);
|
|
|
| - env->CallVoidMethod(obj,
|
| - method_id);
|
| + env->CallVoidMethod(obj,
|
| + method_id);
|
|
|
| }
|
|
|
| static base::subtle::AtomicWord g_InnerStructA_create = 0;
|
| -static ScopedJavaLocalRef<jobject> Java_InnerStructA_create(JNIEnv* env, jlong
|
| - l,
|
| +static base::android::ScopedJavaLocalRef<jobject>
|
| + Java_InnerStructA_create(JNIEnv* env, jlong l,
|
| jint i,
|
| jstring s) {
|
| /* Must call RegisterNativesImpl() */
|
| - DCHECK(g_InnerStructA_clazz);
|
| + CHECK_CLAZZ(g_InnerStructA_clazz, NULL);
|
| jmethodID method_id =
|
| base::android::MethodID::LazyGet<
|
| base::android::MethodID::TYPE_STATIC>(
|
| @@ -200,17 +203,17 @@ static ScopedJavaLocalRef<jobject> Java_InnerStructA_create(JNIEnv* env, jlong
|
| &g_InnerStructA_create);
|
|
|
| jobject ret =
|
| - env->CallStaticObjectMethod(g_InnerStructA_clazz,
|
| - method_id, l, i, s);
|
| - base::android::CheckException(env);
|
| - return ScopedJavaLocalRef<jobject>(env, ret);
|
| + env->CallStaticObjectMethod(g_InnerStructA_clazz,
|
| + method_id, l, i, s);
|
| + jni_generator::CheckException(env);
|
| + return base::android::ScopedJavaLocalRef<jobject>(env, ret);
|
| }
|
|
|
| static base::subtle::AtomicWord g_SampleForTests_addStructA = 0;
|
| static void Java_SampleForTests_addStructA(JNIEnv* env, jobject obj, jobject a)
|
| {
|
| /* Must call RegisterNativesImpl() */
|
| - DCHECK(g_SampleForTests_clazz);
|
| + CHECK_CLAZZ(g_SampleForTests_clazz);
|
| jmethodID method_id =
|
| base::android::MethodID::LazyGet<
|
| base::android::MethodID::TYPE_INSTANCE>(
|
| @@ -223,9 +226,9 @@ static void Java_SampleForTests_addStructA(JNIEnv* env, jobject obj, jobject a)
|
| "V",
|
| &g_SampleForTests_addStructA);
|
|
|
| - env->CallVoidMethod(obj,
|
| - method_id, a);
|
| - base::android::CheckException(env);
|
| + env->CallVoidMethod(obj,
|
| + method_id, a);
|
| + jni_generator::CheckException(env);
|
|
|
| }
|
|
|
| @@ -233,7 +236,7 @@ static base::subtle::AtomicWord g_SampleForTests_iterateAndDoSomething = 0;
|
| static void Java_SampleForTests_iterateAndDoSomething(JNIEnv* env, jobject obj)
|
| {
|
| /* Must call RegisterNativesImpl() */
|
| - DCHECK(g_SampleForTests_clazz);
|
| + CHECK_CLAZZ(g_SampleForTests_clazz);
|
| jmethodID method_id =
|
| base::android::MethodID::LazyGet<
|
| base::android::MethodID::TYPE_INSTANCE>(
|
| @@ -245,16 +248,16 @@ static void Java_SampleForTests_iterateAndDoSomething(JNIEnv* env, jobject obj)
|
| "V",
|
| &g_SampleForTests_iterateAndDoSomething);
|
|
|
| - env->CallVoidMethod(obj,
|
| - method_id);
|
| - base::android::CheckException(env);
|
| + env->CallVoidMethod(obj,
|
| + method_id);
|
| + jni_generator::CheckException(env);
|
|
|
| }
|
|
|
| static base::subtle::AtomicWord g_InnerStructB_getKey = 0;
|
| static jlong Java_InnerStructB_getKey(JNIEnv* env, jobject obj) {
|
| /* Must call RegisterNativesImpl() */
|
| - DCHECK(g_InnerStructB_clazz);
|
| + CHECK_CLAZZ(g_InnerStructB_clazz, 0);
|
| jmethodID method_id =
|
| base::android::MethodID::LazyGet<
|
| base::android::MethodID::TYPE_INSTANCE>(
|
| @@ -267,17 +270,17 @@ static jlong Java_InnerStructB_getKey(JNIEnv* env, jobject obj) {
|
| &g_InnerStructB_getKey);
|
|
|
| jlong ret =
|
| - env->CallLongMethod(obj,
|
| - method_id);
|
| - base::android::CheckException(env);
|
| + env->CallLongMethod(obj,
|
| + method_id);
|
| + jni_generator::CheckException(env);
|
| return ret;
|
| }
|
|
|
| static base::subtle::AtomicWord g_InnerStructB_getValue = 0;
|
| -static ScopedJavaLocalRef<jstring> Java_InnerStructB_getValue(JNIEnv* env,
|
| - jobject obj) {
|
| +static base::android::ScopedJavaLocalRef<jstring>
|
| + Java_InnerStructB_getValue(JNIEnv* env, jobject obj) {
|
| /* Must call RegisterNativesImpl() */
|
| - DCHECK(g_InnerStructB_clazz);
|
| + CHECK_CLAZZ(g_InnerStructB_clazz, NULL);
|
| jmethodID method_id =
|
| base::android::MethodID::LazyGet<
|
| base::android::MethodID::TYPE_INSTANCE>(
|
| @@ -290,23 +293,15 @@ static ScopedJavaLocalRef<jstring> Java_InnerStructB_getValue(JNIEnv* env,
|
| &g_InnerStructB_getValue);
|
|
|
| jstring ret =
|
| - static_cast<jstring>(env->CallObjectMethod(obj,
|
| - method_id));
|
| - base::android::CheckException(env);
|
| - return ScopedJavaLocalRef<jstring>(env, ret);
|
| + static_cast<jstring>(env->CallObjectMethod(obj,
|
| + method_id));
|
| + jni_generator::CheckException(env);
|
| + return base::android::ScopedJavaLocalRef<jstring>(env, ret);
|
| }
|
|
|
| // Step 3: RegisterNatives.
|
|
|
| -static bool RegisterNativesImpl(JNIEnv* env) {
|
| -
|
| - g_InnerStructA_clazz = reinterpret_cast<jclass>(env->NewGlobalRef(
|
| - base::android::GetClass(env, kInnerStructAClassPath).obj()));
|
| - g_SampleForTests_clazz = reinterpret_cast<jclass>(env->NewGlobalRef(
|
| - base::android::GetClass(env, kSampleForTestsClassPath).obj()));
|
| - g_InnerStructB_clazz = reinterpret_cast<jclass>(env->NewGlobalRef(
|
| - base::android::GetClass(env, kInnerStructBClassPath).obj()));
|
| - static const JNINativeMethod kMethodsSampleForTests[] = {
|
| +static const JNINativeMethod kMethodsSampleForTests[] = {
|
| { "nativeInit",
|
| "("
|
| "Ljava/lang/String;"
|
| @@ -355,18 +350,34 @@ static bool RegisterNativesImpl(JNIEnv* env) {
|
| "I"
|
| ")"
|
| "V", reinterpret_cast<void*>(IterateAndDoSomethingWithStructB) },
|
| - };
|
| + { "nativeReturnAString",
|
| +"("
|
| +"I"
|
| +")"
|
| +"Ljava/lang/String;", reinterpret_cast<void*>(ReturnAString) },
|
| +};
|
| +
|
| +static bool RegisterNativesImpl(JNIEnv* env) {
|
| + g_InnerStructA_clazz = reinterpret_cast<jclass>(env->NewGlobalRef(
|
| + base::android::GetClass(env, kInnerStructAClassPath).obj()));
|
| + g_SampleForTests_clazz = reinterpret_cast<jclass>(env->NewGlobalRef(
|
| + base::android::GetClass(env, kSampleForTestsClassPath).obj()));
|
| + g_InnerStructB_clazz = reinterpret_cast<jclass>(env->NewGlobalRef(
|
| + base::android::GetClass(env, kInnerStructBClassPath).obj()));
|
| +
|
| const int kMethodsSampleForTestsSize = arraysize(kMethodsSampleForTests);
|
|
|
| if (env->RegisterNatives(g_SampleForTests_clazz,
|
| kMethodsSampleForTests,
|
| kMethodsSampleForTestsSize) < 0) {
|
| - LOG(ERROR) << "RegisterNatives failed in " << __FILE__;
|
| + jni_generator::HandleRegistrationError(
|
| + env, g_SampleForTests_clazz, __FILE__);
|
| return false;
|
| }
|
|
|
| return true;
|
| }
|
| +
|
| } // namespace android
|
| } // namespace base
|
|
|
|
|