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 742 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
753 'CLASS_PATH_DEFINITIONS': self.GetClassPathDefinitionsString(), | 753 'CLASS_PATH_DEFINITIONS': self.GetClassPathDefinitionsString(), |
754 'CONSTANT_FIELDS': self.GetConstantFieldsString(), | 754 'CONSTANT_FIELDS': self.GetConstantFieldsString(), |
755 'METHOD_STUBS': self.GetMethodStubsString(), | 755 'METHOD_STUBS': self.GetMethodStubsString(), |
756 'OPEN_NAMESPACE': self.GetOpenNamespaceString(), | 756 'OPEN_NAMESPACE': self.GetOpenNamespaceString(), |
757 'JNI_NATIVE_METHODS': self.GetJNINativeMethodsString(), | 757 'JNI_NATIVE_METHODS': self.GetJNINativeMethodsString(), |
758 'REGISTER_NATIVES': self.GetRegisterNativesString(), | 758 'REGISTER_NATIVES': self.GetRegisterNativesString(), |
759 'CLOSE_NAMESPACE': self.GetCloseNamespaceString(), | 759 'CLOSE_NAMESPACE': self.GetCloseNamespaceString(), |
760 'HEADER_GUARD': self.header_guard, | 760 'HEADER_GUARD': self.header_guard, |
761 'INCLUDES': self.GetIncludesString(), | 761 'INCLUDES': self.GetIncludesString(), |
762 } | 762 } |
| 763 assert ((values['JNI_NATIVE_METHODS'] == '') == |
| 764 (values['REGISTER_NATIVES'] == '')) |
763 return WrapOutput(template.substitute(values)) | 765 return WrapOutput(template.substitute(values)) |
764 | 766 |
765 def GetClassPathDefinitionsString(self): | 767 def GetClassPathDefinitionsString(self): |
766 ret = [] | 768 ret = [] |
767 ret += [self.GetClassPathDefinitions()] | 769 ret += [self.GetClassPathDefinitions()] |
768 return '\n'.join(ret) | 770 return '\n'.join(ret) |
769 | 771 |
770 def GetConstantFieldsString(self): | 772 def GetConstantFieldsString(self): |
771 if not self.constant_fields: | 773 if not self.constant_fields: |
772 return '' | 774 return '' |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
822 return '' | 824 return '' |
823 template = Template("""\ | 825 template = Template("""\ |
824 static const JNINativeMethod kMethods${JAVA_CLASS}[] = { | 826 static const JNINativeMethod kMethods${JAVA_CLASS}[] = { |
825 ${KMETHODS} | 827 ${KMETHODS} |
826 }; | 828 }; |
827 """) | 829 """) |
828 return self.SubstituteNativeMethods(template) | 830 return self.SubstituteNativeMethods(template) |
829 | 831 |
830 def GetRegisterNativesString(self): | 832 def GetRegisterNativesString(self): |
831 """Returns the code for RegisterNatives.""" | 833 """Returns the code for RegisterNatives.""" |
| 834 natives = self.GetRegisterNativesImplString() |
| 835 if not natives: |
| 836 return '' |
| 837 |
832 template = Template("""\ | 838 template = Template("""\ |
833 ${REGISTER_NATIVES_SIGNATURE} { | 839 ${REGISTER_NATIVES_SIGNATURE} { |
834 ${EARLY_EXIT} | 840 ${EARLY_EXIT} |
835 ${NATIVES} | 841 ${NATIVES} |
836 return true; | 842 return true; |
837 } | 843 } |
838 """) | 844 """) |
839 signature = 'static bool RegisterNativesImpl(JNIEnv* env)' | 845 signature = 'static bool RegisterNativesImpl(JNIEnv* env)' |
840 early_exit = '' | 846 early_exit = '' |
841 if self.options.native_exports_optional: | 847 if self.options.native_exports_optional: |
842 early_exit = """\ | 848 early_exit = """\ |
843 if (base::android::IsManualJniRegistrationDisabled()) return true; | 849 if (base::android::IsManualJniRegistrationDisabled()) return true; |
844 """ | 850 """ |
845 | 851 |
846 natives = self.GetRegisterNativesImplString() | |
847 values = {'REGISTER_NATIVES_SIGNATURE': signature, | 852 values = {'REGISTER_NATIVES_SIGNATURE': signature, |
848 'EARLY_EXIT': early_exit, | 853 'EARLY_EXIT': early_exit, |
849 'NATIVES': natives, | 854 'NATIVES': natives, |
850 } | 855 } |
851 | 856 |
852 func_declaration = '' | 857 return template.substitute(values) |
853 if not natives: | |
854 func_declaration = Template("""\ | |
855 ${REGISTER_NATIVES_SIGNATURE} __attribute__((unused)); | |
856 """).substitute(values) | |
857 | |
858 return func_declaration + template.substitute(values) | |
859 | 858 |
860 def GetRegisterNativesImplString(self): | 859 def GetRegisterNativesImplString(self): |
861 """Returns the shared implementation for RegisterNatives.""" | 860 """Returns the shared implementation for RegisterNatives.""" |
862 if not self.options.native_exports_optional: | 861 if not self.options.native_exports_optional: |
863 return '' | 862 return '' |
864 | 863 |
865 template = Template("""\ | 864 template = Template("""\ |
866 const int kMethods${JAVA_CLASS}Size = arraysize(kMethods${JAVA_CLASS}); | 865 const int kMethods${JAVA_CLASS}Size = arraysize(kMethods${JAVA_CLASS}); |
867 | 866 |
868 if (env->RegisterNatives(${JAVA_CLASS}_clazz(env), | 867 if (env->RegisterNatives(${JAVA_CLASS}_clazz(env), |
(...skipping 494 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1363 GenerateJNIHeader(input_file, output_file, options) | 1362 GenerateJNIHeader(input_file, output_file, options) |
1364 | 1363 |
1365 if options.depfile: | 1364 if options.depfile: |
1366 build_utils.WriteDepfile( | 1365 build_utils.WriteDepfile( |
1367 options.depfile, | 1366 options.depfile, |
1368 build_utils.GetPythonDependencies()) | 1367 build_utils.GetPythonDependencies()) |
1369 | 1368 |
1370 | 1369 |
1371 if __name__ == '__main__': | 1370 if __name__ == '__main__': |
1372 sys.exit(main(sys.argv)) | 1371 sys.exit(main(sys.argv)) |
OLD | NEW |