| Index: base/android/jni_generator/jni_generator.py
|
| diff --git a/base/android/jni_generator/jni_generator.py b/base/android/jni_generator/jni_generator.py
|
| index de3532f878775779da6a41dec0f74bc07242c7b5..f5dde786516bcc57c40680d8902b2a003c71c855 100755
|
| --- a/base/android/jni_generator/jni_generator.py
|
| +++ b/base/android/jni_generator/jni_generator.py
|
| @@ -471,7 +471,7 @@ class JNIFromJavaP(object):
|
| if not match:
|
| continue
|
| self.called_by_natives += [CalledByNative(
|
| - system_class=False,
|
| + system_class=True,
|
| unchecked=False,
|
| static=False,
|
| java_class_name='',
|
| @@ -601,13 +601,9 @@ $FORWARD_DECLARATIONS
|
| // Step 2: method stubs.
|
| $METHOD_STUBS
|
|
|
| -// Step 3: GetMethodIDs and RegisterNatives.
|
| -static void GetMethodIDsImpl(JNIEnv* env) {
|
| -$GET_METHOD_IDS_IMPL
|
| -}
|
| +// Step 3: RegisterNatives.
|
|
|
| static bool RegisterNativesImpl(JNIEnv* env) {
|
| - GetMethodIDsImpl(env);
|
| $REGISTER_NATIVES_IMPL
|
| return true;
|
| }
|
| @@ -624,7 +620,6 @@ $CLOSE_NAMESPACE
|
| 'FORWARD_DECLARATIONS': self.GetForwardDeclarationsString(),
|
| 'METHOD_STUBS': self.GetMethodStubsString(),
|
| 'OPEN_NAMESPACE': self.GetOpenNamespaceString(),
|
| - 'GET_METHOD_IDS_IMPL': self.GetMethodIDsImplString(),
|
| 'REGISTER_NATIVES_IMPL': self.GetRegisterNativesImplString(),
|
| 'CLOSE_NAMESPACE': self.GetCloseNamespaceString(),
|
| 'HEADER_GUARD': self.header_guard,
|
| @@ -660,13 +655,6 @@ $CLOSE_NAMESPACE
|
| ret += [self.GetKMethodArrayEntry(native)]
|
| return '\n'.join(ret)
|
|
|
| - def GetMethodIDsImplString(self):
|
| - ret = []
|
| - ret += [self.GetFindClasses()]
|
| - for called_by_native in self.called_by_natives:
|
| - ret += [self.GetMethodIDImpl(called_by_native)]
|
| - return '\n'.join(ret)
|
| -
|
| def GetRegisterNativesImplString(self):
|
| """Returns the implementation for RegisterNatives."""
|
| template = Template("""\
|
| @@ -682,7 +670,7 @@ ${KMETHODS}
|
| return false;
|
| }
|
| """)
|
| - ret = []
|
| + ret = [self.GetFindClasses()]
|
| all_classes = self.GetUniqueClasses(self.natives)
|
| all_classes[self.class_name] = self.fully_qualified_class
|
| for clazz in all_classes:
|
| @@ -795,7 +783,7 @@ static jmethodID g_${JAVA_CLASS}_${METHOD_ID_VAR_NAME} = 0;
|
| ${FUNCTION_HEADER}
|
| /* Must call RegisterNativesImpl() */
|
| DCHECK(g_${JAVA_CLASS}_clazz);
|
| - DCHECK(g_${JAVA_CLASS}_${METHOD_ID_VAR_NAME});
|
| + ${GET_METHOD_ID_IMPL}
|
| ${RETURN_DECLARATION}
|
| ${PRE_CALL}env->${ENV_CALL}(${FIRST_PARAM_IN_CALL},
|
| g_${JAVA_CLASS}_${METHOD_ID_VAR_NAME}${PARAMS_IN_CALL})${POST_CALL};
|
| @@ -853,6 +841,7 @@ ${FUNCTION_HEADER}
|
| 'PARAMS_IN_CALL': params_for_call,
|
| 'METHOD_ID_VAR_NAME': called_by_native.method_id_var_name,
|
| 'CHECK_EXCEPTION': check_exception,
|
| + 'GET_METHOD_ID_IMPL': self.GetMethodIDImpl(called_by_native)
|
| }
|
| values['FUNCTION_SIGNATURE'] = (
|
| function_signature_template.substitute(values))
|
| @@ -921,12 +910,14 @@ jclass g_${JAVA_CLASS}_clazz = NULL;""")
|
|
|
| def GetMethodIDImpl(self, called_by_native):
|
| """Returns the implementation of GetMethodID."""
|
| - template = Template("""\
|
| - g_${JAVA_CLASS}_${METHOD_ID_VAR_NAME} =
|
| - base::android::Get${STATIC}MethodID(
|
| - env, g_${JAVA_CLASS}_clazz,
|
| - "${JNI_NAME}",
|
| - ${JNI_SIGNATURE});
|
| + template = Template("""
|
| + base::android::LazyMethodID::Get<
|
| + base::android::LazyMethodID::METHODTYPE_${STATIC},
|
| + base::android::LazyMethodID::EXCEPTIONCHECK_${CHECK_EXCEPTION}>(
|
| + env, g_${JAVA_CLASS}_clazz,
|
| + "${JNI_NAME}",
|
| + ${JNI_SIGNATURE},
|
| + &g_${JAVA_CLASS}_${METHOD_ID_VAR_NAME});
|
| """)
|
| jni_name = called_by_native.name
|
| jni_return_type = called_by_native.return_type
|
| @@ -937,7 +928,8 @@ jclass g_${JAVA_CLASS}_clazz = NULL;""")
|
| 'JAVA_CLASS': called_by_native.java_class_name or self.class_name,
|
| 'JNI_NAME': jni_name,
|
| 'METHOD_ID_VAR_NAME': called_by_native.method_id_var_name,
|
| - 'STATIC': 'Static' if called_by_native.static else '',
|
| + 'STATIC': 'STATIC' if called_by_native.static else 'NORMAL',
|
| + 'CHECK_EXCEPTION': 'NO' if called_by_native.system_class else 'YES',
|
| 'JNI_SIGNATURE': JniSignature(called_by_native.params,
|
| jni_return_type,
|
| True)
|
|
|