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 341 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
352 raise SyntaxError('Unable to find "package" line in %s' % java_file_name) | 352 raise SyntaxError('Unable to find "package" line in %s' % java_file_name) |
353 return (matches[0].replace('.', '/') + '/' + | 353 return (matches[0].replace('.', '/') + '/' + |
354 os.path.splitext(os.path.basename(java_file_name))[0]) | 354 os.path.splitext(os.path.basename(java_file_name))[0]) |
355 | 355 |
356 | 356 |
357 def ExtractNatives(contents, ptr_type): | 357 def ExtractNatives(contents, ptr_type): |
358 """Returns a list of dict containing information about a native method.""" | 358 """Returns a list of dict containing information about a native method.""" |
359 contents = contents.replace('\n', '') | 359 contents = contents.replace('\n', '') |
360 natives = [] | 360 natives = [] |
361 re_native = re.compile(r'(@NativeClassQualifiedName' | 361 re_native = re.compile(r'(@NativeClassQualifiedName' |
362 '\(\"(?P<native_class_name>.*?)\"\))?\s*' | 362 '\(\"(?P<native_class_name>.*?)\"\)\s+)?' |
363 '(@NativeCall(\(\"(?P<java_class_name>.*?)\"\)))?\s*' | 363 '(@NativeCall(\(\"(?P<java_class_name>.*?)\"\))\s+)?' |
364 '(?P<qualifiers>\w+\s\w+|\w+|\s+)\s*?native ' | 364 '(?P<qualifiers>\w+\s\w+|\w+|\s+)\s*native ' |
365 '(?P<return_type>\S*?) ' | 365 '(?P<return_type>\S*) ' |
366 '(?P<name>native\w+?)\((?P<params>.*?)\);') | 366 '(?P<name>native\w+)\((?P<params>.*?)\);') |
367 for match in re.finditer(re_native, contents): | 367 for match in re.finditer(re_native, contents): |
368 native = NativeMethod( | 368 native = NativeMethod( |
369 static='static' in match.group('qualifiers'), | 369 static='static' in match.group('qualifiers'), |
370 java_class_name=match.group('java_class_name'), | 370 java_class_name=match.group('java_class_name'), |
371 native_class_name=match.group('native_class_name'), | 371 native_class_name=match.group('native_class_name'), |
372 return_type=match.group('return_type'), | 372 return_type=match.group('return_type'), |
373 name=match.group('name').replace('native', ''), | 373 name=match.group('name').replace('native', ''), |
374 params=JniParams.Parse(match.group('params')), | 374 params=JniParams.Parse(match.group('params')), |
375 ptr_type=ptr_type) | 375 ptr_type=ptr_type) |
376 natives += [native] | 376 natives += [native] |
(...skipping 1009 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1386 root_name = os.path.splitext(os.path.basename(input_file))[0] | 1386 root_name = os.path.splitext(os.path.basename(input_file))[0] |
1387 output_file = os.path.join(options.output_dir, root_name) + '_jni.h' | 1387 output_file = os.path.join(options.output_dir, root_name) + '_jni.h' |
1388 if options.jarjar: | 1388 if options.jarjar: |
1389 with open(options.jarjar) as f: | 1389 with open(options.jarjar) as f: |
1390 JniParams.SetJarJarMappings(f.read()) | 1390 JniParams.SetJarJarMappings(f.read()) |
1391 GenerateJNIHeader(input_file, output_file, options) | 1391 GenerateJNIHeader(input_file, output_file, options) |
1392 | 1392 |
1393 | 1393 |
1394 if __name__ == '__main__': | 1394 if __name__ == '__main__': |
1395 sys.exit(main(sys.argv)) | 1395 sys.exit(main(sys.argv)) |
OLD | NEW |