| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 """Extracts native methods from a Java file and generates the JNI bindings. | 6 """Extracts native methods from a Java file and generates the JNI bindings. |
| 7 If you change this, please run and update the tests.""" | 7 If you change this, please run and update the tests.""" |
| 8 | 8 |
| 9 import collections | 9 import collections |
| 10 import errno | 10 import errno |
| (...skipping 1019 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1030 JavaDataTypeToCForCalledByNativeParam(param.datatype) + ' ' + | 1030 JavaDataTypeToCForCalledByNativeParam(param.datatype) + ' ' + |
| 1031 param.name | 1031 param.name |
| 1032 for param in called_by_native.params]) | 1032 for param in called_by_native.params]) |
| 1033 | 1033 |
| 1034 def GetForwardDeclaration(self, native): | 1034 def GetForwardDeclaration(self, native): |
| 1035 template_str = """ | 1035 template_str = """ |
| 1036 static ${RETURN} ${NAME}(JNIEnv* env, ${PARAMS}); | 1036 static ${RETURN} ${NAME}(JNIEnv* env, ${PARAMS}); |
| 1037 """ | 1037 """ |
| 1038 if self.options.native_exports: | 1038 if self.options.native_exports: |
| 1039 template_str += """ | 1039 template_str += """ |
| 1040 __attribute__((visibility("default"))) | 1040 __attribute__((visibility("default"), alias("${NAME}"))) |
| 1041 ${RETURN} Java_${JAVA_NAME}_native${NAME}(JNIEnv* env, ${PARAMS}) { | 1041 ${RETURN} Java_${JAVA_NAME}_native${NAME}(JNIEnv* env, ${PARAMS}); |
| 1042 return ${NAME}(${PARAMS_IN_CALL}); | |
| 1043 } | |
| 1044 """ | 1042 """ |
| 1045 template = Template(template_str) | 1043 template = Template(template_str) |
| 1046 params_in_call = [] | 1044 params_in_call = [] |
| 1047 if not self.options.pure_native_methods: | 1045 if not self.options.pure_native_methods: |
| 1048 params_in_call = ['env', 'jcaller'] | 1046 params_in_call = ['env', 'jcaller'] |
| 1049 params_in_call = ', '.join(params_in_call + [p.name for p in native.params]) | 1047 params_in_call = ', '.join(params_in_call + [p.name for p in native.params]) |
| 1050 | 1048 |
| 1051 java_name = JniParams.RemapClassName(self.fully_qualified_class) | 1049 java_name = JniParams.RemapClassName(self.fully_qualified_class) |
| 1052 java_name = java_name.replace('_', '_1').replace('/', '_') | 1050 java_name = java_name.replace('_', '_1').replace('/', '_') |
| 1053 if native.java_class_name: | 1051 if native.java_class_name: |
| (...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1260 'JAVA_CLASS': clazz, | 1258 'JAVA_CLASS': clazz, |
| 1261 'JNI_CLASS_PATH': JniParams.RemapClassName(all_classes[clazz]), | 1259 'JNI_CLASS_PATH': JniParams.RemapClassName(all_classes[clazz]), |
| 1262 } | 1260 } |
| 1263 ret += [template.substitute(values)] | 1261 ret += [template.substitute(values)] |
| 1264 ret += '' | 1262 ret += '' |
| 1265 | 1263 |
| 1266 class_getter_methods = [] | 1264 class_getter_methods = [] |
| 1267 if self.options.native_exports: | 1265 if self.options.native_exports: |
| 1268 template = Template("""\ | 1266 template = Template("""\ |
| 1269 // Leaking this jclass as we cannot use LazyInstance from some threads. | 1267 // Leaking this jclass as we cannot use LazyInstance from some threads. |
| 1270 base::subtle::AtomicWord g_${JAVA_CLASS}_clazz = 0; | 1268 base::subtle::AtomicWord g_${JAVA_CLASS}_clazz __attribute__((unused)) = 0; |
| 1271 #define ${JAVA_CLASS}_clazz(env) \ | 1269 #define ${JAVA_CLASS}_clazz(env) \ |
| 1272 base::android::LazyGetClass(env, k${JAVA_CLASS}ClassPath, \ | 1270 base::android::LazyGetClass(env, k${JAVA_CLASS}ClassPath, \ |
| 1273 &g_${JAVA_CLASS}_clazz)""") | 1271 &g_${JAVA_CLASS}_clazz)""") |
| 1274 else: | 1272 else: |
| 1275 template = Template("""\ | 1273 template = Template("""\ |
| 1276 // Leaking this jclass as we cannot use LazyInstance from some threads. | 1274 // Leaking this jclass as we cannot use LazyInstance from some threads. |
| 1277 jclass g_${JAVA_CLASS}_clazz = NULL; | 1275 jclass g_${JAVA_CLASS}_clazz = NULL; |
| 1278 #define ${JAVA_CLASS}_clazz(env) g_${JAVA_CLASS}_clazz""") | 1276 #define ${JAVA_CLASS}_clazz(env) g_${JAVA_CLASS}_clazz""") |
| 1279 | 1277 |
| 1280 for clazz in called_by_native_classes: | 1278 for clazz in called_by_native_classes: |
| (...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1518 GenerateJNIHeader(input_file, output_file, options) | 1516 GenerateJNIHeader(input_file, output_file, options) |
| 1519 | 1517 |
| 1520 if options.depfile: | 1518 if options.depfile: |
| 1521 build_utils.WriteDepfile( | 1519 build_utils.WriteDepfile( |
| 1522 options.depfile, | 1520 options.depfile, |
| 1523 build_utils.GetPythonDependencies()) | 1521 build_utils.GetPythonDependencies()) |
| 1524 | 1522 |
| 1525 | 1523 |
| 1526 if __name__ == '__main__': | 1524 if __name__ == '__main__': |
| 1527 sys.exit(main(sys.argv)) | 1525 sys.exit(main(sys.argv)) |
| OLD | NEW |