Chromium Code Reviews| Index: base/android/jni_generator/jni_generator.py |
| diff --git a/base/android/jni_generator/jni_generator.py b/base/android/jni_generator/jni_generator.py |
| index d2a7d0686cb2d4e14e9740f06c6d694279106b65..a60553b1b99cbfe7f45c5fecaa9234a193f25e2c 100755 |
| --- a/base/android/jni_generator/jni_generator.py |
| +++ b/base/android/jni_generator/jni_generator.py |
| @@ -76,6 +76,7 @@ class CalledByNative(object): |
| self.name = kwargs['name'] |
| self.params = kwargs['params'] |
| self.method_id_var_name = kwargs.get('method_id_var_name', None) |
| + self.signature = kwargs.get('signature') |
| self.is_constructor = kwargs.get('is_constructor', False) |
| self.env_call = GetEnvCall(self.is_constructor, self.static, |
| self.return_type) |
| @@ -141,6 +142,13 @@ class JniParams(object): |
| inner] |
| @staticmethod |
| + def ParseJavaPSignature(signature_line): |
| + prefix = 'Signature: ' |
| + if not prefix in signature_line: |
| + return None |
|
joth
2013/10/24 19:18:13
is missing the "Signature:" prefix an allowable si
bulach
2013/10/25 08:45:49
good point!
turns out there's a "-s" parameter to
|
| + return '"%s"' % signature_line[signature_line.index(prefix) + len(prefix):] |
| + |
| + @staticmethod |
| def JavaToJni(param): |
| """Converts a java param into a JNI signature type.""" |
| pod_param_map = { |
| @@ -466,7 +474,7 @@ class JNIFromJavaP(object): |
| re_method = re.compile('(?P<prefix>.*?)(?P<return_type>\S+?) (?P<name>\w+?)' |
| '\((?P<params>.*?)\)') |
| self.called_by_natives = [] |
| - for content in contents[2:]: |
| + for lineno, content in enumerate(contents[2:], 2): |
| match = re.match(re_method, content) |
| if not match: |
| continue |
| @@ -477,11 +485,12 @@ class JNIFromJavaP(object): |
| java_class_name='', |
| return_type=match.group('return_type').replace('.', '/'), |
| name=match.group('name'), |
| - params=JniParams.Parse(match.group('params').replace('.', '/')))] |
| + params=JniParams.Parse(match.group('params').replace('.', '/')), |
| + signature=JniParams.ParseJavaPSignature(contents[lineno + 1]))] |
| re_constructor = re.compile('.*? public ' + |
| self.fully_qualified_class.replace('/', '.') + |
| '\((?P<params>.*?)\)') |
| - for content in contents[2:]: |
| + for lineno, content in enumerate(contents[2:], 2): |
| match = re.match(re_constructor, content) |
| if not match: |
| continue |
| @@ -493,6 +502,7 @@ class JNIFromJavaP(object): |
| return_type=self.fully_qualified_class, |
| name='Constructor', |
| params=JniParams.Parse(match.group('params').replace('.', '/')), |
| + signature=JniParams.ParseJavaPSignature(contents[lineno + 1]), |
| is_constructor=True)] |
| self.called_by_natives = MangleCalledByNatives(self.called_by_natives) |
| self.inl_header_file_generator = InlHeaderFileGenerator( |
| @@ -931,14 +941,18 @@ jclass g_${JAVA_CLASS}_clazz = NULL;""") |
| if called_by_native.is_constructor: |
| jni_name = '<init>' |
| jni_return_type = 'void' |
| + if called_by_native.signature: |
| + signature = called_by_native.signature |
| + else: |
| + signature = JniParams.Signature(called_by_native.params, |
| + jni_return_type, |
| + True) |
| values = { |
| 'JAVA_CLASS': called_by_native.java_class_name or self.class_name, |
| 'JNI_NAME': jni_name, |
| 'METHOD_ID_VAR_NAME': called_by_native.method_id_var_name, |
| 'STATIC': 'STATIC' if called_by_native.static else 'INSTANCE', |
| - 'JNI_SIGNATURE': JniParams.Signature(called_by_native.params, |
| - jni_return_type, |
| - True) |
| + 'JNI_SIGNATURE': signature, |
| } |
| return template.substitute(values) |