| 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 27335834953a3e006647d27d98b301deb5b1fbf2..23b4b76fe3c7bde515f64008b0122cb4a8872d52 100755
|
| --- a/base/android/jni_generator/jni_generator.py
|
| +++ b/base/android/jni_generator/jni_generator.py
|
| @@ -673,18 +673,18 @@ $METHOD_ID_DEFINITIONS
|
| } // namespace
|
|
|
| $OPEN_NAMESPACE
|
| +extern "C"{
|
| $FORWARD_DECLARATIONS
|
|
|
| $CONSTANT_FIELDS
|
|
|
| // Step 2: method stubs.
|
| $METHOD_STUBS
|
| +};
|
|
|
| // Step 3: RegisterNatives.
|
| -$JNI_NATIVE_METHODS
|
| $REGISTER_NATIVES
|
| $CLOSE_NAMESPACE
|
| -$JNI_REGISTER_NATIVES
|
| #endif // ${HEADER_GUARD}
|
| """)
|
| values = {
|
| @@ -696,12 +696,10 @@ $JNI_REGISTER_NATIVES
|
| 'CONSTANT_FIELDS': self.GetConstantFieldsString(),
|
| 'METHOD_STUBS': self.GetMethodStubsString(),
|
| 'OPEN_NAMESPACE': self.GetOpenNamespaceString(),
|
| - 'JNI_NATIVE_METHODS': self.GetJNINativeMethodsString(),
|
| 'REGISTER_NATIVES': self.GetRegisterNativesString(),
|
| 'CLOSE_NAMESPACE': self.GetCloseNamespaceString(),
|
| 'HEADER_GUARD': self.header_guard,
|
| 'INCLUDES': self.GetIncludesString(),
|
| - 'JNI_REGISTER_NATIVES': self.GetJNIRegisterNativesString()
|
| }
|
| return WrapOutput(template.substitute(values))
|
|
|
| @@ -780,29 +778,6 @@ jmethodID g_${JAVA_CLASS}_${METHOD_ID_VAR_NAME} = NULL;""")
|
| ret += [self.GetKMethodArrayEntry(native)]
|
| return '\n'.join(ret)
|
|
|
| - def SubstituteNativeMethods(self, template):
|
| - """Substitutes JAVA_CLASS and KMETHODS in the provided template."""
|
| - ret = []
|
| - all_classes = self.GetUniqueClasses(self.natives)
|
| - all_classes[self.class_name] = self.fully_qualified_class
|
| - for clazz in all_classes:
|
| - kmethods = self.GetKMethodsString(clazz)
|
| - if kmethods:
|
| - values = {'JAVA_CLASS': clazz,
|
| - 'KMETHODS': kmethods}
|
| - ret += [template.substitute(values)]
|
| - if not ret: return ''
|
| - return '\n' + '\n'.join(ret)
|
| -
|
| - def GetJNINativeMethodsString(self):
|
| - """Returns the implementation of the array of native methods."""
|
| - template = Template("""\
|
| -static const JNINativeMethod kMethods${JAVA_CLASS}[] = {
|
| -${KMETHODS}
|
| -};
|
| -""")
|
| - return self.SubstituteNativeMethods(template)
|
| -
|
| def GetRegisterCalledByNativesImplString(self):
|
| """Returns the code for registering the called by native methods."""
|
| if not self.options.eager_called_by_natives:
|
| @@ -825,10 +800,12 @@ ${KMETHODS}
|
|
|
| def GetRegisterNativesString(self):
|
| """Returns the code for RegisterNatives."""
|
| +
|
| + if not self.called_by_natives and not self.options.eager_called_by_natives :
|
| + return ''
|
| template = Template("""\
|
| ${REGISTER_NATIVES_SIGNATURE} {
|
| ${CLASSES}
|
| -${NATIVES}
|
| ${CALLED_BY_NATIVES}
|
| return true;
|
| }
|
| @@ -839,30 +816,13 @@ ${CALLED_BY_NATIVES}
|
| else:
|
| signature += ')'
|
|
|
| - natives = self.GetRegisterNativesImplString()
|
| called_by_natives = self.GetRegisterCalledByNativesImplString()
|
| values = {'REGISTER_NATIVES_SIGNATURE': signature,
|
| 'CLASSES': self.GetFindClasses(),
|
| - 'NATIVES': natives,
|
| 'CALLED_BY_NATIVES': called_by_natives,
|
| }
|
| return template.substitute(values)
|
|
|
| - def GetRegisterNativesImplString(self):
|
| - """Returns the shared implementation for RegisterNatives."""
|
| - template = Template("""\
|
| - const int kMethods${JAVA_CLASS}Size = arraysize(kMethods${JAVA_CLASS});
|
| -
|
| - if (env->RegisterNatives(g_${JAVA_CLASS}_clazz,
|
| - kMethods${JAVA_CLASS},
|
| - kMethods${JAVA_CLASS}Size) < 0) {
|
| - jni_generator::HandleRegistrationError(
|
| - env, g_${JAVA_CLASS}_clazz, __FILE__);
|
| - return false;
|
| - }
|
| -""")
|
| - return self.SubstituteNativeMethods(template)
|
| -
|
| def GetJNIRegisterNativesString(self):
|
| """Returns the implementation for the JNI registration of native methods."""
|
| if not self.init_native:
|
| @@ -881,7 +841,6 @@ Java_${FULLY_QUALIFIED_CLASS}_${INIT_NATIVE_NAME}(JNIEnv* env, jclass clazz) {
|
| values = {'FULLY_QUALIFIED_CLASS': fully_qualified_class,
|
| 'INIT_NATIVE_NAME': 'native' + self.init_native.name,
|
| 'NAMESPACE': namespace,
|
| - 'REGISTER_NATIVES_IMPL': self.GetRegisterNativesImplString()
|
| }
|
| return template.substitute(values)
|
|
|
| @@ -933,9 +892,16 @@ Java_${FULLY_QUALIFIED_CLASS}_${INIT_NATIVE_NAME}(JNIEnv* env, jclass clazz) {
|
| def GetForwardDeclaration(self, native):
|
| template = Template("""
|
| static ${RETURN} ${NAME}(JNIEnv* env, ${PARAMS});
|
| +__attribute__((alias("${NAME}"), visibility("default"))) ${RETURN}
|
| + Java_${JAVA_NAME}_native${NAME}(JNIEnv* env, ${PARAMS});
|
| """)
|
| + java_name = JniParams.RemapClassName(self.fully_qualified_class).replace('_', '_1').replace('/', '_')
|
| + if native.java_class_name:
|
| + java_name += "_00024" + native.java_class_name
|
| +
|
| values = {'RETURN': JavaDataTypeToC(native.return_type),
|
| 'NAME': native.name,
|
| + 'JAVA_NAME': java_name,
|
| 'PARAMS': self.GetParamsInDeclaration(native)}
|
| return template.substitute(values)
|
|
|
| @@ -947,6 +913,9 @@ static ${RETURN} ${NAME}(JNIEnv* env, ${PARAMS_IN_DECLARATION}) {
|
| CHECK_NATIVE_PTR(env, jcaller, native, "${NAME}"${OPTIONAL_ERROR_RETURN});
|
| return native->${NAME}(${PARAMS_IN_CALL})${POST_CALL};
|
| }
|
| +__attribute__((alias("${NAME}"), visibility("default")))
|
| + ${RETURN} Java_${JAVA_NAME}_native${NAME}(JNIEnv* env,
|
| + ${PARAMS_IN_DECLARATION});
|
| """)
|
| params = []
|
| if not self.options.pure_native_methods:
|
| @@ -960,9 +929,13 @@ static ${RETURN} ${NAME}(JNIEnv* env, ${PARAMS_IN_DECLARATION}) {
|
| post_call = ''
|
| if re.match(RE_SCOPED_JNI_RETURN_TYPES, return_type):
|
| post_call = '.Release()'
|
| + java_name = JniParams.RemapClassName(self.fully_qualified_class).replace('_', '_1').replace('/', '_')
|
| + if native.java_class_name:
|
| + java_name += "_00024" + native.java_class_name
|
| values = {
|
| 'RETURN': return_type,
|
| 'OPTIONAL_ERROR_RETURN': optional_error_return,
|
| + 'JAVA_NAME': java_name,
|
| 'NAME': native.name,
|
| 'PARAMS_IN_DECLARATION': self.GetParamsInDeclaration(native),
|
| 'PARAM0_NAME': native.params[0].name,
|
| @@ -1098,12 +1071,11 @@ ${FUNCTION_HEADER}
|
| def GetClassPathDefinitions(self):
|
| """Returns the ClassPath constants."""
|
| ret = []
|
| + if not self.called_by_natives:
|
| + return ''
|
| template = Template("""\
|
| const char k${JAVA_CLASS}ClassPath[] = "${JNI_CLASS_PATH}";""")
|
| - native_classes = self.GetUniqueClasses(self.natives)
|
| - called_by_native_classes = self.GetUniqueClasses(self.called_by_natives)
|
| - all_classes = native_classes
|
| - all_classes.update(called_by_native_classes)
|
| + all_classes = self.GetUniqueClasses(self.called_by_natives)
|
| for clazz in all_classes:
|
| values = {
|
| 'JAVA_CLASS': clazz,
|
| @@ -1111,7 +1083,7 @@ const char k${JAVA_CLASS}ClassPath[] = "${JNI_CLASS_PATH}";""")
|
| }
|
| ret += [template.substitute(values)]
|
| ret += ''
|
| - for clazz in called_by_native_classes:
|
| + for clazz in all_classes:
|
| template = Template("""\
|
| // Leaking this jclass as we cannot use LazyInstance from some threads.
|
| jclass g_${JAVA_CLASS}_clazz = NULL;""")
|
| @@ -1122,6 +1094,8 @@ jclass g_${JAVA_CLASS}_clazz = NULL;""")
|
| return '\n'.join(ret)
|
|
|
| def GetFindClasses(self):
|
| + if not self.called_by_natives:
|
| + return ''
|
| """Returns the imlementation of FindClass for all known classes."""
|
| if self.init_native:
|
| template = Template("""\
|
|
|