Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(432)

Side by Side Diff: base/android/jni_generator/jni_generator.py

Issue 2204623002: Android: Don't require RegisterNatives if there are none (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 830 matching lines...) Expand 10 before | Expand all | Expand 10 after
841 if self.options.native_exports_optional: 841 if self.options.native_exports_optional:
842 early_exit = """\ 842 early_exit = """\
843 if (base::android::IsManualJniRegistrationDisabled()) return true; 843 if (base::android::IsManualJniRegistrationDisabled()) return true;
844 """ 844 """
845 845
846 natives = self.GetRegisterNativesImplString() 846 natives = self.GetRegisterNativesImplString()
847 values = {'REGISTER_NATIVES_SIGNATURE': signature, 847 values = {'REGISTER_NATIVES_SIGNATURE': signature,
848 'EARLY_EXIT': early_exit, 848 'EARLY_EXIT': early_exit,
849 'NATIVES': natives, 849 'NATIVES': natives,
850 } 850 }
851 return template.substitute(values) 851
852 func_declaration = ''
853 if not natives:
854 func_declaration = Template("""\
855 ${REGISTER_NATIVES_SIGNATURE} __attribute__((unused));
no sievers 2016/08/01 21:42:41 This can only be used on the declaration, not the
Torne 2016/08/02 12:23:13 Yeah attributes are annoying :)
856 """).substitute(values)
857
858 return func_declaration + template.substitute(values)
852 859
853 def GetRegisterNativesImplString(self): 860 def GetRegisterNativesImplString(self):
854 """Returns the shared implementation for RegisterNatives.""" 861 """Returns the shared implementation for RegisterNatives."""
855 if not self.options.native_exports_optional: 862 if not self.options.native_exports_optional:
856 return '' 863 return ''
857 864
858 template = Template("""\ 865 template = Template("""\
859 const int kMethods${JAVA_CLASS}Size = arraysize(kMethods${JAVA_CLASS}); 866 const int kMethods${JAVA_CLASS}Size = arraysize(kMethods${JAVA_CLASS});
860 867
861 if (env->RegisterNatives(${JAVA_CLASS}_clazz(env), 868 if (env->RegisterNatives(${JAVA_CLASS}_clazz(env),
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
1094 static ${RETURN_TYPE} Java_${JAVA_CLASS}_${METHOD_ID_VAR_NAME}(\ 1101 static ${RETURN_TYPE} Java_${JAVA_CLASS}_${METHOD_ID_VAR_NAME}(\
1095 JNIEnv* env${FIRST_PARAM_IN_DECLARATION}${PARAMS_IN_DECLARATION})""") 1102 JNIEnv* env${FIRST_PARAM_IN_DECLARATION}${PARAMS_IN_DECLARATION})""")
1096 function_header_template = Template("""\ 1103 function_header_template = Template("""\
1097 ${FUNCTION_SIGNATURE} {""") 1104 ${FUNCTION_SIGNATURE} {""")
1098 function_header_with_unused_template = Template("""\ 1105 function_header_with_unused_template = Template("""\
1099 ${FUNCTION_SIGNATURE} __attribute__ ((unused)); 1106 ${FUNCTION_SIGNATURE} __attribute__ ((unused));
1100 ${FUNCTION_SIGNATURE} {""") 1107 ${FUNCTION_SIGNATURE} {""")
1101 template = Template(""" 1108 template = Template("""
1102 static base::subtle::AtomicWord g_${JAVA_CLASS}_${METHOD_ID_VAR_NAME} = 0; 1109 static base::subtle::AtomicWord g_${JAVA_CLASS}_${METHOD_ID_VAR_NAME} = 0;
1103 ${FUNCTION_HEADER} 1110 ${FUNCTION_HEADER}
1104 /* Must call RegisterNativesImpl() */
1105 CHECK_CLAZZ(env, ${FIRST_PARAM_IN_CALL}, 1111 CHECK_CLAZZ(env, ${FIRST_PARAM_IN_CALL},
1106 ${JAVA_CLASS}_clazz(env)${OPTIONAL_ERROR_RETURN}); 1112 ${JAVA_CLASS}_clazz(env)${OPTIONAL_ERROR_RETURN});
1107 jmethodID method_id = 1113 jmethodID method_id =
1108 ${GET_METHOD_ID_IMPL} 1114 ${GET_METHOD_ID_IMPL}
1109 ${RETURN_DECLARATION} 1115 ${RETURN_DECLARATION}
1110 ${PRE_CALL}env->${ENV_CALL}(${FIRST_PARAM_IN_CALL}, 1116 ${PRE_CALL}env->${ENV_CALL}(${FIRST_PARAM_IN_CALL},
1111 method_id${PARAMS_IN_CALL})${POST_CALL}; 1117 method_id${PARAMS_IN_CALL})${POST_CALL};
1112 ${CHECK_EXCEPTION} 1118 ${CHECK_EXCEPTION}
1113 ${RETURN_CLAUSE} 1119 ${RETURN_CLAUSE}
1114 }""") 1120 }""")
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
1357 GenerateJNIHeader(input_file, output_file, options) 1363 GenerateJNIHeader(input_file, output_file, options)
1358 1364
1359 if options.depfile: 1365 if options.depfile:
1360 build_utils.WriteDepfile( 1366 build_utils.WriteDepfile(
1361 options.depfile, 1367 options.depfile,
1362 build_utils.GetPythonDependencies()) 1368 build_utils.GetPythonDependencies())
1363 1369
1364 1370
1365 if __name__ == '__main__': 1371 if __name__ == '__main__':
1366 sys.exit(main(sys.argv)) 1372 sys.exit(main(sys.argv))
OLDNEW
« no previous file with comments | « base/android/jni_generator/golden_sample_for_tests_jni.h ('k') | base/android/jni_generator/testCalledByNatives.golden » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698