diff options
author | bulach@chromium.org <bulach@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-28 11:15:06 +0000 |
---|---|---|
committer | bulach@chromium.org <bulach@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-28 11:15:06 +0000 |
commit | 43cbefc69c4484b1787701d2455174eb2d68f6f0 (patch) | |
tree | 3fa45f28703e00437d72d42c97cb27248269aea0 /base | |
parent | 55b3a2460f0477558a8d293a087f7654475a0401 (diff) | |
download | chromium_src-43cbefc69c4484b1787701d2455174eb2d68f6f0.zip chromium_src-43cbefc69c4484b1787701d2455174eb2d68f6f0.tar.gz chromium_src-43cbefc69c4484b1787701d2455174eb2d68f6f0.tar.bz2 |
Android: improves error message for Outer.Inner usage in JNI.
The JNI generator was wrongly identifying Outer.Inner.
Raise an exception with a clearer message.
BUG=
Review URL: https://codereview.chromium.org/214543002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@260103 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base')
-rwxr-xr-x | base/android/jni_generator/jni_generator.py | 7 | ||||
-rwxr-xr-x | base/android/jni_generator/jni_generator_tests.py | 17 |
2 files changed, 24 insertions, 0 deletions
diff --git a/base/android/jni_generator/jni_generator.py b/base/android/jni_generator/jni_generator.py index f5aab86..2733583 100755 --- a/base/android/jni_generator/jni_generator.py +++ b/base/android/jni_generator/jni_generator.py @@ -206,6 +206,7 @@ class JniParams(object): if '/' in param: # Coming from javap, use the fully qualified param directly. return prefix + 'L' + JniParams.RemapClassName(param) + ';' + for qualified_name in (object_param_list + [JniParams._fully_qualified_class] + JniParams._inner_classes): @@ -238,6 +239,12 @@ class JniParams(object): if qualified_name.endswith('/' + outer): return (prefix + JniParams.RemapClassName(qualified_name) + '$' + inner + ';') + raise SyntaxError('Inner class (%s) can not be ' + 'used directly by JNI. Please import the outer ' + 'class, probably:\n' + 'import %s.%s;' % + (param, JniParams._package.replace('/', '.'), + outer.replace('/', '.'))) # Type not found, falling back to same package as this class. return (prefix + 'L' + diff --git a/base/android/jni_generator/jni_generator_tests.py b/base/android/jni_generator/jni_generator_tests.py index 32fb4c6..61d76c8 100755 --- a/base/android/jni_generator/jni_generator_tests.py +++ b/base/android/jni_generator/jni_generator_tests.py @@ -994,5 +994,22 @@ class Foo { test_data, 'org/chromium/example/jni_generator/Test', options) self.assertGoldenTextEquals(jni_from_java.GetContent()) + def testOuterInnerRaises(self): + test_data = """ + package org.chromium.media; + + @CalledByNative + static int getCaptureFormatWidth(VideoCapture.CaptureFormat format) { + return format.getWidth(); + } + """ + def willRaise(): + jni_generator.JNIFromJavaSource( + test_data, + 'org/chromium/media/VideoCaptureFactory', + TestOptions()) + self.assertRaises(SyntaxError, willRaise) + + if __name__ == '__main__': unittest.main() |