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..d9ca19edd602124747ee7e2c1dd172017fd90ea0 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) |