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 ec695db4bbc58becd6f8d34666d28f2d9c3c6fda..81bcfbb4c57d475b48ab11010a923096865eee3c 100755 |
--- a/base/android/jni_generator/jni_generator.py |
+++ b/base/android/jni_generator/jni_generator.py |
@@ -163,6 +163,9 @@ class JniParams(object): |
@staticmethod |
def ExtractImportsAndInnerClasses(contents): |
+ if not JniParams._package: |
+ raise RuntimeError('SetFullyQualifiedClass must be called before ' |
+ 'ExtractImportsAndInnerClasses') |
contents = contents.replace('\n', '') |
re_import = re.compile(r'import.*?(?P<class>\S*?);') |
for match in re.finditer(re_import, contents): |
@@ -175,6 +178,19 @@ class JniParams(object): |
JniParams._inner_classes += [JniParams._fully_qualified_class + '$' + |
inner] |
+ re_additional_imports = re.compile( |
+ r'@JNIAdditionalImport\((?P<class_name>\w+?)\.class\)') |
+ for match in re.finditer(re_additional_imports, contents): |
+ class_name = match.group('class_name') |
+ if '.' in class_name: |
+ raise SyntaxError('*.class cannot be used in @JNIAdditionalImport. ' |
+ 'Only import unqualified outer classes.' % class_name) |
+ new_import = 'L%s/%s' % (JniParams._package, class_name) |
+ if new_import in JniParams._imports: |
+ raise SyntaxError('Do not use JNIAdditionalImport on an already ' |
+ 'imported class: %s' % (new_import.replace('/', '.'))) |
+ JniParams._imports += [new_import] |
+ |
@staticmethod |
def ParseJavaPSignature(signature_line): |
prefix = 'Signature: ' |