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


CrOS-Libchrome-Original-Commit: 3b2dba9f6b113b03dc71ba5b9195a27fda2e945a
diff --git a/base/android/jni_generator/jni_generator.py b/base/android/jni_generator/jni_generator.py
index a1d8790..88332fa 100755
--- a/base/android/jni_generator/jni_generator.py
+++ b/base/android/jni_generator/jni_generator.py
@@ -731,7 +731,7 @@
   def GetContent(self):
     """Returns the content of the JNI binding file."""
     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
 // found in the LICENSE file.
 
@@ -947,11 +947,11 @@
     template = Template("""\
   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}Size) < 0) {
     jni_generator::HandleRegistrationError(
-        env, ${JAVA_CLASS}_clazz(env), __FILE__);
+        env, g_${JAVA_CLASS}_clazz, __FILE__);
     return false;
   }
 """)
@@ -1122,10 +1122,11 @@
 
   def GetCalledByNativeValues(self, called_by_native):
     """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:
       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:
       first_param_in_declaration = ', jobject obj'
       first_param_in_call = 'obj'
@@ -1159,7 +1160,7 @@
       else:
         return_clause = 'return ret;'
     return {
-        'JAVA_CLASS': java_class,
+        'JAVA_CLASS': called_by_native.java_class_name or self.class_name,
         'RETURN_TYPE': return_type,
         'OPTIONAL_ERROR_RETURN': optional_error_return,
         'RETURN_DECLARATION': return_declaration,
@@ -1203,7 +1204,7 @@
 ${FUNCTION_HEADER}
   /* Must call RegisterNativesImpl()  */
   CHECK_CLAZZ(env, ${FIRST_PARAM_IN_CALL},
-      ${JAVA_CLASS}_clazz(env)${OPTIONAL_ERROR_RETURN});
+      g_${JAVA_CLASS}_clazz${OPTIONAL_ERROR_RETURN});
   jmethodID method_id =
     ${GET_METHOD_ID_IMPL}
   ${RETURN_DECLARATION}
@@ -1262,56 +1263,22 @@
       }
       ret += [template.substitute(values)]
     ret += ''
-
-    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("""\
-// Leaking this jclass as we cannot use LazyInstance from some threads.
-jclass g_${JAVA_CLASS}_clazz = NULL;
-jclass ${JAVA_CLASS}_clazz(JNIEnv*) { return g_${JAVA_CLASS}_clazz; }""")
-
     for clazz in called_by_native_classes:
+      template = Template("""\
+// Leaking this jclass as we cannot use LazyInstance from some threads.
+jclass g_${JAVA_CLASS}_clazz = NULL;""")
       values = {
           'JAVA_CLASS': clazz,
       }
-      class_getter_methods += [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)]
+      ret += [template.substitute(values)]
     return '\n'.join(ret)
 
   def GetFindClasses(self):
     """Returns the imlementation of FindClass for all known classes."""
     if self.init_native:
-      if self.options.native_exports:
-        template = Template("""\
-    base::subtle::Release_Store(&g_${JAVA_CLASS}_clazz,
-      static_cast<base::subtle::AtomicWord>(env->NewWeakGlobalRef(clazz));""")
-      else:
-        template = Template("""\
+      template = Template("""\
   g_${JAVA_CLASS}_clazz = static_cast<jclass>(env->NewWeakGlobalRef(clazz));""")
     else:
-      if self.options.native_exports:
-        return '\n'
       template = Template("""\
   g_${JAVA_CLASS}_clazz = reinterpret_cast<jclass>(env->NewGlobalRef(
       base::android::GetClass(env, k${JAVA_CLASS}ClassPath).obj()));""")
@@ -1326,13 +1293,13 @@
     if self.options.eager_called_by_natives:
       template = Template("""\
 env->Get${STATIC_METHOD_PART}MethodID(
-      ${JAVA_CLASS}_clazz(env),
+      g_${JAVA_CLASS}_clazz,
       "${JNI_NAME}", ${JNI_SIGNATURE});""")
     else:
       template = Template("""\
   base::android::MethodID::LazyGet<
       base::android::MethodID::TYPE_${STATIC}>(
-      env, ${JAVA_CLASS}_clazz(env),
+      env, g_${JAVA_CLASS}_clazz,
       "${JNI_NAME}",
       ${JNI_SIGNATURE},
       &g_${JAVA_CLASS}_${METHOD_ID_VAR_NAME});