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

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

Issue 2219923002: JNI: allow either JavaRef or bare objects in Java calls. (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 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 def JavaDataTypeToCForDeclaration(java_type): 146 def JavaDataTypeToCForDeclaration(java_type):
147 """Returns a JavaRef-wrapped C datatype for the given java type.""" 147 """Returns a JavaRef-wrapped C datatype for the given java type."""
148 return WrapCTypeForDeclaration(JavaDataTypeToC(java_type)) 148 return WrapCTypeForDeclaration(JavaDataTypeToC(java_type))
149 149
150 150
151 def JavaDataTypeToCForCalledByNativeParam(java_type): 151 def JavaDataTypeToCForCalledByNativeParam(java_type):
152 """Returns a C datatype to be when calling from native.""" 152 """Returns a C datatype to be when calling from native."""
153 if java_type == 'int': 153 if java_type == 'int':
154 return 'JniIntWrapper' 154 return 'JniIntWrapper'
155 else: 155 else:
156 return JavaDataTypeToC(java_type) 156 c_type = JavaDataTypeToC(java_type)
157 if re.match(RE_SCOPED_JNI_TYPES, c_type):
158 return 'const base::android::JavaRefOrBare<' + c_type + '>&'
159 else:
160 return c_type
157 161
158 162
159 def JavaReturnValueToC(java_type): 163 def JavaReturnValueToC(java_type):
160 """Returns a valid C return value for the given java type.""" 164 """Returns a valid C return value for the given java type."""
161 java_pod_type_map = { 165 java_pod_type_map = {
162 'int': '0', 166 'int': '0',
163 'byte': '0', 167 'byte': '0',
164 'char': '0', 168 'char': '0',
165 'short': '0', 169 'short': '0',
166 'boolean': 'false', 170 'boolean': 'false',
(...skipping 858 matching lines...) Expand 10 before | Expand all | Expand 10 after
1025 1029
1026 extern "C" __attribute__((visibility("default"))) 1030 extern "C" __attribute__((visibility("default")))
1027 ${RETURN} ${STUB_NAME}(JNIEnv* env, ${PARAMS_IN_STUB}) { 1031 ${RETURN} ${STUB_NAME}(JNIEnv* env, ${PARAMS_IN_STUB}) {
1028 return ${NAME}(${PARAMS_IN_CALL})${POST_CALL}; 1032 return ${NAME}(${PARAMS_IN_CALL})${POST_CALL};
1029 } 1033 }
1030 """) 1034 """)
1031 1035
1032 return template.substitute(values) 1036 return template.substitute(values)
1033 1037
1034 def GetArgument(self, param): 1038 def GetArgument(self, param):
1035 return ('as_jint(' + param.name + ')' 1039 if param.datatype == 'int':
1036 if param.datatype == 'int' else param.name) 1040 return 'as_jint(' + param.name + ')'
1041 c_type = JavaDataTypeToC(java_type)
rmcilroy 2016/08/08 13:08:29 is this line meant to be here? looks unused (and w
Torne 2016/08/08 13:34:24 No, that's a copypaste error I guess from the chun
1042 elif re.match(RE_SCOPED_JNI_TYPES, JavaDataTypeToC(param.datatype)):
1043 return param.name + '.obj()'
1044 else:
1045 return param.name
1037 1046
1038 def GetArgumentsInCall(self, params): 1047 def GetArgumentsInCall(self, params):
1039 """Return a string of arguments to call from native into Java""" 1048 """Return a string of arguments to call from native into Java"""
1040 return [self.GetArgument(p) for p in params] 1049 return [self.GetArgument(p) for p in params]
1041 1050
1042 def GetCalledByNativeValues(self, called_by_native): 1051 def GetCalledByNativeValues(self, called_by_native):
1043 """Fills in necessary values for the CalledByNative methods.""" 1052 """Fills in necessary values for the CalledByNative methods."""
1044 java_class = called_by_native.java_class_name or self.class_name 1053 java_class = called_by_native.java_class_name or self.class_name
1045 if called_by_native.static or called_by_native.is_constructor: 1054 if called_by_native.static or called_by_native.is_constructor:
1046 first_param_in_declaration = '' 1055 first_param_in_declaration = ''
1047 first_param_in_call = ('%s_clazz(env)' % java_class) 1056 first_param_in_call = ('%s_clazz(env)' % java_class)
1048 else: 1057 else:
1049 first_param_in_declaration = ', jobject obj' 1058 first_param_in_declaration = (
1050 first_param_in_call = 'obj' 1059 ', const base::android::JavaRefOrBare<jobject>& obj')
1060 first_param_in_call = 'obj.obj()'
1051 params_in_declaration = self.GetCalledByNativeParamsInDeclaration( 1061 params_in_declaration = self.GetCalledByNativeParamsInDeclaration(
1052 called_by_native) 1062 called_by_native)
1053 if params_in_declaration: 1063 if params_in_declaration:
1054 params_in_declaration = ', ' + params_in_declaration 1064 params_in_declaration = ', ' + params_in_declaration
1055 params_in_call = ', '.join(self.GetArgumentsInCall(called_by_native.params)) 1065 params_in_call = ', '.join(self.GetArgumentsInCall(called_by_native.params))
1056 if params_in_call: 1066 if params_in_call:
1057 params_in_call = ', ' + params_in_call 1067 params_in_call = ', ' + params_in_call
1058 pre_call = '' 1068 pre_call = ''
1059 post_call = '' 1069 post_call = ''
1060 if called_by_native.static_cast: 1070 if called_by_native.static_cast:
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after
1364 GenerateJNIHeader(input_file, output_file, options) 1374 GenerateJNIHeader(input_file, output_file, options)
1365 1375
1366 if options.depfile: 1376 if options.depfile:
1367 build_utils.WriteDepfile( 1377 build_utils.WriteDepfile(
1368 options.depfile, 1378 options.depfile,
1369 build_utils.GetPythonDependencies()) 1379 build_utils.GetPythonDependencies())
1370 1380
1371 1381
1372 if __name__ == '__main__': 1382 if __name__ == '__main__':
1373 sys.exit(main(sys.argv)) 1383 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