Revert 290810 "Make class lookup lazy in jni_generator when usin..."

> Make class lookup lazy in jni_generator when using lazy method lookup.
> 
> This removes the eager class registration from RegisterNatives when possible.
> 
> BUG=402003
> TBR=sievers@chromium.org, brettw@chromium.org
> 
> Review URL: https://codereview.chromium.org/472553002

TBR=mkosiba@chromium.org

Review URL: https://codereview.chromium.org/492713002

Cr-Commit-Position: refs/heads/master@{#290813}
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@290813 0039d316-1c4b-4281-b951-d872f2087c98
parent aca4d3a6
...@@ -6,7 +6,6 @@ ...@@ -6,7 +6,6 @@
#include "android_webview/native/android_webview_jni_registrar.h" #include "android_webview/native/android_webview_jni_registrar.h"
#include "base/android/jni_android.h" #include "base/android/jni_android.h"
#include "base/android/jni_registrar.h" #include "base/android/jni_registrar.h"
#include "base/android/jni_utils.h"
#include "base/android/library_loader/library_loader_hooks.h" #include "base/android/library_loader/library_loader_hooks.h"
#include "components/navigation_interception/component_jni_registrar.h" #include "components/navigation_interception/component_jni_registrar.h"
#include "components/web_contents_delegate_android/component_jni_registrar.h" #include "components/web_contents_delegate_android/component_jni_registrar.h"
...@@ -48,9 +47,6 @@ JNI_EXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) { ...@@ -48,9 +47,6 @@ JNI_EXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) {
if (!android_webview::RegisterJni(env)) if (!android_webview::RegisterJni(env))
return -1; return -1;
base::android::InitReplacementClassLoader(env,
base::android::GetClassLoader(env));
content::SetContentMainDelegate(new android_webview::AwMainDelegate()); content::SetContentMainDelegate(new android_webview::AwMainDelegate());
// Initialize url lib here while we are still single-threaded, in case we use // Initialize url lib here while we are still single-threaded, in case we use
......
...@@ -49,8 +49,6 @@ component("base") { ...@@ -49,8 +49,6 @@ component("base") {
"android/jni_registrar.h", "android/jni_registrar.h",
"android/jni_string.cc", "android/jni_string.cc",
"android/jni_string.h", "android/jni_string.h",
"android/jni_utils.cc",
"android/jni_utils.h",
"android/jni_weak_ref.cc", "android/jni_weak_ref.cc",
"android/jni_weak_ref.h", "android/jni_weak_ref.h",
"android/library_loader/library_loader_hooks.cc", "android/library_loader/library_loader_hooks.cc",
...@@ -1345,7 +1343,6 @@ if (is_android) { ...@@ -1345,7 +1343,6 @@ if (is_android) {
"android/java/src/org/chromium/base/EventLog.java", "android/java/src/org/chromium/base/EventLog.java",
"android/java/src/org/chromium/base/FieldTrialList.java", "android/java/src/org/chromium/base/FieldTrialList.java",
"android/java/src/org/chromium/base/ImportantFileWriterAndroid.java", "android/java/src/org/chromium/base/ImportantFileWriterAndroid.java",
"android/java/src/org/chromium/base/JNIUtils.java",
"android/java/src/org/chromium/base/library_loader/LibraryLoader.java", "android/java/src/org/chromium/base/library_loader/LibraryLoader.java",
"android/java/src/org/chromium/base/MemoryPressureListener.java", "android/java/src/org/chromium/base/MemoryPressureListener.java",
"android/java/src/org/chromium/base/JavaHandlerThread.java", "android/java/src/org/chromium/base/JavaHandlerThread.java",
......
...@@ -15,7 +15,6 @@ ...@@ -15,7 +15,6 @@
#include "base/android/java_handler_thread.h" #include "base/android/java_handler_thread.h"
#include "base/android/jni_android.h" #include "base/android/jni_android.h"
#include "base/android/jni_registrar.h" #include "base/android/jni_registrar.h"
#include "base/android/jni_utils.h"
#include "base/android/memory_pressure_listener_android.h" #include "base/android/memory_pressure_listener_android.h"
#include "base/android/path_service_android.h" #include "base/android/path_service_android.h"
#include "base/android/path_utils.h" #include "base/android/path_utils.h"
...@@ -41,7 +40,6 @@ static RegistrationMethod kBaseRegisteredMethods[] = { ...@@ -41,7 +40,6 @@ static RegistrationMethod kBaseRegisteredMethods[] = {
{ "FieldTrialList", base::android::RegisterFieldTrialList }, { "FieldTrialList", base::android::RegisterFieldTrialList },
{ "ImportantFileWriterAndroid", { "ImportantFileWriterAndroid",
base::android::RegisterImportantFileWriterAndroid }, base::android::RegisterImportantFileWriterAndroid },
{ "JNIUtils", base::android::RegisterJNIUtils },
{ "MemoryPressureListenerAndroid", { "MemoryPressureListenerAndroid",
base::android::MemoryPressureListenerAndroid::Register }, base::android::MemoryPressureListenerAndroid::Register },
{ "JavaHandlerThread", base::android::JavaHandlerThread::RegisterBindings }, { "JavaHandlerThread", base::android::JavaHandlerThread::RegisterBindings },
......
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.base;
/**
* This class provides JNI-related methods to the native library.
*/
public class JNIUtils {
/**
* This returns a ClassLoader that is capable of loading Chromium Java code. Such a ClassLoader
* is needed for the few cases where the JNI mechanism is unable to automatically determine the
* appropriate ClassLoader instance.
*/
@CalledByNative
public static Object getClassLoader() {
return JNIUtils.class.getClassLoader();
}
}
...@@ -8,7 +8,6 @@ ...@@ -8,7 +8,6 @@
#include "base/android/build_info.h" #include "base/android/build_info.h"
#include "base/android/jni_string.h" #include "base/android/jni_string.h"
#include "base/android/jni_utils.h"
#include "base/lazy_instance.h" #include "base/lazy_instance.h"
#include "base/logging.h" #include "base/logging.h"
...@@ -22,9 +21,6 @@ JavaVM* g_jvm = NULL; ...@@ -22,9 +21,6 @@ JavaVM* g_jvm = NULL;
// that may still be running at shutdown. There is no harm in doing this. // that may still be running at shutdown. There is no harm in doing this.
base::LazyInstance<base::android::ScopedJavaGlobalRef<jobject> >::Leaky base::LazyInstance<base::android::ScopedJavaGlobalRef<jobject> >::Leaky
g_application_context = LAZY_INSTANCE_INITIALIZER; g_application_context = LAZY_INSTANCE_INITIALIZER;
base::LazyInstance<base::android::ScopedJavaGlobalRef<jobject> >::Leaky
g_class_loader = LAZY_INSTANCE_INITIALIZER;
jmethodID g_class_loader_load_class_method_id = 0;
std::string GetJavaExceptionInfo(JNIEnv* env, jthrowable java_throwable) { std::string GetJavaExceptionInfo(JNIEnv* env, jthrowable java_throwable) {
ScopedJavaLocalRef<jclass> throwable_clazz = ScopedJavaLocalRef<jclass> throwable_clazz =
...@@ -122,68 +118,17 @@ void InitApplicationContext(JNIEnv* env, const JavaRef<jobject>& context) { ...@@ -122,68 +118,17 @@ void InitApplicationContext(JNIEnv* env, const JavaRef<jobject>& context) {
g_application_context.Get().Reset(context); g_application_context.Get().Reset(context);
} }
void InitReplacementClassLoader(JNIEnv* env,
const JavaRef<jobject>& class_loader) {
DCHECK(g_class_loader.Get().is_null());
DCHECK(!class_loader.is_null());
ScopedJavaLocalRef<jclass> class_loader_clazz =
GetClass(env, "java/lang/ClassLoader");
CHECK(!ClearException(env));
g_class_loader_load_class_method_id =
env->GetMethodID(class_loader_clazz.obj(),
"loadClass",
"(Ljava/lang/String;)Ljava/lang/Class;");
CHECK(!ClearException(env));
DCHECK(env->IsInstanceOf(class_loader.obj(), class_loader_clazz.obj()));
g_class_loader.Get().Reset(class_loader);
}
const jobject GetApplicationContext() { const jobject GetApplicationContext() {
DCHECK(!g_application_context.Get().is_null()); DCHECK(!g_application_context.Get().is_null());
return g_application_context.Get().obj(); return g_application_context.Get().obj();
} }
ScopedJavaLocalRef<jclass> GetClass(JNIEnv* env, const char* class_name) { ScopedJavaLocalRef<jclass> GetClass(JNIEnv* env, const char* class_name) {
jclass clazz; jclass clazz = env->FindClass(class_name);
if (!g_class_loader.Get().is_null()) {
clazz = static_cast<jclass>(
env->CallObjectMethod(g_class_loader.Get().obj(),
g_class_loader_load_class_method_id,
ConvertUTF8ToJavaString(env, class_name).obj()));
} else {
clazz = env->FindClass(class_name);
}
CHECK(!ClearException(env) && clazz) << "Failed to find class " << class_name; CHECK(!ClearException(env) && clazz) << "Failed to find class " << class_name;
return ScopedJavaLocalRef<jclass>(env, clazz); return ScopedJavaLocalRef<jclass>(env, clazz);
} }
jclass LazyGetClass(
JNIEnv* env,
const char* class_name,
base::subtle::AtomicWord* atomic_class_id) {
COMPILE_ASSERT(sizeof(subtle::AtomicWord) >= sizeof(jclass),
AtomicWord_SmallerThan_jMethodID);
subtle::AtomicWord value = base::subtle::Acquire_Load(atomic_class_id);
if (value)
return reinterpret_cast<jclass>(value);
ScopedJavaGlobalRef<jclass> clazz;
clazz.Reset(GetClass(env, class_name));
subtle::AtomicWord null_aw = reinterpret_cast<subtle::AtomicWord>(NULL);
subtle::AtomicWord cas_result = base::subtle::Release_CompareAndSwap(
atomic_class_id,
null_aw,
reinterpret_cast<subtle::AtomicWord>(clazz.obj()));
if (cas_result == null_aw) {
// We intentionally leak the global ref since we now storing it as a raw
// pointer in |atomic_class_id|.
return clazz.Release();
} else {
return reinterpret_cast<jclass>(cas_result);
}
}
template<MethodID::Type type> template<MethodID::Type type>
jmethodID MethodID::Get(JNIEnv* env, jmethodID MethodID::Get(JNIEnv* env,
jclass clazz, jclass clazz,
......
...@@ -53,15 +53,6 @@ BASE_EXPORT bool IsVMInitialized(); ...@@ -53,15 +53,6 @@ BASE_EXPORT bool IsVMInitialized();
BASE_EXPORT void InitApplicationContext(JNIEnv* env, BASE_EXPORT void InitApplicationContext(JNIEnv* env,
const JavaRef<jobject>& context); const JavaRef<jobject>& context);
// Initializes the global ClassLoader used by the GetClass and LazyGetClass
// methods. This is needed because JNI will use the base ClassLoader when there
// is no Java code on the stack. The base ClassLoader doesn't know about any of
// the application classes and will fail to lookup anything other than system
// classes.
BASE_EXPORT void InitReplacementClassLoader(
JNIEnv* env,
const JavaRef<jobject>& class_loader);
// Gets a global ref to the application context set with // Gets a global ref to the application context set with
// InitApplicationContext(). Ownership is retained by the function - the caller // InitApplicationContext(). Ownership is retained by the function - the caller
// must NOT release it. // must NOT release it.
...@@ -75,17 +66,6 @@ const BASE_EXPORT jobject GetApplicationContext(); ...@@ -75,17 +66,6 @@ const BASE_EXPORT jobject GetApplicationContext();
BASE_EXPORT ScopedJavaLocalRef<jclass> GetClass(JNIEnv* env, BASE_EXPORT ScopedJavaLocalRef<jclass> GetClass(JNIEnv* env,
const char* class_name); const char* class_name);
// The method will initialize |atomic_class_id| to contain a global ref to the
// class. And will return that ref on subsequent calls. It's the caller's
// responsibility to release the ref when it is no longer needed.
// The caller is responsible to zero-initialize |atomic_method_id|.
// It's fine to simultaneously call this on multiple threads referencing the
// same |atomic_method_id|.
BASE_EXPORT jclass LazyGetClass(
JNIEnv* env,
const char* class_name,
base::subtle::AtomicWord* atomic_class_id);
// This class is a wrapper for JNIEnv Get(Static)MethodID. // This class is a wrapper for JNIEnv Get(Static)MethodID.
class BASE_EXPORT MethodID { class BASE_EXPORT MethodID {
public: public:
......
// Copyright 2014 The Chromium Authors. All rights reserved. // Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
...@@ -24,22 +24,12 @@ const char kSampleForTestsClassPath[] = ...@@ -24,22 +24,12 @@ const char kSampleForTestsClassPath[] =
"org/chromium/example/jni_generator/SampleForTests"; "org/chromium/example/jni_generator/SampleForTests";
const char kInnerStructBClassPath[] = const char kInnerStructBClassPath[] =
"org/chromium/example/jni_generator/SampleForTests$InnerStructB"; "org/chromium/example/jni_generator/SampleForTests$InnerStructB";
#if __clang__
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-function"
#endif
// Leaking this jclass as we cannot use LazyInstance from some threads. // Leaking this jclass as we cannot use LazyInstance from some threads.
jclass g_InnerStructA_clazz = NULL; jclass g_InnerStructA_clazz = NULL;
jclass InnerStructA_clazz(JNIEnv*) { return g_InnerStructA_clazz; }
// Leaking this jclass as we cannot use LazyInstance from some threads. // Leaking this jclass as we cannot use LazyInstance from some threads.
jclass g_SampleForTests_clazz = NULL; jclass g_SampleForTests_clazz = NULL;
jclass SampleForTests_clazz(JNIEnv*) { return g_SampleForTests_clazz; }
// Leaking this jclass as we cannot use LazyInstance from some threads. // Leaking this jclass as we cannot use LazyInstance from some threads.
jclass g_InnerStructB_clazz = NULL; jclass g_InnerStructB_clazz = NULL;
jclass InnerStructB_clazz(JNIEnv*) { return g_InnerStructB_clazz; }
#if __clang__
#pragma clang diagnostic pop
#endif
} // namespace } // namespace
...@@ -109,11 +99,11 @@ static jint Java_SampleForTests_javaMethod(JNIEnv* env, jobject obj, ...@@ -109,11 +99,11 @@ static jint Java_SampleForTests_javaMethod(JNIEnv* env, jobject obj,
JniIntWrapper bar) { JniIntWrapper bar) {
/* Must call RegisterNativesImpl() */ /* Must call RegisterNativesImpl() */
CHECK_CLAZZ(env, obj, CHECK_CLAZZ(env, obj,
SampleForTests_clazz(env), 0); g_SampleForTests_clazz, 0);
jmethodID method_id = jmethodID method_id =
base::android::MethodID::LazyGet< base::android::MethodID::LazyGet<
base::android::MethodID::TYPE_INSTANCE>( base::android::MethodID::TYPE_INSTANCE>(
env, SampleForTests_clazz(env), env, g_SampleForTests_clazz,
"javaMethod", "javaMethod",
"(" "("
...@@ -133,12 +123,12 @@ static jint Java_SampleForTests_javaMethod(JNIEnv* env, jobject obj, ...@@ -133,12 +123,12 @@ static jint Java_SampleForTests_javaMethod(JNIEnv* env, jobject obj,
static base::subtle::AtomicWord g_SampleForTests_staticJavaMethod = 0; static base::subtle::AtomicWord g_SampleForTests_staticJavaMethod = 0;
static jboolean Java_SampleForTests_staticJavaMethod(JNIEnv* env) { static jboolean Java_SampleForTests_staticJavaMethod(JNIEnv* env) {
/* Must call RegisterNativesImpl() */ /* Must call RegisterNativesImpl() */
CHECK_CLAZZ(env, SampleForTests_clazz(env), CHECK_CLAZZ(env, g_SampleForTests_clazz,
SampleForTests_clazz(env), false); g_SampleForTests_clazz, false);
jmethodID method_id = jmethodID method_id =
base::android::MethodID::LazyGet< base::android::MethodID::LazyGet<
base::android::MethodID::TYPE_STATIC>( base::android::MethodID::TYPE_STATIC>(
env, SampleForTests_clazz(env), env, g_SampleForTests_clazz,
"staticJavaMethod", "staticJavaMethod",
"(" "("
...@@ -147,7 +137,7 @@ static jboolean Java_SampleForTests_staticJavaMethod(JNIEnv* env) { ...@@ -147,7 +137,7 @@ static jboolean Java_SampleForTests_staticJavaMethod(JNIEnv* env) {
&g_SampleForTests_staticJavaMethod); &g_SampleForTests_staticJavaMethod);
jboolean ret = jboolean ret =
env->CallStaticBooleanMethod(SampleForTests_clazz(env), env->CallStaticBooleanMethod(g_SampleForTests_clazz,
method_id); method_id);
jni_generator::CheckException(env); jni_generator::CheckException(env);
return ret; return ret;
...@@ -158,11 +148,11 @@ static void Java_SampleForTests_packagePrivateJavaMethod(JNIEnv* env, jobject ...@@ -158,11 +148,11 @@ static void Java_SampleForTests_packagePrivateJavaMethod(JNIEnv* env, jobject
obj) { obj) {
/* Must call RegisterNativesImpl() */ /* Must call RegisterNativesImpl() */
CHECK_CLAZZ(env, obj, CHECK_CLAZZ(env, obj,
SampleForTests_clazz(env)); g_SampleForTests_clazz);
jmethodID method_id = jmethodID method_id =
base::android::MethodID::LazyGet< base::android::MethodID::LazyGet<
base::android::MethodID::TYPE_INSTANCE>( base::android::MethodID::TYPE_INSTANCE>(
env, SampleForTests_clazz(env), env, g_SampleForTests_clazz,
"packagePrivateJavaMethod", "packagePrivateJavaMethod",
"(" "("
...@@ -181,11 +171,11 @@ static void Java_SampleForTests_methodThatThrowsException(JNIEnv* env, jobject ...@@ -181,11 +171,11 @@ static void Java_SampleForTests_methodThatThrowsException(JNIEnv* env, jobject
obj) { obj) {
/* Must call RegisterNativesImpl() */ /* Must call RegisterNativesImpl() */
CHECK_CLAZZ(env, obj, CHECK_CLAZZ(env, obj,
SampleForTests_clazz(env)); g_SampleForTests_clazz);
jmethodID method_id = jmethodID method_id =
base::android::MethodID::LazyGet< base::android::MethodID::LazyGet<
base::android::MethodID::TYPE_INSTANCE>( base::android::MethodID::TYPE_INSTANCE>(
env, SampleForTests_clazz(env), env, g_SampleForTests_clazz,
"methodThatThrowsException", "methodThatThrowsException",
"(" "("
...@@ -204,12 +194,12 @@ static base::android::ScopedJavaLocalRef<jobject> ...@@ -204,12 +194,12 @@ static base::android::ScopedJavaLocalRef<jobject>
JniIntWrapper i, JniIntWrapper i,
jstring s) { jstring s) {
/* Must call RegisterNativesImpl() */ /* Must call RegisterNativesImpl() */
CHECK_CLAZZ(env, InnerStructA_clazz(env), CHECK_CLAZZ(env, g_InnerStructA_clazz,
InnerStructA_clazz(env), NULL); g_InnerStructA_clazz, NULL);
jmethodID method_id = jmethodID method_id =
base::android::MethodID::LazyGet< base::android::MethodID::LazyGet<
base::android::MethodID::TYPE_STATIC>( base::android::MethodID::TYPE_STATIC>(
env, InnerStructA_clazz(env), env, g_InnerStructA_clazz,
"create", "create",
"(" "("
...@@ -221,7 +211,7 @@ static base::android::ScopedJavaLocalRef<jobject> ...@@ -221,7 +211,7 @@ static base::android::ScopedJavaLocalRef<jobject>
&g_InnerStructA_create); &g_InnerStructA_create);
jobject ret = jobject ret =
env->CallStaticObjectMethod(InnerStructA_clazz(env), env->CallStaticObjectMethod(g_InnerStructA_clazz,
method_id, l, as_jint(i), s); method_id, l, as_jint(i), s);
jni_generator::CheckException(env); jni_generator::CheckException(env);
return base::android::ScopedJavaLocalRef<jobject>(env, ret); return base::android::ScopedJavaLocalRef<jobject>(env, ret);
...@@ -232,11 +222,11 @@ static void Java_SampleForTests_addStructA(JNIEnv* env, jobject obj, jobject a) ...@@ -232,11 +222,11 @@ static void Java_SampleForTests_addStructA(JNIEnv* env, jobject obj, jobject a)
{ {
/* Must call RegisterNativesImpl() */ /* Must call RegisterNativesImpl() */
CHECK_CLAZZ(env, obj, CHECK_CLAZZ(env, obj,
SampleForTests_clazz(env)); g_SampleForTests_clazz);
jmethodID method_id = jmethodID method_id =
base::android::MethodID::LazyGet< base::android::MethodID::LazyGet<
base::android::MethodID::TYPE_INSTANCE>( base::android::MethodID::TYPE_INSTANCE>(
env, SampleForTests_clazz(env), env, g_SampleForTests_clazz,
"addStructA", "addStructA",
"(" "("
...@@ -256,11 +246,11 @@ static void Java_SampleForTests_iterateAndDoSomething(JNIEnv* env, jobject obj) ...@@ -256,11 +246,11 @@ static void Java_SampleForTests_iterateAndDoSomething(JNIEnv* env, jobject obj)
{ {
/* Must call RegisterNativesImpl() */ /* Must call RegisterNativesImpl() */
CHECK_CLAZZ(env, obj, CHECK_CLAZZ(env, obj,
SampleForTests_clazz(env)); g_SampleForTests_clazz);
jmethodID method_id = jmethodID method_id =
base::android::MethodID::LazyGet< base::android::MethodID::LazyGet<
base::android::MethodID::TYPE_INSTANCE>( base::android::MethodID::TYPE_INSTANCE>(
env, SampleForTests_clazz(env), env, g_SampleForTests_clazz,
"iterateAndDoSomething", "iterateAndDoSomething",
"(" "("
...@@ -278,11 +268,11 @@ static base::subtle::AtomicWord g_InnerStructB_getKey = 0; ...@@ -278,11 +268,11 @@ static base::subtle::AtomicWord g_InnerStructB_getKey = 0;
static jlong Java_InnerStructB_getKey(JNIEnv* env, jobject obj) { static jlong Java_InnerStructB_getKey(JNIEnv* env, jobject obj) {
/* Must call RegisterNativesImpl() */ /* Must call RegisterNativesImpl() */
CHECK_CLAZZ(env, obj, CHECK_CLAZZ(env, obj,
InnerStructB_clazz(env), 0); g_InnerStructB_clazz, 0);
jmethodID method_id = jmethodID method_id =
base::android::MethodID::LazyGet< base::android::MethodID::LazyGet<
base::android::MethodID::TYPE_INSTANCE>( base::android::MethodID::TYPE_INSTANCE>(
env, InnerStructB_clazz(env), env, g_InnerStructB_clazz,
"getKey", "getKey",
"(" "("
...@@ -302,11 +292,11 @@ static base::android::ScopedJavaLocalRef<jstring> ...@@ -302,11 +292,11 @@ static base::android::ScopedJavaLocalRef<jstring>
Java_InnerStructB_getValue(JNIEnv* env, jobject obj) { Java_InnerStructB_getValue(JNIEnv* env, jobject obj) {
/* Must call RegisterNativesImpl() */ /* Must call RegisterNativesImpl() */
CHECK_CLAZZ(env, obj, CHECK_CLAZZ(env, obj,
InnerStructB_clazz(env), NULL); g_InnerStructB_clazz, NULL);
jmethodID method_id = jmethodID method_id =
base::android::MethodID::LazyGet< base::android::MethodID::LazyGet<
base::android::MethodID::TYPE_INSTANCE>( base::android::MethodID::TYPE_INSTANCE>(
env, InnerStructB_clazz(env), env, g_InnerStructB_clazz,
"getValue", "getValue",
"(" "("
...@@ -389,11 +379,11 @@ static bool RegisterNativesImpl(JNIEnv* env) { ...@@ -389,11 +379,11 @@ static bool RegisterNativesImpl(JNIEnv* env) {
const int kMethodsSampleForTestsSize = arraysize(kMethodsSampleForTests); const int kMethodsSampleForTestsSize = arraysize(kMethodsSampleForTests);
if (env->RegisterNatives(SampleForTests_clazz(env), if (env->RegisterNatives(g_SampleForTests_clazz,
kMethodsSampleForTests, kMethodsSampleForTests,
kMethodsSampleForTestsSize) < 0) { kMethodsSampleForTestsSize) < 0) {
jni_generator::HandleRegistrationError( jni_generator::HandleRegistrationError(
env, SampleForTests_clazz(env), __FILE__); env, g_SampleForTests_clazz, __FILE__);
return false; return false;
} }
......
...@@ -731,7 +731,7 @@ class InlHeaderFileGenerator(object): ...@@ -731,7 +731,7 @@ class InlHeaderFileGenerator(object):
def GetContent(self): def GetContent(self):
"""Returns the content of the JNI binding file.""" """Returns the content of the JNI binding file."""
template = Template("""\ template = Template("""\
// Copyright 2014 The Chromium Authors. All rights reserved. // Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
...@@ -947,11 +947,11 @@ ${CALLED_BY_NATIVES} ...@@ -947,11 +947,11 @@ ${CALLED_BY_NATIVES}
template = Template("""\ template = Template("""\
const int kMethods${JAVA_CLASS}Size = arraysize(kMethods${JAVA_CLASS}); const int kMethods${JAVA_CLASS}Size = arraysize(kMethods${JAVA_CLASS});
if (env->RegisterNatives(${JAVA_CLASS}_clazz(env), if (env->RegisterNatives(g_${JAVA_CLASS}_clazz,
kMethods${JAVA_CLASS}, kMethods${JAVA_CLASS},
kMethods${JAVA_CLASS}Size) < 0) { kMethods${JAVA_CLASS}Size) < 0) {
jni_generator::HandleRegistrationError( jni_generator::HandleRegistrationError(
env, ${JAVA_CLASS}_clazz(env), __FILE__); env, g_${JAVA_CLASS}_clazz, __FILE__);
return false; return false;
} }
""") """)
...@@ -1122,10 +1122,11 @@ static ${RETURN} ${NAME}(JNIEnv* env, ${PARAMS_IN_DECLARATION}) {""" ...@@ -1122,10 +1122,11 @@ static ${RETURN} ${NAME}(JNIEnv* env, ${PARAMS_IN_DECLARATION}) {"""
def GetCalledByNativeValues(self, called_by_native): def GetCalledByNativeValues(self, called_by_native):
"""Fills in necessary values for the CalledByNative methods.""" """Fills in necessary values for the CalledByNative methods."""
java_class = called_by_native.java_class_name or self.class_name
if called_by_native.static or called_by_native.is_constructor: if called_by_native.static or called_by_native.is_constructor:
first_param_in_declaration = '' first_param_in_declaration = ''
first_param_in_call = ('%s_clazz(env)' % java_class) first_param_in_call = ('g_%s_clazz' %
(called_by_native.java_class_name or
self.class_name))
else: else:
first_param_in_declaration = ', jobject obj' first_param_in_declaration = ', jobject obj'
first_param_in_call = 'obj' first_param_in_call = 'obj'
...@@ -1159,7 +1160,7 @@ static ${RETURN} ${NAME}(JNIEnv* env, ${PARAMS_IN_DECLARATION}) {""" ...@@ -1159,7 +1160,7 @@ static ${RETURN} ${NAME}(JNIEnv* env, ${PARAMS_IN_DECLARATION}) {"""
else: else:
return_clause = 'return ret;' return_clause = 'return ret;'
return { return {
'JAVA_CLASS': java_class, 'JAVA_CLASS': called_by_native.java_class_name or self.class_name,
'RETURN_TYPE': return_type, 'RETURN_TYPE': return_type,
'OPTIONAL_ERROR_RETURN': optional_error_return, 'OPTIONAL_ERROR_RETURN': optional_error_return,
'RETURN_DECLARATION': return_declaration, 'RETURN_DECLARATION': return_declaration,
...@@ -1203,7 +1204,7 @@ static base::subtle::AtomicWord g_${JAVA_CLASS}_${METHOD_ID_VAR_NAME} = 0; ...@@ -1203,7 +1204,7 @@ static base::subtle::AtomicWord g_${JAVA_CLASS}_${METHOD_ID_VAR_NAME} = 0;
${FUNCTION_HEADER} ${FUNCTION_HEADER}
/* Must call RegisterNativesImpl() */ /* Must call RegisterNativesImpl() */
CHECK_CLAZZ(env, ${FIRST_PARAM_IN_CALL}, CHECK_CLAZZ(env, ${FIRST_PARAM_IN_CALL},
${JAVA_CLASS}_clazz(env)${OPTIONAL_ERROR_RETURN}); g_${JAVA_CLASS}_clazz${OPTIONAL_ERROR_RETURN});
jmethodID method_id = jmethodID method_id =
${GET_METHOD_ID_IMPL} ${GET_METHOD_ID_IMPL}
${RETURN_DECLARATION} ${RETURN_DECLARATION}
...@@ -1262,56 +1263,22 @@ const char k${JAVA_CLASS}ClassPath[] = "${JNI_CLASS_PATH}";""") ...@@ -1262,56 +1263,22 @@ const char k${JAVA_CLASS}ClassPath[] = "${JNI_CLASS_PATH}";""")
} }
ret += [template.substitute(values)] ret += [template.substitute(values)]
ret += '' ret += ''
for clazz in called_by_native_classes:
class_getter_methods = []
if self.options.native_exports:
template = Template("""\
// Leaking this jclass as we cannot use LazyInstance from some threads.
base::subtle::AtomicWord g_${JAVA_CLASS}_clazz = 0;
jclass ${JAVA_CLASS}_clazz(JNIEnv* env) {
return base::android::LazyGetClass(env, k${JAVA_CLASS}ClassPath, \
&g_${JAVA_CLASS}_clazz);
}""")
else:
template = Template("""\ template = Template("""\
// Leaking this jclass as we cannot use LazyInstance from some threads. // Leaking this jclass as we cannot use LazyInstance from some threads.
jclass g_${JAVA_CLASS}_clazz = NULL; jclass g_${JAVA_CLASS}_clazz = NULL;""")
jclass ${JAVA_CLASS}_clazz(JNIEnv*) { return g_${JAVA_CLASS}_clazz; }""")
for clazz in called_by_native_classes:
values = { values = {
'JAVA_CLASS': clazz, 'JAVA_CLASS': clazz,
} }
class_getter_methods += [template.substitute(values)] ret += [template.substitute(values)]
template = Template("""\
#if __clang__
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-function"
#endif
${CLASS_GETER_METHODS}
#if __clang__
#pragma clang diagnostic pop
#endif""")
values = {
'CLASS_GETER_METHODS': '\n'.join(class_getter_methods)
}
ret += [template.substitute(values)]
return '\n'.join(ret) return '\n'.join(ret)
def GetFindClasses(self): def GetFindClasses(self):
"""Returns the imlementation of FindClass for all known classes.""" """Returns the imlementation of FindClass for all known classes."""
if self.init_native: if self.init_native:
if self.options.native_exports: template = Template("""\
template = Template("""\
base::subtle::Release_Store(&g_${JAVA_CLASS}_clazz,
static_cast<base::subtle::AtomicWord>(env->NewWeakGlobalRef(clazz));""")
else:
template = Template("""\
g_${JAVA_CLASS}_clazz = static_cast<jclass>(env->NewWeakGlobalRef(clazz));""") g_${JAVA_CLASS}_clazz = static_cast<jclass>(env->NewWeakGlobalRef(clazz));""")
else: else:
if self.options.native_exports:
return '\n'
template = Template("""\ template = Template("""\
g_${JAVA_CLASS}_clazz = reinterpret_cast<jclass>(env->NewGlobalRef( g_${JAVA_CLASS}_clazz = reinterpret_cast<jclass>(env->NewGlobalRef(
base::android::GetClass(env, k${JAVA_CLASS}ClassPath).obj()));""") base::android::GetClass(env, k${JAVA_CLASS}ClassPath).obj()));""")
...@@ -1326,13 +1293,13 @@ ${CLASS_GETER_METHODS} ...@@ -1326,13 +1293,13 @@ ${CLASS_GETER_METHODS}
if self.options.eager_called_by_natives: if self.options.eager_called_by_natives:
template = Template("""\ template = Template("""\
env->Get${STATIC_METHOD_PART}MethodID( env->Get${STATIC_METHOD_PART}MethodID(
${JAVA_CLASS}_clazz(env), g_${JAVA_CLASS}_clazz,
"${JNI_NAME}", ${JNI_SIGNATURE});""") "${JNI_NAME}", ${JNI_SIGNATURE});""")
else: else:
template = Template("""\ template = Template("""\
base::android::MethodID::LazyGet< base::android::MethodID::LazyGet<
base::android::MethodID::TYPE_${STATIC}>( base::android::MethodID::TYPE_${STATIC}>(
env, ${JAVA_CLASS}_clazz(env), env, g_${JAVA_CLASS}_clazz,
"${JNI_NAME}", "${JNI_NAME}",
${JNI_SIGNATURE}, ${JNI_SIGNATURE},
&g_${JAVA_CLASS}_${METHOD_ID_VAR_NAME}); &g_${JAVA_CLASS}_${METHOD_ID_VAR_NAME});
......
// Copyright 2014 The Chromium Authors. All rights reserved. // Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
...@@ -19,16 +19,8 @@ ...@@ -19,16 +19,8 @@
// Step 1: forward declarations. // Step 1: forward declarations.
namespace { namespace {
const char kTestClassPath[] = "org/chromium/example/jni_generator/Test"; const char kTestClassPath[] = "org/chromium/example/jni_generator/Test";
#if __clang__
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-function"
#endif
// Leaking this jclass as we cannot use LazyInstance from some threads. // Leaking this jclass as we cannot use LazyInstance from some threads.
jclass g_Test_clazz = NULL; jclass g_Test_clazz = NULL;
jclass Test_clazz(JNIEnv*) { return g_Test_clazz; }
#if __clang__
#pragma clang diagnostic pop
#endif
jmethodID g_Test_testMethodWithParam = NULL; jmethodID g_Test_testMethodWithParam = NULL;
jmethodID g_Test_testStaticMethodWithParam = NULL; jmethodID g_Test_testStaticMethodWithParam = NULL;
jmethodID g_Test_testMethodWithNoParam = NULL; jmethodID g_Test_testMethodWithNoParam = NULL;
...@@ -54,21 +46,20 @@ static void testMethodWithParam(JNIEnv* env, jobject obj, JniIntWrapper iParam) ...@@ -54,21 +46,20 @@ static void testMethodWithParam(JNIEnv* env, jobject obj, JniIntWrapper iParam)
} }
static jint testStaticMethodWithParam(JNIEnv* env, JniIntWrapper iParam) { static jint testStaticMethodWithParam(JNIEnv* env, JniIntWrapper iParam) {
jint ret = env->CallStaticIntMethod(Test_clazz(env), jint ret = env->CallStaticIntMethod(g_Test_clazz,
g_Test_testStaticMethodWithParam, as_jint(iParam)); g_Test_testStaticMethodWithParam, as_jint(iParam));
return ret; return ret;
} }
static jdouble testMethodWithNoParam(JNIEnv* env) { static jdouble testMethodWithNoParam(JNIEnv* env) {
jdouble ret = env->CallStaticDoubleMethod(Test_clazz(env), jdouble ret = env->CallStaticDoubleMethod(g_Test_clazz,
g_Test_testMethodWithNoParam); g_Test_testMethodWithNoParam);
return ret; return ret;
} }
static base::android::ScopedJavaLocalRef<jstring> static base::android::ScopedJavaLocalRef<jstring>
testStaticMethodWithNoParam(JNIEnv* env) { testStaticMethodWithNoParam(JNIEnv* env) {
jstring ret = jstring ret = static_cast<jstring>(env->CallStaticObjectMethod(g_Test_clazz,
static_cast<jstring>(env->CallStaticObjectMethod(Test_clazz(env),
g_Test_testStaticMethodWithNoParam)); g_Test_testStaticMethodWithNoParam));
return base::android::ScopedJavaLocalRef<jstring>(env, ret); return base::android::ScopedJavaLocalRef<jstring>(env, ret);
} }
...@@ -90,16 +81,16 @@ static bool RegisterNativesImpl(JNIEnv* env, jclass clazz) { ...@@ -90,16 +81,16 @@ static bool RegisterNativesImpl(JNIEnv* env, jclass clazz) {
const int kMethodsTestSize = arraysize(kMethodsTest); const int kMethodsTestSize = arraysize(kMethodsTest);
if (env->RegisterNatives(Test_clazz(env), if (env->RegisterNatives(g_Test_clazz,
kMethodsTest, kMethodsTest,
kMethodsTestSize) < 0) { kMethodsTestSize) < 0) {
jni_generator::HandleRegistrationError( jni_generator::HandleRegistrationError(
env, Test_clazz(env), __FILE__); env, g_Test_clazz, __FILE__);
return false; return false;
} }
g_Test_testMethodWithParam = env->GetMethodID( g_Test_testMethodWithParam = env->GetMethodID(
Test_clazz(env), g_Test_clazz,
"testMethodWithParam", "testMethodWithParam",
"(" "("
"I" "I"
...@@ -110,7 +101,7 @@ static bool RegisterNativesImpl(JNIEnv* env, jclass clazz) { ...@@ -110,7 +101,7 @@ static bool RegisterNativesImpl(JNIEnv* env, jclass clazz) {
} }
g_Test_testStaticMethodWithParam = env->GetStaticMethodID( g_Test_testStaticMethodWithParam = env->GetStaticMethodID(
Test_clazz(env), g_Test_clazz,
"testStaticMethodWithParam", "testStaticMethodWithParam",
"(" "("
"I" "I"
...@@ -121,7 +112,7 @@ static bool RegisterNativesImpl(JNIEnv* env, jclass clazz) { ...@@ -121,7 +112,7 @@ static bool RegisterNativesImpl(JNIEnv* env, jclass clazz) {
} }
g_Test_testMethodWithNoParam = env->GetStaticMethodID( g_Test_testMethodWithNoParam = env->GetStaticMethodID(
Test_clazz(env), g_Test_clazz,
"testMethodWithNoParam", "testMethodWithNoParam",
"(" "("
")" ")"
...@@ -131,7 +122,7 @@ static bool RegisterNativesImpl(JNIEnv* env, jclass clazz) { ...@@ -131,7 +122,7 @@ static bool RegisterNativesImpl(JNIEnv* env, jclass clazz) {
} }
g_Test_testStaticMethodWithNoParam = env->GetStaticMethodID( g_Test_testStaticMethodWithNoParam = env->GetStaticMethodID(
Test_clazz(env), g_Test_clazz,
"testStaticMethodWithNoParam", "testStaticMethodWithNoParam",
"(" "("
")" ")"
......
// Copyright 2014 The Chromium Authors. All rights reserved. // Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
...@@ -19,16 +19,8 @@ ...@@ -19,16 +19,8 @@
// Step 1: forward declarations. // Step 1: forward declarations.
namespace { namespace {
const char kInputStreamClassPath[] = "java/io/InputStream"; const char kInputStreamClassPath[] = "java/io/InputStream";
#if __clang__
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-function"
#endif
// Leaking this jclass as we cannot use LazyInstance from some threads. // Leaking this jclass as we cannot use LazyInstance from some threads.
jclass g_InputStream_clazz = NULL; jclass g_InputStream_clazz = NULL;
jclass InputStream_clazz(JNIEnv*) { return g_InputStream_clazz; }
#if __clang__
#pragma clang diagnostic pop
#endif
} // namespace } // namespace
...@@ -42,11 +34,11 @@ static jint Java_InputStream_available(JNIEnv* env, jobject obj) __attribute__ ...@@ -42,11 +34,11 @@ static jint Java_InputStream_available(JNIEnv* env, jobject obj) __attribute__
static jint Java_InputStream_available(JNIEnv* env, jobject obj) { static jint Java_InputStream_available(JNIEnv* env, jobject obj) {
/* Must call RegisterNativesImpl() */ /* Must call RegisterNativesImpl() */
CHECK_CLAZZ(env, obj, CHECK_CLAZZ(env, obj,
InputStream_clazz(env), 0); g_InputStream_clazz, 0);
jmethodID method_id = jmethodID method_id =
base::android::MethodID::LazyGet< base::android::MethodID::LazyGet<
base::android::MethodID::TYPE_INSTANCE>( base::android::MethodID::TYPE_INSTANCE>(
env, InputStream_clazz(env), env, g_InputStream_clazz,
"available", "available",
"()I", "()I",
&g_InputStream_available); &g_InputStream_available);
...@@ -64,11 +56,11 @@ static void Java_InputStream_close(JNIEnv* env, jobject obj) __attribute__ ...@@ -64,11 +56,11 @@ static void Java_InputStream_close(JNIEnv* env, jobject obj) __attribute__
static void Java_InputStream_close(JNIEnv* env, jobject obj) { static void Java_InputStream_close(JNIEnv* env, jobject obj) {
/* Must call RegisterNativesImpl() */ /* Must call RegisterNativesImpl() */
CHECK_CLAZZ(env, obj, CHECK_CLAZZ(env, obj,
InputStream_clazz(env)); g_InputStream_clazz);
jmethodID method_id = jmethodID method_id =
base::android::MethodID::LazyGet< base::android::MethodID::LazyGet<
base::android::MethodID::TYPE_INSTANCE>( base::android::MethodID::TYPE_INSTANCE>(
env, InputStream_clazz(env), env, g_InputStream_clazz,
"close", "close",
"()V", "()V",
&g_InputStream_close); &g_InputStream_close);
...@@ -85,11 +77,11 @@ static void Java_InputStream_mark(JNIEnv* env, jobject obj, JniIntWrapper p0) ...@@ -85,11 +77,11 @@ static void Java_InputStream_mark(JNIEnv* env, jobject obj, JniIntWrapper p0)
static void Java_InputStream_mark(JNIEnv* env, jobject obj, JniIntWrapper p0) { static void Java_InputStream_mark(JNIEnv* env, jobject obj, JniIntWrapper p0) {
/* Must call RegisterNativesImpl() */ /* Must call RegisterNativesImpl() */
CHECK_CLAZZ(env, obj, CHECK_CLAZZ(env, obj,
InputStream_clazz(env)); g_InputStream_clazz);
jmethodID method_id = jmethodID method_id =
base::android::MethodID::LazyGet< base::android::MethodID::LazyGet<
base::android::MethodID::TYPE_INSTANCE>( base::android::MethodID::TYPE_INSTANCE>(
env, InputStream_clazz(env), env, g_InputStream_clazz,
"mark", "mark",
"(I)V", "(I)V",
&g_InputStream_mark); &g_InputStream_mark);
...@@ -106,11 +98,11 @@ static jboolean Java_InputStream_markSupported(JNIEnv* env, jobject obj) ...@@ -106,11 +98,11 @@ static jboolean Java_InputStream_markSupported(JNIEnv* env, jobject obj)
static jboolean Java_InputStream_markSupported(JNIEnv* env, jobject obj) { static jboolean Java_InputStream_markSupported(JNIEnv* env, jobject obj) {
/* Must call RegisterNativesImpl() */ /* Must call RegisterNativesImpl() */
CHECK_CLAZZ(env, obj, CHECK_CLAZZ(env, obj,
InputStream_clazz(env), false); g_InputStream_clazz, false);
jmethodID method_id = jmethodID method_id =
base::android::MethodID::LazyGet< base::android::MethodID::LazyGet<
base::android::MethodID::TYPE_INSTANCE>( base::android::MethodID::TYPE_INSTANCE>(
env, InputStream_clazz(env), env, g_InputStream_clazz,
"markSupported", "markSupported",
"()Z", "()Z",
&g_InputStream_markSupported); &g_InputStream_markSupported);
...@@ -128,11 +120,11 @@ static jint Java_InputStream_readI(JNIEnv* env, jobject obj) __attribute__ ...@@ -128,11 +120,11 @@ static jint Java_InputStream_readI(JNIEnv* env, jobject obj) __attribute__
static jint Java_InputStream_readI(JNIEnv* env, jobject obj) { static jint Java_InputStream_readI(JNIEnv* env, jobject obj) {
/* Must call RegisterNativesImpl() */ /* Must call RegisterNativesImpl() */
CHECK_CLAZZ(env, obj, CHECK_CLAZZ(env, obj,
InputStream_clazz(env), 0); g_InputStream_clazz, 0);
jmethodID method_id = jmethodID method_id =
base::android::MethodID::LazyGet< base::android::MethodID::LazyGet<
base::android::MethodID::TYPE_INSTANCE>( base::android::MethodID::TYPE_INSTANCE>(
env, InputStream_clazz(env), env, g_InputStream_clazz,
"read", "read",
"()I", "()I",
&g_InputStream_readI); &g_InputStream_readI);
...@@ -150,11 +142,11 @@ static jint Java_InputStream_readI_AB(JNIEnv* env, jobject obj, jbyteArray p0) ...@@ -150,11 +142,11 @@ static jint Java_InputStream_readI_AB(JNIEnv* env, jobject obj, jbyteArray p0)
static jint Java_InputStream_readI_AB(JNIEnv* env, jobject obj, jbyteArray p0) { static jint Java_InputStream_readI_AB(JNIEnv* env, jobject obj, jbyteArray p0) {
/* Must call RegisterNativesImpl() */ /* Must call RegisterNativesImpl() */
CHECK_CLAZZ(env, obj, CHECK_CLAZZ(env, obj,
InputStream_clazz(env), 0); g_InputStream_clazz, 0);
jmethodID method_id = jmethodID method_id =
base::android::MethodID::LazyGet< base::android::MethodID::LazyGet<
base::android::MethodID::TYPE_INSTANCE>( base::android::MethodID::TYPE_INSTANCE>(
env, InputStream_clazz(env), env, g_InputStream_clazz,
"read", "read",
"([B)I", "([B)I",
&g_InputStream_readI_AB); &g_InputStream_readI_AB);
...@@ -177,11 +169,11 @@ static jint Java_InputStream_readI_AB_I_I(JNIEnv* env, jobject obj, jbyteArray ...@@ -177,11 +169,11 @@ static jint Java_InputStream_readI_AB_I_I(JNIEnv* env, jobject obj, jbyteArray
JniIntWrapper p2) { JniIntWrapper p2) {
/* Must call RegisterNativesImpl() */ /* Must call RegisterNativesImpl() */
CHECK_CLAZZ(env, obj, CHECK_CLAZZ(env, obj,
InputStream_clazz(env), 0); g_InputStream_clazz, 0);
jmethodID method_id = jmethodID method_id =
base::android::MethodID::LazyGet< base::android::MethodID::LazyGet<
base::android::MethodID::TYPE_INSTANCE>( base::android::MethodID::TYPE_INSTANCE>(
env, InputStream_clazz(env), env, g_InputStream_clazz,
"read", "read",
"([BII)I", "([BII)I",
&g_InputStream_readI_AB_I_I); &g_InputStream_readI_AB_I_I);
...@@ -199,11 +191,11 @@ static void Java_InputStream_reset(JNIEnv* env, jobject obj) __attribute__ ...@@ -199,11 +191,11 @@ static void Java_InputStream_reset(JNIEnv* env, jobject obj) __attribute__
static void Java_InputStream_reset(JNIEnv* env, jobject obj) { static void Java_InputStream_reset(JNIEnv* env, jobject obj) {
/* Must call RegisterNativesImpl() */ /* Must call RegisterNativesImpl() */
CHECK_CLAZZ(env, obj, CHECK_CLAZZ(env, obj,
InputStream_clazz(env)); g_InputStream_clazz);
jmethodID method_id = jmethodID method_id =
base::android::MethodID::LazyGet< base::android::MethodID::LazyGet<
base::android::MethodID::TYPE_INSTANCE>( base::android::MethodID::TYPE_INSTANCE>(
env, InputStream_clazz(env), env, g_InputStream_clazz,
"reset", "reset",
"()V", "()V",
&g_InputStream_reset); &g_InputStream_reset);
...@@ -220,11 +212,11 @@ static jlong Java_InputStream_skip(JNIEnv* env, jobject obj, jlong p0) ...@@ -220,11 +212,11 @@ static jlong Java_InputStream_skip(JNIEnv* env, jobject obj, jlong p0)
static jlong Java_InputStream_skip(JNIEnv* env, jobject obj, jlong p0) { static jlong Java_InputStream_skip(JNIEnv* env, jobject obj, jlong p0) {
/* Must call RegisterNativesImpl() */ /* Must call RegisterNativesImpl() */
CHECK_CLAZZ(env, obj, CHECK_CLAZZ(env, obj,
InputStream_clazz(env), 0); g_InputStream_clazz, 0);
jmethodID method_id = jmethodID method_id =
base::android::MethodID::LazyGet< base::android::MethodID::LazyGet<
base::android::MethodID::TYPE_INSTANCE>( base::android::MethodID::TYPE_INSTANCE>(
env, InputStream_clazz(env), env, g_InputStream_clazz,
"skip", "skip",
"(J)J", "(J)J",
&g_InputStream_skip); &g_InputStream_skip);
...@@ -242,18 +234,18 @@ static base::android::ScopedJavaLocalRef<jobject> ...@@ -242,18 +234,18 @@ static base::android::ScopedJavaLocalRef<jobject>
static base::android::ScopedJavaLocalRef<jobject> static base::android::ScopedJavaLocalRef<jobject>
Java_InputStream_Constructor(JNIEnv* env) { Java_InputStream_Constructor(JNIEnv* env) {
/* Must call RegisterNativesImpl() */ /* Must call RegisterNativesImpl() */
CHECK_CLAZZ(env, InputStream_clazz(env), CHECK_CLAZZ(env, g_InputStream_clazz,
InputStream_clazz(env), NULL); g_InputStream_clazz, NULL);
jmethodID method_id = jmethodID method_id =
base::android::MethodID::LazyGet< base::android::MethodID::LazyGet<
base::android::MethodID::TYPE_INSTANCE>( base::android::MethodID::TYPE_INSTANCE>(
env, InputStream_clazz(env), env, g_InputStream_clazz,
"<init>", "<init>",
"()V", "()V",
&g_InputStream_Constructor); &g_InputStream_Constructor);
jobject ret = jobject ret =
env->NewObject(InputStream_clazz(env), env->NewObject(g_InputStream_clazz,
method_id); method_id);
jni_generator::CheckException(env); jni_generator::CheckException(env);
return base::android::ScopedJavaLocalRef<jobject>(env, ret); return base::android::ScopedJavaLocalRef<jobject>(env, ret);
......
// Copyright 2014 The Chromium Authors. All rights reserved. // Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
...@@ -19,16 +19,8 @@ ...@@ -19,16 +19,8 @@
// Step 1: forward declarations. // Step 1: forward declarations.
namespace { namespace {
const char kHashSetClassPath[] = "java/util/HashSet"; const char kHashSetClassPath[] = "java/util/HashSet";
#if __clang__
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-function"
#endif
// Leaking this jclass as we cannot use LazyInstance from some threads. // Leaking this jclass as we cannot use LazyInstance from some threads.
jclass g_HashSet_clazz = NULL; jclass g_HashSet_clazz = NULL;
jclass HashSet_clazz(JNIEnv*) { return g_HashSet_clazz; }
#if __clang__
#pragma clang diagnostic pop
#endif
} // namespace } // namespace
...@@ -42,11 +34,11 @@ static void Java_HashSet_dummy(JNIEnv* env, jobject obj) __attribute__ ...@@ -42,11 +34,11 @@ static void Java_HashSet_dummy(JNIEnv* env, jobject obj) __attribute__
static void Java_HashSet_dummy(JNIEnv* env, jobject obj) { static void Java_HashSet_dummy(JNIEnv* env, jobject obj) {
/* Must call RegisterNativesImpl() */ /* Must call RegisterNativesImpl() */
CHECK_CLAZZ(env, obj, CHECK_CLAZZ(env, obj,
HashSet_clazz(env)); g_HashSet_clazz);
jmethodID method_id = jmethodID method_id =
base::android::MethodID::LazyGet< base::android::MethodID::LazyGet<
base::android::MethodID::TYPE_INSTANCE>( base::android::MethodID::TYPE_INSTANCE>(
env, HashSet_clazz(env), env, g_HashSet_clazz,
"dummy", "dummy",
"()V", "()V",
&g_HashSet_dummy); &g_HashSet_dummy);
......
// Copyright 2014 The Chromium Authors. All rights reserved. // Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
...@@ -20,16 +20,8 @@ ...@@ -20,16 +20,8 @@
namespace { namespace {
const char kTestJniClassPath[] = "org/chromium/TestJni"; const char kTestJniClassPath[] = "org/chromium/TestJni";
const char kMyInnerClassClassPath[] = "org/chromium/TestJni$MyInnerClass"; const char kMyInnerClassClassPath[] = "org/chromium/TestJni$MyInnerClass";
#if __clang__
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-function"
#endif
// Leaking this jclass as we cannot use LazyInstance from some threads. // Leaking this jclass as we cannot use LazyInstance from some threads.
jclass g_TestJni_clazz = NULL; jclass g_TestJni_clazz = NULL;
jclass TestJni_clazz(JNIEnv*) { return g_TestJni_clazz; }
#if __clang__
#pragma clang diagnostic pop
#endif
} // namespace } // namespace
...@@ -52,11 +44,11 @@ static bool RegisterNativesImpl(JNIEnv* env) { ...@@ -52,11 +44,11 @@ static bool RegisterNativesImpl(JNIEnv* env) {
const int kMethodsMyInnerClassSize = arraysize(kMethodsMyInnerClass); const int kMethodsMyInnerClassSize = arraysize(kMethodsMyInnerClass);
if (env->RegisterNatives(MyInnerClass_clazz(env), if (env->RegisterNatives(g_MyInnerClass_clazz,
kMethodsMyInnerClass, kMethodsMyInnerClass,
kMethodsMyInnerClassSize) < 0) { kMethodsMyInnerClassSize) < 0) {
jni_generator::HandleRegistrationError( jni_generator::HandleRegistrationError(
env, MyInnerClass_clazz(env), __FILE__); env, g_MyInnerClass_clazz, __FILE__);
return false; return false;
} }
......
// Copyright 2014 The Chromium Authors. All rights reserved. // Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
...@@ -21,16 +21,8 @@ namespace { ...@@ -21,16 +21,8 @@ namespace {
const char kMyOtherInnerClassClassPath[] = const char kMyOtherInnerClassClassPath[] =
"org/chromium/TestJni$MyOtherInnerClass"; "org/chromium/TestJni$MyOtherInnerClass";
const char kTestJniClassPath[] = "org/chromium/TestJni"; const char kTestJniClassPath[] = "org/chromium/TestJni";
#if __clang__
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-function"
#endif
// Leaking this jclass as we cannot use LazyInstance from some threads. // Leaking this jclass as we cannot use LazyInstance from some threads.
jclass g_TestJni_clazz = NULL; jclass g_TestJni_clazz = NULL;
jclass TestJni_clazz(JNIEnv*) { return g_TestJni_clazz; }
#if __clang__
#pragma clang diagnostic pop
#endif
} // namespace } // namespace
...@@ -63,21 +55,21 @@ static bool RegisterNativesImpl(JNIEnv* env) { ...@@ -63,21 +55,21 @@ static bool RegisterNativesImpl(JNIEnv* env) {
const int kMethodsMyOtherInnerClassSize = const int kMethodsMyOtherInnerClassSize =
arraysize(kMethodsMyOtherInnerClass); arraysize(kMethodsMyOtherInnerClass);
if (env->RegisterNatives(MyOtherInnerClass_clazz(env), if (env->RegisterNatives(g_MyOtherInnerClass_clazz,
kMethodsMyOtherInnerClass, kMethodsMyOtherInnerClass,
kMethodsMyOtherInnerClassSize) < 0) { kMethodsMyOtherInnerClassSize) < 0) {
jni_generator::HandleRegistrationError( jni_generator::HandleRegistrationError(
env, MyOtherInnerClass_clazz(env), __FILE__); env, g_MyOtherInnerClass_clazz, __FILE__);
return false; return false;
} }
const int kMethodsTestJniSize = arraysize(kMethodsTestJni); const int kMethodsTestJniSize = arraysize(kMethodsTestJni);
if (env->RegisterNatives(TestJni_clazz(env), if (env->RegisterNatives(g_TestJni_clazz,
kMethodsTestJni, kMethodsTestJni,
kMethodsTestJniSize) < 0) { kMethodsTestJniSize) < 0) {
jni_generator::HandleRegistrationError( jni_generator::HandleRegistrationError(
env, TestJni_clazz(env), __FILE__); env, g_TestJni_clazz, __FILE__);
return false; return false;
} }
......
// Copyright 2014 The Chromium Authors. All rights reserved. // Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
...@@ -22,16 +22,8 @@ const char kMyOtherInnerClassClassPath[] = ...@@ -22,16 +22,8 @@ const char kMyOtherInnerClassClassPath[] =
"org/chromium/TestJni$MyOtherInnerClass"; "org/chromium/TestJni$MyOtherInnerClass";
const char kTestJniClassPath[] = "org/chromium/TestJni"; const char kTestJniClassPath[] = "org/chromium/TestJni";
const char kMyInnerClassClassPath[] = "org/chromium/TestJni$MyInnerClass"; const char kMyInnerClassClassPath[] = "org/chromium/TestJni$MyInnerClass";
#if __clang__
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-function"
#endif
// Leaking this jclass as we cannot use LazyInstance from some threads. // Leaking this jclass as we cannot use LazyInstance from some threads.
jclass g_TestJni_clazz = NULL; jclass g_TestJni_clazz = NULL;
jclass TestJni_clazz(JNIEnv*) { return g_TestJni_clazz; }
#if __clang__
#pragma clang diagnostic pop
#endif
} // namespace } // namespace
...@@ -64,21 +56,21 @@ static bool RegisterNativesImpl(JNIEnv* env) { ...@@ -64,21 +56,21 @@ static bool RegisterNativesImpl(JNIEnv* env) {
const int kMethodsMyOtherInnerClassSize = const int kMethodsMyOtherInnerClassSize =
arraysize(kMethodsMyOtherInnerClass); arraysize(kMethodsMyOtherInnerClass);
if (env->RegisterNatives(MyOtherInnerClass_clazz(env), if (env->RegisterNatives(g_MyOtherInnerClass_clazz,
kMethodsMyOtherInnerClass, kMethodsMyOtherInnerClass,
kMethodsMyOtherInnerClassSize) < 0) { kMethodsMyOtherInnerClassSize) < 0) {
jni_generator::HandleRegistrationError( jni_generator::HandleRegistrationError(
env, MyOtherInnerClass_clazz(env), __FILE__); env, g_MyOtherInnerClass_clazz, __FILE__);
return false; return false;
} }
const int kMethodsMyInnerClassSize = arraysize(kMethodsMyInnerClass); const int kMethodsMyInnerClassSize = arraysize(kMethodsMyInnerClass);
if (env->RegisterNatives(MyInnerClass_clazz(env), if (env->RegisterNatives(g_MyInnerClass_clazz,
kMethodsMyInnerClass, kMethodsMyInnerClass,
kMethodsMyInnerClassSize) < 0) { kMethodsMyInnerClassSize) < 0) {
jni_generator::HandleRegistrationError( jni_generator::HandleRegistrationError(
env, MyInnerClass_clazz(env), __FILE__); env, g_MyInnerClass_clazz, __FILE__);
return false; return false;
} }
......
// Copyright 2014 The Chromium Authors. All rights reserved. // Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
...@@ -19,16 +19,8 @@ ...@@ -19,16 +19,8 @@
// Step 1: forward declarations. // Step 1: forward declarations.
namespace { namespace {
const char kTestClassPath[] = "org/chromium/example/jni_generator/Test"; const char kTestClassPath[] = "org/chromium/example/jni_generator/Test";
#if __clang__
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-function"
#endif
// Leaking this jclass as we cannot use LazyInstance from some threads. // Leaking this jclass as we cannot use LazyInstance from some threads.
jclass g_Test_clazz = NULL; jclass g_Test_clazz = NULL;
jclass Test_clazz(JNIEnv*) { return g_Test_clazz; }
#if __clang__
#pragma clang diagnostic pop
#endif
} // namespace } // namespace
...@@ -57,11 +49,11 @@ static bool RegisterNativesImpl(JNIEnv* env, jclass clazz) { ...@@ -57,11 +49,11 @@ static bool RegisterNativesImpl(JNIEnv* env, jclass clazz) {
const int kMethodsTestSize = arraysize(kMethodsTest); const int kMethodsTestSize = arraysize(kMethodsTest);
if (env->RegisterNatives(Test_clazz(env), if (env->RegisterNatives(g_Test_clazz,
kMethodsTest, kMethodsTest,
kMethodsTestSize) < 0) { kMethodsTestSize) < 0) {
jni_generator::HandleRegistrationError( jni_generator::HandleRegistrationError(
env, Test_clazz(env), __FILE__); env, g_Test_clazz, __FILE__);
return false; return false;
} }
......
// Copyright 2014 The Chromium Authors. All rights reserved. // Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
...@@ -19,16 +19,8 @@ ...@@ -19,16 +19,8 @@
// Step 1: forward declarations. // Step 1: forward declarations.
namespace { namespace {
const char kExampleClassPath[] = "com/test/jni_generator/Example"; const char kExampleClassPath[] = "com/test/jni_generator/Example";
#if __clang__
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-function"
#endif
// Leaking this jclass as we cannot use LazyInstance from some threads. // Leaking this jclass as we cannot use LazyInstance from some threads.
jclass g_Example_clazz = NULL; jclass g_Example_clazz = NULL;
jclass Example_clazz(JNIEnv*) { return g_Example_clazz; }
#if __clang__
#pragma clang diagnostic pop
#endif
} // namespace } // namespace
...@@ -77,11 +69,11 @@ static bool RegisterNativesImpl(JNIEnv* env) { ...@@ -77,11 +69,11 @@ static bool RegisterNativesImpl(JNIEnv* env) {
const int kMethodsExampleSize = arraysize(kMethodsExample); const int kMethodsExampleSize = arraysize(kMethodsExample);
if (env->RegisterNatives(Example_clazz(env), if (env->RegisterNatives(g_Example_clazz,
kMethodsExample, kMethodsExample,
kMethodsExampleSize) < 0) { kMethodsExampleSize) < 0) {
jni_generator::HandleRegistrationError( jni_generator::HandleRegistrationError(
env, Example_clazz(env), __FILE__); env, g_Example_clazz, __FILE__);
return false; return false;
} }
......
// Copyright 2014 The Chromium Authors. All rights reserved. // Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
...@@ -19,16 +19,8 @@ ...@@ -19,16 +19,8 @@
// Step 1: forward declarations. // Step 1: forward declarations.
namespace { namespace {
const char kFooClassPath[] = "org/chromium/foo/Foo"; const char kFooClassPath[] = "org/chromium/foo/Foo";
#if __clang__
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-function"
#endif
// Leaking this jclass as we cannot use LazyInstance from some threads. // Leaking this jclass as we cannot use LazyInstance from some threads.
jclass g_Foo_clazz = NULL; jclass g_Foo_clazz = NULL;
jclass Foo_clazz(JNIEnv*) { return g_Foo_clazz; }
#if __clang__
#pragma clang diagnostic pop
#endif
} // namespace } // namespace
...@@ -42,12 +34,12 @@ static base::subtle::AtomicWord g_Foo_calledByNative = 0; ...@@ -42,12 +34,12 @@ static base::subtle::AtomicWord g_Foo_calledByNative = 0;
static void Java_Foo_calledByNative(JNIEnv* env, jobject callback1, static void Java_Foo_calledByNative(JNIEnv* env, jobject callback1,
jobject callback2) { jobject callback2) {
/* Must call RegisterNativesImpl() */ /* Must call RegisterNativesImpl() */
CHECK_CLAZZ(env, Foo_clazz(env), CHECK_CLAZZ(env, g_Foo_clazz,
Foo_clazz(env)); g_Foo_clazz);
jmethodID method_id = jmethodID method_id =
base::android::MethodID::LazyGet< base::android::MethodID::LazyGet<
base::android::MethodID::TYPE_STATIC>( base::android::MethodID::TYPE_STATIC>(
env, Foo_clazz(env), env, g_Foo_clazz,
"calledByNative", "calledByNative",
"(" "("
...@@ -57,7 +49,7 @@ static void Java_Foo_calledByNative(JNIEnv* env, jobject callback1, ...@@ -57,7 +49,7 @@ static void Java_Foo_calledByNative(JNIEnv* env, jobject callback1,
"V", "V",
&g_Foo_calledByNative); &g_Foo_calledByNative);
env->CallStaticVoidMethod(Foo_clazz(env), env->CallStaticVoidMethod(g_Foo_clazz,
method_id, callback1, callback2); method_id, callback1, callback2);
jni_generator::CheckException(env); jni_generator::CheckException(env);
...@@ -80,11 +72,11 @@ static bool RegisterNativesImpl(JNIEnv* env) { ...@@ -80,11 +72,11 @@ static bool RegisterNativesImpl(JNIEnv* env) {
const int kMethodsFooSize = arraysize(kMethodsFoo); const int kMethodsFooSize = arraysize(kMethodsFoo);
if (env->RegisterNatives(Foo_clazz(env), if (env->RegisterNatives(g_Foo_clazz,
kMethodsFoo, kMethodsFoo,
kMethodsFooSize) < 0) { kMethodsFooSize) < 0) {
jni_generator::HandleRegistrationError( jni_generator::HandleRegistrationError(
env, Foo_clazz(env), __FILE__); env, g_Foo_clazz, __FILE__);
return false; return false;
} }
......
...@@ -20,19 +20,8 @@ ...@@ -20,19 +20,8 @@
namespace { namespace {
const char kSampleForTestsClassPath[] = const char kSampleForTestsClassPath[] =
"org/chromium/example/jni_generator/SampleForTests"; "org/chromium/example/jni_generator/SampleForTests";
#if __clang__
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-function"
#endif
// Leaking this jclass as we cannot use LazyInstance from some threads. // Leaking this jclass as we cannot use LazyInstance from some threads.
base::subtle::AtomicWord g_SampleForTests_clazz = 0; jclass g_SampleForTests_clazz = NULL;
jclass SampleForTests_clazz(JNIEnv* env) {
return base::android::LazyGetClass(env, kSampleForTestsClassPath,
&g_SampleForTests_clazz);
}
#if __clang__
#pragma clang diagnostic pop
#endif
} // namespace } // namespace
...@@ -90,11 +79,11 @@ static void Java_SampleForTests_testMethodWithParam(JNIEnv* env, jobject obj, ...@@ -90,11 +79,11 @@ static void Java_SampleForTests_testMethodWithParam(JNIEnv* env, jobject obj,
JniIntWrapper iParam) { JniIntWrapper iParam) {
/* Must call RegisterNativesImpl() */ /* Must call RegisterNativesImpl() */
CHECK_CLAZZ(env, obj, CHECK_CLAZZ(env, obj,
SampleForTests_clazz(env)); g_SampleForTests_clazz);
jmethodID method_id = jmethodID method_id =
base::android::MethodID::LazyGet< base::android::MethodID::LazyGet<
base::android::MethodID::TYPE_INSTANCE>( base::android::MethodID::TYPE_INSTANCE>(
env, SampleForTests_clazz(env), env, g_SampleForTests_clazz,
"testMethodWithParam", "testMethodWithParam",
"(" "("
...@@ -116,11 +105,11 @@ static base::android::ScopedJavaLocalRef<jstring> ...@@ -116,11 +105,11 @@ static base::android::ScopedJavaLocalRef<jstring>
JniIntWrapper iParam) { JniIntWrapper iParam) {
/* Must call RegisterNativesImpl() */ /* Must call RegisterNativesImpl() */
CHECK_CLAZZ(env, obj, CHECK_CLAZZ(env, obj,
SampleForTests_clazz(env), NULL); g_SampleForTests_clazz, NULL);
jmethodID method_id = jmethodID method_id =
base::android::MethodID::LazyGet< base::android::MethodID::LazyGet<
base::android::MethodID::TYPE_INSTANCE>( base::android::MethodID::TYPE_INSTANCE>(
env, SampleForTests_clazz(env), env, g_SampleForTests_clazz,
"testMethodWithParamAndReturn", "testMethodWithParamAndReturn",
"(" "("
...@@ -140,12 +129,12 @@ static base::subtle::AtomicWord g_SampleForTests_testStaticMethodWithParam = 0; ...@@ -140,12 +129,12 @@ static base::subtle::AtomicWord g_SampleForTests_testStaticMethodWithParam = 0;
static jint Java_SampleForTests_testStaticMethodWithParam(JNIEnv* env, static jint Java_SampleForTests_testStaticMethodWithParam(JNIEnv* env,
JniIntWrapper iParam) { JniIntWrapper iParam) {
/* Must call RegisterNativesImpl() */ /* Must call RegisterNativesImpl() */
CHECK_CLAZZ(env, SampleForTests_clazz(env), CHECK_CLAZZ(env, g_SampleForTests_clazz,
SampleForTests_clazz(env), 0); g_SampleForTests_clazz, 0);
jmethodID method_id = jmethodID method_id =
base::android::MethodID::LazyGet< base::android::MethodID::LazyGet<
base::android::MethodID::TYPE_STATIC>( base::android::MethodID::TYPE_STATIC>(
env, SampleForTests_clazz(env), env, g_SampleForTests_clazz,
"testStaticMethodWithParam", "testStaticMethodWithParam",
"(" "("
...@@ -155,7 +144,7 @@ static jint Java_SampleForTests_testStaticMethodWithParam(JNIEnv* env, ...@@ -155,7 +144,7 @@ static jint Java_SampleForTests_testStaticMethodWithParam(JNIEnv* env,
&g_SampleForTests_testStaticMethodWithParam); &g_SampleForTests_testStaticMethodWithParam);
jint ret = jint ret =
env->CallStaticIntMethod(SampleForTests_clazz(env), env->CallStaticIntMethod(g_SampleForTests_clazz,
method_id, as_jint(iParam)); method_id, as_jint(iParam));
jni_generator::CheckException(env); jni_generator::CheckException(env);
return ret; return ret;
...@@ -164,12 +153,12 @@ static jint Java_SampleForTests_testStaticMethodWithParam(JNIEnv* env, ...@@ -164,12 +153,12 @@ static jint Java_SampleForTests_testStaticMethodWithParam(JNIEnv* env,
static base::subtle::AtomicWord g_SampleForTests_testMethodWithNoParam = 0; static base::subtle::AtomicWord g_SampleForTests_testMethodWithNoParam = 0;
static jdouble Java_SampleForTests_testMethodWithNoParam(JNIEnv* env) { static jdouble Java_SampleForTests_testMethodWithNoParam(JNIEnv* env) {
/* Must call RegisterNativesImpl() */ /* Must call RegisterNativesImpl() */
CHECK_CLAZZ(env, SampleForTests_clazz(env), CHECK_CLAZZ(env, g_SampleForTests_clazz,
SampleForTests_clazz(env), 0); g_SampleForTests_clazz, 0);
jmethodID method_id = jmethodID method_id =
base::android::MethodID::LazyGet< base::android::MethodID::LazyGet<
base::android::MethodID::TYPE_STATIC>( base::android::MethodID::TYPE_STATIC>(
env, SampleForTests_clazz(env), env, g_SampleForTests_clazz,
"testMethodWithNoParam", "testMethodWithNoParam",
"(" "("
...@@ -178,7 +167,7 @@ static jdouble Java_SampleForTests_testMethodWithNoParam(JNIEnv* env) { ...@@ -178,7 +167,7 @@ static jdouble Java_SampleForTests_testMethodWithNoParam(JNIEnv* env) {
&g_SampleForTests_testMethodWithNoParam); &g_SampleForTests_testMethodWithNoParam);
jdouble ret = jdouble ret =
env->CallStaticDoubleMethod(SampleForTests_clazz(env), env->CallStaticDoubleMethod(g_SampleForTests_clazz,
method_id); method_id);
jni_generator::CheckException(env); jni_generator::CheckException(env);
return ret; return ret;
...@@ -189,12 +178,12 @@ static base::subtle::AtomicWord g_SampleForTests_testStaticMethodWithNoParam = ...@@ -189,12 +178,12 @@ static base::subtle::AtomicWord g_SampleForTests_testStaticMethodWithNoParam =
static base::android::ScopedJavaLocalRef<jstring> static base::android::ScopedJavaLocalRef<jstring>
Java_SampleForTests_testStaticMethodWithNoParam(JNIEnv* env) { Java_SampleForTests_testStaticMethodWithNoParam(JNIEnv* env) {
/* Must call RegisterNativesImpl() */ /* Must call RegisterNativesImpl() */
CHECK_CLAZZ(env, SampleForTests_clazz(env), CHECK_CLAZZ(env, g_SampleForTests_clazz,
SampleForTests_clazz(env), NULL); g_SampleForTests_clazz, NULL);
jmethodID method_id = jmethodID method_id =
base::android::MethodID::LazyGet< base::android::MethodID::LazyGet<
base::android::MethodID::TYPE_STATIC>( base::android::MethodID::TYPE_STATIC>(
env, SampleForTests_clazz(env), env, g_SampleForTests_clazz,
"testStaticMethodWithNoParam", "testStaticMethodWithNoParam",
"(" "("
...@@ -203,7 +192,7 @@ static base::android::ScopedJavaLocalRef<jstring> ...@@ -203,7 +192,7 @@ static base::android::ScopedJavaLocalRef<jstring>
&g_SampleForTests_testStaticMethodWithNoParam); &g_SampleForTests_testStaticMethodWithNoParam);
jstring ret = jstring ret =
static_cast<jstring>(env->CallStaticObjectMethod(SampleForTests_clazz(env), static_cast<jstring>(env->CallStaticObjectMethod(g_SampleForTests_clazz,
method_id)); method_id));
jni_generator::CheckException(env); jni_generator::CheckException(env);
return base::android::ScopedJavaLocalRef<jstring>(env, ret); return base::android::ScopedJavaLocalRef<jstring>(env, ret);
...@@ -213,8 +202,7 @@ static_cast<jstring>(env->CallStaticObjectMethod(SampleForTests_clazz(env), ...@@ -213,8 +202,7 @@ static_cast<jstring>(env->CallStaticObjectMethod(SampleForTests_clazz(env),
// Step 3: RegisterNatives. // Step 3: RegisterNatives.
static bool RegisterNativesImpl(JNIEnv* env, jclass clazz) { static bool RegisterNativesImpl(JNIEnv* env, jclass clazz) {
base::subtle::Release_Store(&g_SampleForTests_clazz, g_SampleForTests_clazz = static_cast<jclass>(env->NewWeakGlobalRef(clazz));
static_cast<base::subtle::AtomicWord>(env->NewWeakGlobalRef(clazz));
return true; return true;
} }
......
// Copyright 2014 The Chromium Authors. All rights reserved. // Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
...@@ -19,16 +19,8 @@ ...@@ -19,16 +19,8 @@
// Step 1: forward declarations. // Step 1: forward declarations.
namespace { namespace {
const char kTestJniClassPath[] = "org/chromium/TestJni"; const char kTestJniClassPath[] = "org/chromium/TestJni";
#if __clang__
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-function"
#endif
// Leaking this jclass as we cannot use LazyInstance from some threads. // Leaking this jclass as we cannot use LazyInstance from some threads.
jclass g_TestJni_clazz = NULL; jclass g_TestJni_clazz = NULL;
jclass TestJni_clazz(JNIEnv*) { return g_TestJni_clazz; }
#if __clang__
#pragma clang diagnostic pop
#endif
} // namespace } // namespace
...@@ -210,11 +202,11 @@ static bool RegisterNativesImpl(JNIEnv* env) { ...@@ -210,11 +202,11 @@ static bool RegisterNativesImpl(JNIEnv* env) {
const int kMethodsTestJniSize = arraysize(kMethodsTestJni); const int kMethodsTestJniSize = arraysize(kMethodsTestJni);
if (env->RegisterNatives(TestJni_clazz(env), if (env->RegisterNatives(g_TestJni_clazz,
kMethodsTestJni, kMethodsTestJni,
kMethodsTestJniSize) < 0) { kMethodsTestJniSize) < 0) {
jni_generator::HandleRegistrationError( jni_generator::HandleRegistrationError(
env, TestJni_clazz(env), __FILE__); env, g_TestJni_clazz, __FILE__);
return false; return false;
} }
......
// Copyright 2014 The Chromium Authors. All rights reserved. // Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
...@@ -19,16 +19,8 @@ ...@@ -19,16 +19,8 @@
// Step 1: forward declarations. // Step 1: forward declarations.
namespace { namespace {
const char kTestJniClassPath[] = "org/chromium/TestJni"; const char kTestJniClassPath[] = "org/chromium/TestJni";
#if __clang__
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-function"
#endif
// Leaking this jclass as we cannot use LazyInstance from some threads. // Leaking this jclass as we cannot use LazyInstance from some threads.
jclass g_TestJni_clazz = NULL; jclass g_TestJni_clazz = NULL;
jclass TestJni_clazz(JNIEnv*) { return g_TestJni_clazz; }
#if __clang__
#pragma clang diagnostic pop
#endif
} // namespace } // namespace
...@@ -57,11 +49,11 @@ static bool RegisterNativesImpl(JNIEnv* env) { ...@@ -57,11 +49,11 @@ static bool RegisterNativesImpl(JNIEnv* env) {
const int kMethodsTestJniSize = arraysize(kMethodsTestJni); const int kMethodsTestJniSize = arraysize(kMethodsTestJni);
if (env->RegisterNatives(TestJni_clazz(env), if (env->RegisterNatives(g_TestJni_clazz,
kMethodsTestJni, kMethodsTestJni,
kMethodsTestJniSize) < 0) { kMethodsTestJniSize) < 0) {
jni_generator::HandleRegistrationError( jni_generator::HandleRegistrationError(
env, TestJni_clazz(env), __FILE__); env, g_TestJni_clazz, __FILE__);
return false; return false;
} }
......
// Copyright 2014 The Chromium Authors. All rights reserved. // Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
...@@ -19,16 +19,8 @@ ...@@ -19,16 +19,8 @@
// Step 1: forward declarations. // Step 1: forward declarations.
namespace { namespace {
const char kTestClassPath[] = "org/chromium/example/jni_generator/Test"; const char kTestClassPath[] = "org/chromium/example/jni_generator/Test";
#if __clang__
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-function"
#endif
// Leaking this jclass as we cannot use LazyInstance from some threads. // Leaking this jclass as we cannot use LazyInstance from some threads.
jclass g_Test_clazz = NULL; jclass g_Test_clazz = NULL;
jclass Test_clazz(JNIEnv*) { return g_Test_clazz; }
#if __clang__
#pragma clang diagnostic pop
#endif
} // namespace } // namespace
...@@ -58,11 +50,11 @@ static bool RegisterNativesImpl(JNIEnv* env) { ...@@ -58,11 +50,11 @@ static bool RegisterNativesImpl(JNIEnv* env) {
const int kMethodsTestSize = arraysize(kMethodsTest); const int kMethodsTestSize = arraysize(kMethodsTest);
if (env->RegisterNatives(Test_clazz(env), if (env->RegisterNatives(g_Test_clazz,
kMethodsTest, kMethodsTest,
kMethodsTestSize) < 0) { kMethodsTestSize) < 0) {
jni_generator::HandleRegistrationError( jni_generator::HandleRegistrationError(
env, Test_clazz(env), __FILE__); env, g_Test_clazz, __FILE__);
return false; return false;
} }
......
// Copyright 2014 The Chromium Authors. All rights reserved. // Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
...@@ -19,16 +19,8 @@ ...@@ -19,16 +19,8 @@
// Step 1: forward declarations. // Step 1: forward declarations.
namespace { namespace {
const char kFooClassPath[] = "org/chromium/foo/Foo"; const char kFooClassPath[] = "org/chromium/foo/Foo";
#if __clang__
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-function"
#endif
// Leaking this jclass as we cannot use LazyInstance from some threads. // Leaking this jclass as we cannot use LazyInstance from some threads.
jclass g_Foo_clazz = NULL; jclass g_Foo_clazz = NULL;
jclass Foo_clazz(JNIEnv*) { return g_Foo_clazz; }
#if __clang__
#pragma clang diagnostic pop
#endif
} // namespace } // namespace
...@@ -40,12 +32,12 @@ static void DoSomething(JNIEnv* env, jclass jcaller, ...@@ -40,12 +32,12 @@ static void DoSomething(JNIEnv* env, jclass jcaller,
static base::subtle::AtomicWord g_Foo_calledByNative = 0; static base::subtle::AtomicWord g_Foo_calledByNative = 0;
static void Java_Foo_calledByNative(JNIEnv* env, jobject callback) { static void Java_Foo_calledByNative(JNIEnv* env, jobject callback) {
/* Must call RegisterNativesImpl() */ /* Must call RegisterNativesImpl() */
CHECK_CLAZZ(env, Foo_clazz(env), CHECK_CLAZZ(env, g_Foo_clazz,
Foo_clazz(env)); g_Foo_clazz);
jmethodID method_id = jmethodID method_id =
base::android::MethodID::LazyGet< base::android::MethodID::LazyGet<
base::android::MethodID::TYPE_STATIC>( base::android::MethodID::TYPE_STATIC>(
env, Foo_clazz(env), env, g_Foo_clazz,
"calledByNative", "calledByNative",
"(" "("
...@@ -54,7 +46,7 @@ static void Java_Foo_calledByNative(JNIEnv* env, jobject callback) { ...@@ -54,7 +46,7 @@ static void Java_Foo_calledByNative(JNIEnv* env, jobject callback) {
"V", "V",
&g_Foo_calledByNative); &g_Foo_calledByNative);
env->CallStaticVoidMethod(Foo_clazz(env), env->CallStaticVoidMethod(g_Foo_clazz,
method_id, callback); method_id, callback);
jni_generator::CheckException(env); jni_generator::CheckException(env);
...@@ -76,11 +68,11 @@ static bool RegisterNativesImpl(JNIEnv* env) { ...@@ -76,11 +68,11 @@ static bool RegisterNativesImpl(JNIEnv* env) {
const int kMethodsFooSize = arraysize(kMethodsFoo); const int kMethodsFooSize = arraysize(kMethodsFoo);
if (env->RegisterNatives(Foo_clazz(env), if (env->RegisterNatives(g_Foo_clazz,
kMethodsFoo, kMethodsFoo,
kMethodsFooSize) < 0) { kMethodsFooSize) < 0) {
jni_generator::HandleRegistrationError( jni_generator::HandleRegistrationError(
env, Foo_clazz(env), __FILE__); env, g_Foo_clazz, __FILE__);
return false; return false;
} }
......
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/android/jni_utils.h"
#include "base/android/jni_android.h"
#include "base/android/scoped_java_ref.h"
#include "jni/JNIUtils_jni.h"
namespace base {
namespace android {
ScopedJavaLocalRef<jobject> GetClassLoader(JNIEnv* env) {
return Java_JNIUtils_getClassLoader(env);
}
bool RegisterJNIUtils(JNIEnv* env) {
return RegisterNativesImpl(env);
}
} // namespace android
} // namespace base
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef BASE_ANDROID_JNI_UTILS_H_
#define BASE_ANDROID_JNI_UTILS_H_
#include <jni.h>
#include "base/android/scoped_java_ref.h"
namespace base {
namespace android {
// Gets a ClassLoader instance capable of loading Chromium java classes.
// This should be called either from JNI_OnLoad or from within a method called
// via JNI from Java.
BASE_EXPORT ScopedJavaLocalRef<jobject> GetClassLoader(JNIEnv* env);
bool RegisterJNIUtils(JNIEnv* env);
} // namespace android
} // namespace base
#endif // BASE_ANDROID_JNI_UTILS_H_
...@@ -1282,7 +1282,6 @@ ...@@ -1282,7 +1282,6 @@
'android/java/src/org/chromium/base/EventLog.java', 'android/java/src/org/chromium/base/EventLog.java',
'android/java/src/org/chromium/base/FieldTrialList.java', 'android/java/src/org/chromium/base/FieldTrialList.java',
'android/java/src/org/chromium/base/ImportantFileWriterAndroid.java', 'android/java/src/org/chromium/base/ImportantFileWriterAndroid.java',
'android/java/src/org/chromium/base/JNIUtils.java',
'android/java/src/org/chromium/base/library_loader/LibraryLoader.java', 'android/java/src/org/chromium/base/library_loader/LibraryLoader.java',
'android/java/src/org/chromium/base/MemoryPressureListener.java', 'android/java/src/org/chromium/base/MemoryPressureListener.java',
'android/java/src/org/chromium/base/JavaHandlerThread.java', 'android/java/src/org/chromium/base/JavaHandlerThread.java',
......
...@@ -55,8 +55,6 @@ ...@@ -55,8 +55,6 @@
'android/jni_registrar.h', 'android/jni_registrar.h',
'android/jni_string.cc', 'android/jni_string.cc',
'android/jni_string.h', 'android/jni_string.h',
'android/jni_utils.cc',
'android/jni_utils.h',
'android/jni_weak_ref.cc', 'android/jni_weak_ref.cc',
'android/jni_weak_ref.h', 'android/jni_weak_ref.h',
'android/library_loader/library_loader_hooks.cc', 'android/library_loader/library_loader_hooks.cc',
......
...@@ -32,7 +32,7 @@ ScopedJavaSurface::ScopedJavaSurface( ...@@ -32,7 +32,7 @@ ScopedJavaSurface::ScopedJavaSurface(
is_protected_(false) { is_protected_(false) {
JNIEnv* env = base::android::AttachCurrentThread(); JNIEnv* env = base::android::AttachCurrentThread();
RegisterNativesIfNeeded(env); RegisterNativesIfNeeded(env);
DCHECK(env->IsInstanceOf(surface.obj(), Surface_clazz(env))); DCHECK(env->IsInstanceOf(surface.obj(), g_Surface_clazz));
j_surface_.Reset(surface); j_surface_.Reset(surface);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment