Commit dbb091ac authored by bulach@chromium.org's avatar bulach@chromium.org

Android: fixes jni_generator for @CalledByNative with generics.

While at it, converge naming convention on the matching group.

BUG=
TEST=base/android/jni_generator_tests.py


Review URL: https://chromiumcodereview.appspot.com/12594021

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@190576 0039d316-1c4b-4281-b951-d872f2087c98
parent fe59ad27
...@@ -264,14 +264,14 @@ def ExtractNatives(contents): ...@@ -264,14 +264,14 @@ def ExtractNatives(contents):
'\(\"(?P<native_class_name>.*?)\"\))?\s*' '\(\"(?P<native_class_name>.*?)\"\))?\s*'
'(@NativeCall(\(\"(?P<java_class_name>.*?)\"\)))?\s*' '(@NativeCall(\(\"(?P<java_class_name>.*?)\"\)))?\s*'
'(?P<qualifiers>\w+\s\w+|\w+|\s+)\s*?native ' '(?P<qualifiers>\w+\s\w+|\w+|\s+)\s*?native '
'(?P<return>\S*?) ' '(?P<return_type>\S*?) '
'(?P<name>\w+?)\((?P<params>.*?)\);') '(?P<name>\w+?)\((?P<params>.*?)\);')
for match in re.finditer(re_native, contents): for match in re.finditer(re_native, contents):
native = NativeMethod( native = NativeMethod(
static='static' in match.group('qualifiers'), static='static' in match.group('qualifiers'),
java_class_name=match.group('java_class_name'), java_class_name=match.group('java_class_name'),
native_class_name=match.group('native_class_name'), native_class_name=match.group('native_class_name'),
return_type=match.group('return'), return_type=match.group('return_type'),
name=match.group('name').replace('native', ''), name=match.group('name').replace('native', ''),
params=JniParams.Parse(match.group('params'))) params=JniParams.Parse(match.group('params')))
natives += [native] natives += [native]
...@@ -381,7 +381,7 @@ RE_SCOPED_JNI_RETURN_TYPES = re.compile('jobject|jclass|jstring|.*Array') ...@@ -381,7 +381,7 @@ RE_SCOPED_JNI_RETURN_TYPES = re.compile('jobject|jclass|jstring|.*Array')
RE_CALLED_BY_NATIVE = re.compile( RE_CALLED_BY_NATIVE = re.compile(
'@CalledByNative(?P<Unchecked>(Unchecked)*?)(?:\("(?P<annotation>.*)"\))?' '@CalledByNative(?P<Unchecked>(Unchecked)*?)(?:\("(?P<annotation>.*)"\))?'
'\s+(?P<prefix>[\w ]*?)' '\s+(?P<prefix>[\w ]*?)'
'\s*(?P<return_type>[\w\.]+(\[\])*?)' '\s*(?P<return_type>\S+?)'
'\s+(?P<name>\w+)' '\s+(?P<name>\w+)'
'\s*\((?P<params>[^\)]*)\)') '\s*\((?P<params>[^\)]*)\)')
......
...@@ -723,6 +723,7 @@ static bool RegisterNativesImpl(JNIEnv* env) { ...@@ -723,6 +723,7 @@ static bool RegisterNativesImpl(JNIEnv* env) {
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.view.View; import android.view.View;
import java.io.InputStream; import java.io.InputStream;
import java.util.List;
class InnerClass {} class InnerClass {}
...@@ -799,6 +800,9 @@ static bool RegisterNativesImpl(JNIEnv* env) { ...@@ -799,6 +800,9 @@ static bool RegisterNativesImpl(JNIEnv* env) {
@CalledByNative @CalledByNative
public Bitmap.CompressFormat getCompressFormat(); public Bitmap.CompressFormat getCompressFormat();
@CalledByNative
public List<Bitmap.CompressFormat> getCompressFormatList();
""" """
jni_generator.JniParams.SetFullyQualifiedClass('org/chromium/Foo') jni_generator.JniParams.SetFullyQualifiedClass('org/chromium/Foo')
jni_generator.JniParams.ExtractImportsAndInnerClasses(test_data) jni_generator.JniParams.ExtractImportsAndInnerClasses(test_data)
...@@ -1006,6 +1010,17 @@ static bool RegisterNativesImpl(JNIEnv* env) { ...@@ -1006,6 +1010,17 @@ static bool RegisterNativesImpl(JNIEnv* env) {
env_call=('Void', ''), env_call=('Void', ''),
unchecked=False, unchecked=False,
), ),
CalledByNative(
return_type='List<Bitmap.CompressFormat>',
system_class=False,
static=False,
name='getCompressFormatList',
method_id_var_name='getCompressFormatList',
java_class_name='',
params=[],
env_call=('Void', ''),
unchecked=False,
),
] ]
self.assertListEquals(golden_called_by_natives, called_by_natives) self.assertListEquals(golden_called_by_natives, called_by_natives)
h = jni_generator.InlHeaderFileGenerator('', 'org/chromium/TestJni', h = jni_generator.InlHeaderFileGenerator('', 'org/chromium/TestJni',
...@@ -1054,7 +1069,7 @@ static ScopedJavaLocalRef<jobject> Java_TestJni_showConfirmInfoBar(JNIEnv* env, ...@@ -1054,7 +1069,7 @@ static ScopedJavaLocalRef<jobject> Java_TestJni_showConfirmInfoBar(JNIEnv* env,
/* Must call RegisterNativesImpl() */ /* Must call RegisterNativesImpl() */
DCHECK(g_TestJni_clazz); DCHECK(g_TestJni_clazz);
jmethodID method_id = jmethodID method_id =
base::android::MethodID::LazyGet< base::android::MethodID::LazyGet<
base::android::MethodID::TYPE_INSTANCE>( base::android::MethodID::TYPE_INSTANCE>(
env, g_TestJni_clazz, env, g_TestJni_clazz,
"showConfirmInfoBar", "showConfirmInfoBar",
...@@ -1085,7 +1100,7 @@ static ScopedJavaLocalRef<jobject> Java_TestJni_showAutoLoginInfoBar(JNIEnv* ...@@ -1085,7 +1100,7 @@ static ScopedJavaLocalRef<jobject> Java_TestJni_showAutoLoginInfoBar(JNIEnv*
/* Must call RegisterNativesImpl() */ /* Must call RegisterNativesImpl() */
DCHECK(g_TestJni_clazz); DCHECK(g_TestJni_clazz);
jmethodID method_id = jmethodID method_id =
base::android::MethodID::LazyGet< base::android::MethodID::LazyGet<
base::android::MethodID::TYPE_INSTANCE>( base::android::MethodID::TYPE_INSTANCE>(
env, g_TestJni_clazz, env, g_TestJni_clazz,
"showAutoLoginInfoBar", "showAutoLoginInfoBar",
...@@ -1111,7 +1126,7 @@ static void Java_InfoBar_dismiss(JNIEnv* env, jobject obj) { ...@@ -1111,7 +1126,7 @@ static void Java_InfoBar_dismiss(JNIEnv* env, jobject obj) {
/* Must call RegisterNativesImpl() */ /* Must call RegisterNativesImpl() */
DCHECK(g_InfoBar_clazz); DCHECK(g_InfoBar_clazz);
jmethodID method_id = jmethodID method_id =
base::android::MethodID::LazyGet< base::android::MethodID::LazyGet<
base::android::MethodID::TYPE_INSTANCE>( base::android::MethodID::TYPE_INSTANCE>(
env, g_InfoBar_clazz, env, g_InfoBar_clazz,
"dismiss", "dismiss",
...@@ -1135,7 +1150,7 @@ static jboolean Java_TestJni_shouldShowAutoLogin(JNIEnv* env, jobject view, ...@@ -1135,7 +1150,7 @@ static jboolean Java_TestJni_shouldShowAutoLogin(JNIEnv* env, jobject view,
/* Must call RegisterNativesImpl() */ /* Must call RegisterNativesImpl() */
DCHECK(g_TestJni_clazz); DCHECK(g_TestJni_clazz);
jmethodID method_id = jmethodID method_id =
base::android::MethodID::LazyGet< base::android::MethodID::LazyGet<
base::android::MethodID::TYPE_STATIC>( base::android::MethodID::TYPE_STATIC>(
env, g_TestJni_clazz, env, g_TestJni_clazz,
"shouldShowAutoLogin", "shouldShowAutoLogin",
...@@ -1162,7 +1177,7 @@ static ScopedJavaLocalRef<jobject> Java_TestJni_openUrl(JNIEnv* env, jstring ...@@ -1162,7 +1177,7 @@ static ScopedJavaLocalRef<jobject> Java_TestJni_openUrl(JNIEnv* env, jstring
/* Must call RegisterNativesImpl() */ /* Must call RegisterNativesImpl() */
DCHECK(g_TestJni_clazz); DCHECK(g_TestJni_clazz);
jmethodID method_id = jmethodID method_id =
base::android::MethodID::LazyGet< base::android::MethodID::LazyGet<
base::android::MethodID::TYPE_STATIC>( base::android::MethodID::TYPE_STATIC>(
env, g_TestJni_clazz, env, g_TestJni_clazz,
"openUrl", "openUrl",
...@@ -1190,7 +1205,7 @@ static void Java_TestJni_activateHardwareAcceleration(JNIEnv* env, jobject obj, ...@@ -1190,7 +1205,7 @@ static void Java_TestJni_activateHardwareAcceleration(JNIEnv* env, jobject obj,
/* Must call RegisterNativesImpl() */ /* Must call RegisterNativesImpl() */
DCHECK(g_TestJni_clazz); DCHECK(g_TestJni_clazz);
jmethodID method_id = jmethodID method_id =
base::android::MethodID::LazyGet< base::android::MethodID::LazyGet<
base::android::MethodID::TYPE_INSTANCE>( base::android::MethodID::TYPE_INSTANCE>(
env, g_TestJni_clazz, env, g_TestJni_clazz,
"activateHardwareAcceleration", "activateHardwareAcceleration",
...@@ -1216,7 +1231,7 @@ static void Java_TestJni_uncheckedCall(JNIEnv* env, jobject obj, jint iParam) { ...@@ -1216,7 +1231,7 @@ static void Java_TestJni_uncheckedCall(JNIEnv* env, jobject obj, jint iParam) {
/* Must call RegisterNativesImpl() */ /* Must call RegisterNativesImpl() */
DCHECK(g_TestJni_clazz); DCHECK(g_TestJni_clazz);
jmethodID method_id = jmethodID method_id =
base::android::MethodID::LazyGet< base::android::MethodID::LazyGet<
base::android::MethodID::TYPE_INSTANCE>( base::android::MethodID::TYPE_INSTANCE>(
env, g_TestJni_clazz, env, g_TestJni_clazz,
"uncheckedCall", "uncheckedCall",
...@@ -1418,7 +1433,7 @@ static ScopedJavaLocalRef<jobjectArray> Java_TestJni_returnObjectArray(JNIEnv* ...@@ -1418,7 +1433,7 @@ static ScopedJavaLocalRef<jobjectArray> Java_TestJni_returnObjectArray(JNIEnv*
static base::subtle::AtomicWord g_TestJni_returnArrayOfByteArray = 0; static base::subtle::AtomicWord g_TestJni_returnArrayOfByteArray = 0;
static ScopedJavaLocalRef<jobjectArray> static ScopedJavaLocalRef<jobjectArray>
Java_TestJni_returnArrayOfByteArray(JNIEnv* env, jobject obj) { Java_TestJni_returnArrayOfByteArray(JNIEnv* env, jobject obj) {
/* Must call RegisterNativesImpl() */ /* Must call RegisterNativesImpl() */
DCHECK(g_TestJni_clazz); DCHECK(g_TestJni_clazz);
jmethodID method_id = jmethodID method_id =
...@@ -1462,6 +1477,29 @@ static ScopedJavaLocalRef<jobject> Java_TestJni_getCompressFormat(JNIEnv* env, ...@@ -1462,6 +1477,29 @@ static ScopedJavaLocalRef<jobject> Java_TestJni_getCompressFormat(JNIEnv* env,
return ScopedJavaLocalRef<jobject>(env, ret); return ScopedJavaLocalRef<jobject>(env, ret);
} }
static base::subtle::AtomicWord g_TestJni_getCompressFormatList = 0;
static ScopedJavaLocalRef<jobject> Java_TestJni_getCompressFormatList(JNIEnv*
env, jobject obj) {
/* Must call RegisterNativesImpl() */
DCHECK(g_TestJni_clazz);
jmethodID method_id =
base::android::MethodID::LazyGet<
base::android::MethodID::TYPE_INSTANCE>(
env, g_TestJni_clazz,
"getCompressFormatList",
"("
")"
"Ljava/util/List;",
&g_TestJni_getCompressFormatList);
jobject ret =
env->CallObjectMethod(obj,
method_id);
base::android::CheckException(env);
return ScopedJavaLocalRef<jobject>(env, ret);
}
// Step 3: RegisterNatives. // Step 3: RegisterNatives.
static bool RegisterNativesImpl(JNIEnv* env) { static bool RegisterNativesImpl(JNIEnv* env) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment