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

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

Issue 1308363003: Revert of jni_generator: Make all object-returning natives return ScopedJavaLocalRef. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 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 1049 matching lines...) Expand 10 before | Expand all | Expand 10 after
1060 params = native.params 1060 params = native.params
1061 params_in_call = [] 1061 params_in_call = []
1062 if not self.options.pure_native_methods: 1062 if not self.options.pure_native_methods:
1063 params_in_call = ['env', 'jcaller'] 1063 params_in_call = ['env', 'jcaller']
1064 params_in_call = ', '.join(params_in_call + [p.name for p in params]) 1064 params_in_call = ', '.join(params_in_call + [p.name for p in params])
1065 1065
1066 if self.options.native_exports: 1066 if self.options.native_exports:
1067 stub_visibility = 'extern "C" __attribute__((visibility("default")))\n' 1067 stub_visibility = 'extern "C" __attribute__((visibility("default")))\n'
1068 else: 1068 else:
1069 stub_visibility = 'static ' 1069 stub_visibility = 'static '
1070 return_type = return_declaration = JavaDataTypeToC(native.return_type) 1070 return_type = JavaDataTypeToC(native.return_type)
1071 post_call = ''
1072 if re.match(RE_SCOPED_JNI_RETURN_TYPES, return_type):
1073 post_call = '.Release()'
1074 return_declaration = 'ScopedJavaLocalRef<' + return_type + '>'
1075 values = { 1071 values = {
1076 'RETURN': return_type, 1072 'RETURN': return_type,
1077 'RETURN_DECLARATION': return_declaration,
1078 'NAME': native.name, 1073 'NAME': native.name,
1079 'PARAMS': self.GetParamsInDeclaration(native), 1074 'PARAMS': self.GetParamsInDeclaration(native),
1080 'PARAMS_IN_CALL': params_in_call, 1075 'PARAMS_IN_CALL': params_in_call,
1081 'POST_CALL': post_call,
1082 'STUB_NAME': self.GetStubName(native), 1076 'STUB_NAME': self.GetStubName(native),
1083 'STUB_VISIBILITY': stub_visibility, 1077 'STUB_VISIBILITY': stub_visibility,
1084 } 1078 }
1085 1079
1086 if is_method: 1080 if is_method:
1087 optional_error_return = JavaReturnValueToC(native.return_type) 1081 optional_error_return = JavaReturnValueToC(native.return_type)
1088 if optional_error_return: 1082 if optional_error_return:
1089 optional_error_return = ', ' + optional_error_return 1083 optional_error_return = ', ' + optional_error_return
1084 post_call = ''
1085 if re.match(RE_SCOPED_JNI_RETURN_TYPES, return_type):
1086 post_call = '.Release()'
1090 values.update({ 1087 values.update({
1091 'OPTIONAL_ERROR_RETURN': optional_error_return, 1088 'OPTIONAL_ERROR_RETURN': optional_error_return,
1092 'PARAM0_NAME': native.params[0].name, 1089 'PARAM0_NAME': native.params[0].name,
1093 'P0_TYPE': native.p0_type, 1090 'P0_TYPE': native.p0_type,
1091 'POST_CALL': post_call,
1094 }) 1092 })
1095 template = Template("""\ 1093 template = Template("""\
1096 ${STUB_VISIBILITY}${RETURN} ${STUB_NAME}(JNIEnv* env, 1094 ${STUB_VISIBILITY}${RETURN} ${STUB_NAME}(JNIEnv* env,
1097 ${PARAMS}) { 1095 ${PARAMS}) {
1098 ${P0_TYPE}* native = reinterpret_cast<${P0_TYPE}*>(${PARAM0_NAME}); 1096 ${P0_TYPE}* native = reinterpret_cast<${P0_TYPE}*>(${PARAM0_NAME});
1099 CHECK_NATIVE_PTR(env, jcaller, native, "${NAME}"${OPTIONAL_ERROR_RETURN}); 1097 CHECK_NATIVE_PTR(env, jcaller, native, "${NAME}"${OPTIONAL_ERROR_RETURN});
1100 return native->${NAME}(${PARAMS_IN_CALL})${POST_CALL}; 1098 return native->${NAME}(${PARAMS_IN_CALL})${POST_CALL};
1101 } 1099 }
1102 """) 1100 """)
1103 else: 1101 else:
1104 template = Template(""" 1102 template = Template("""
1105 static ${RETURN_DECLARATION} ${NAME}(JNIEnv* env, ${PARAMS}); 1103 static ${RETURN} ${NAME}(JNIEnv* env, ${PARAMS});
1106 1104
1107 ${STUB_VISIBILITY}${RETURN} ${STUB_NAME}(JNIEnv* env, ${PARAMS}) { 1105 ${STUB_VISIBILITY}${RETURN} ${STUB_NAME}(JNIEnv* env, ${PARAMS}) {
1108 return ${NAME}(${PARAMS_IN_CALL})${POST_CALL}; 1106 return ${NAME}(${PARAMS_IN_CALL});
1109 } 1107 }
1110 """) 1108 """)
1111 1109
1112 return template.substitute(values) 1110 return template.substitute(values)
1113 1111
1114 def GetArgument(self, param): 1112 def GetArgument(self, param):
1115 return ('as_jint(' + param.name + ')' 1113 return ('as_jint(' + param.name + ')'
1116 if param.datatype == 'int' else param.name) 1114 if param.datatype == 'int' else param.name)
1117 1115
1118 def GetArgumentsInCall(self, params): 1116 def GetArgumentsInCall(self, params):
(...skipping 27 matching lines...) Expand all
1146 return_type = JavaDataTypeToC(called_by_native.return_type) 1144 return_type = JavaDataTypeToC(called_by_native.return_type)
1147 optional_error_return = JavaReturnValueToC(called_by_native.return_type) 1145 optional_error_return = JavaReturnValueToC(called_by_native.return_type)
1148 if optional_error_return: 1146 if optional_error_return:
1149 optional_error_return = ', ' + optional_error_return 1147 optional_error_return = ', ' + optional_error_return
1150 return_declaration = '' 1148 return_declaration = ''
1151 return_clause = '' 1149 return_clause = ''
1152 if return_type != 'void': 1150 if return_type != 'void':
1153 pre_call = ' ' + pre_call 1151 pre_call = ' ' + pre_call
1154 return_declaration = return_type + ' ret =' 1152 return_declaration = return_type + ' ret ='
1155 if re.match(RE_SCOPED_JNI_RETURN_TYPES, return_type): 1153 if re.match(RE_SCOPED_JNI_RETURN_TYPES, return_type):
1156 return_type = 'ScopedJavaLocalRef<' + return_type + '>' 1154 return_type = 'base::android::ScopedJavaLocalRef<' + return_type + '>'
1157 return_clause = 'return ' + return_type + '(env, ret);' 1155 return_clause = 'return ' + return_type + '(env, ret);'
1158 else: 1156 else:
1159 return_clause = 'return ret;' 1157 return_clause = 'return ret;'
1160 return { 1158 return {
1161 'JAVA_CLASS': java_class, 1159 'JAVA_CLASS': java_class,
1162 'RETURN_TYPE': return_type, 1160 'RETURN_TYPE': return_type,
1163 'OPTIONAL_ERROR_RETURN': optional_error_return, 1161 'OPTIONAL_ERROR_RETURN': optional_error_return,
1164 'RETURN_DECLARATION': return_declaration, 1162 'RETURN_DECLARATION': return_declaration,
1165 'RETURN_CLAUSE': return_clause, 1163 'RETURN_CLAUSE': return_clause,
1166 'FIRST_PARAM_IN_DECLARATION': first_param_in_declaration, 1164 'FIRST_PARAM_IN_DECLARATION': first_param_in_declaration,
(...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after
1523 GenerateJNIHeader(input_file, output_file, options) 1521 GenerateJNIHeader(input_file, output_file, options)
1524 1522
1525 if options.depfile: 1523 if options.depfile:
1526 build_utils.WriteDepfile( 1524 build_utils.WriteDepfile(
1527 options.depfile, 1525 options.depfile,
1528 build_utils.GetPythonDependencies()) 1526 build_utils.GetPythonDependencies())
1529 1527
1530 1528
1531 if __name__ == '__main__': 1529 if __name__ == '__main__':
1532 sys.exit(main(sys.argv)) 1530 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/sample_for_tests.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698