summaryrefslogtreecommitdiffstats
path: root/base
diff options
context:
space:
mode:
authorbulach@chromium.org <bulach@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-28 11:15:06 +0000
committerbulach@chromium.org <bulach@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-28 11:15:06 +0000
commit43cbefc69c4484b1787701d2455174eb2d68f6f0 (patch)
tree3fa45f28703e00437d72d42c97cb27248269aea0 /base
parent55b3a2460f0477558a8d293a087f7654475a0401 (diff)
downloadchromium_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-xbase/android/jni_generator/jni_generator.py7
-rwxr-xr-xbase/android/jni_generator/jni_generator_tests.py17
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()