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

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: Remove unreachable line 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 elif re.match(RE_SCOPED_JNI_TYPES, JavaDataTypeToC(param.datatype)):
1042 return param.name + '.obj()'
1043 else:
1044 return param.name
1037 1045
1038 def GetArgumentsInCall(self, params): 1046 def GetArgumentsInCall(self, params):
1039 """Return a string of arguments to call from native into Java""" 1047 """Return a string of arguments to call from native into Java"""
1040 return [self.GetArgument(p) for p in params] 1048 return [self.GetArgument(p) for p in params]
1041 1049
1042 def GetCalledByNativeValues(self, called_by_native): 1050 def GetCalledByNativeValues(self, called_by_native):
1043 """Fills in necessary values for the CalledByNative methods.""" 1051 """Fills in necessary values for the CalledByNative methods."""
1044 java_class = called_by_native.java_class_name or self.class_name 1052 java_class = called_by_native.java_class_name or self.class_name
1045 if called_by_native.static or called_by_native.is_constructor: 1053 if called_by_native.static or called_by_native.is_constructor:
1046 first_param_in_declaration = '' 1054 first_param_in_declaration = ''
1047 first_param_in_call = ('%s_clazz(env)' % java_class) 1055 first_param_in_call = ('%s_clazz(env)' % java_class)
1048 else: 1056 else:
1049 first_param_in_declaration = ', jobject obj' 1057 first_param_in_declaration = (
1050 first_param_in_call = 'obj' 1058 ', const base::android::JavaRefOrBare<jobject>& obj')
1059 first_param_in_call = 'obj.obj()'
1051 params_in_declaration = self.GetCalledByNativeParamsInDeclaration( 1060 params_in_declaration = self.GetCalledByNativeParamsInDeclaration(
1052 called_by_native) 1061 called_by_native)
1053 if params_in_declaration: 1062 if params_in_declaration:
1054 params_in_declaration = ', ' + params_in_declaration 1063 params_in_declaration = ', ' + params_in_declaration
1055 params_in_call = ', '.join(self.GetArgumentsInCall(called_by_native.params)) 1064 params_in_call = ', '.join(self.GetArgumentsInCall(called_by_native.params))
1056 if params_in_call: 1065 if params_in_call:
1057 params_in_call = ', ' + params_in_call 1066 params_in_call = ', ' + params_in_call
1058 pre_call = '' 1067 pre_call = ''
1059 post_call = '' 1068 post_call = ''
1060 if called_by_native.static_cast: 1069 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) 1373 GenerateJNIHeader(input_file, output_file, options)
1365 1374
1366 if options.depfile: 1375 if options.depfile:
1367 build_utils.WriteDepfile( 1376 build_utils.WriteDepfile(
1368 options.depfile, 1377 options.depfile,
1369 build_utils.GetPythonDependencies()) 1378 build_utils.GetPythonDependencies())
1370 1379
1371 1380
1372 if __name__ == '__main__': 1381 if __name__ == '__main__':
1373 sys.exit(main(sys.argv)) 1382 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