Index: base/android/jni_generator/jni_generator_tests.py |
diff --git a/base/android/jni_generator/jni_generator_tests.py b/base/android/jni_generator/jni_generator_tests.py |
index f008f394cec95c87d4c6ab5df9ecd036f09504ab..3ce58f1d95a6cde7b26010edad2a9a9b5fce6408 100755 |
--- a/base/android/jni_generator/jni_generator_tests.py |
+++ b/base/android/jni_generator/jni_generator_tests.py |
@@ -1566,6 +1566,85 @@ import org.chromium.base.BuildInfo; |
datatype='java/lang/String'),], |
'java/io/InputStream')) |
+ def testFromJavaPGenerics(self): |
+ contents = """ |
+public abstract class java.util.HashSet<T> extends java.util.AbstractSet<E> |
+ implements java.util.Set<E>, java.lang.Cloneable, java.io.Serializable { |
+ public void dummy(); |
+} |
+""" |
+ jni_from_javap = jni_generator.JNIFromJavaP(contents.split('\n'), None) |
+ self.assertEquals(1, len(jni_from_javap.called_by_natives)) |
+ golden_content = """\ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+// This file is autogenerated by |
+// base/android/jni_generator/jni_generator_tests.py |
+// For |
+// java/util/HashSet |
+ |
+#ifndef java_util_HashSet_JNI |
+#define java_util_HashSet_JNI |
+ |
+#include <jni.h> |
+ |
+#include "base/android/jni_android.h" |
+#include "base/android/scoped_java_ref.h" |
+#include "base/basictypes.h" |
+#include "base/logging.h" |
+ |
+using base::android::ScopedJavaLocalRef; |
+ |
+// Step 1: forward declarations. |
+namespace { |
+const char kHashSetClassPath[] = "java/util/HashSet"; |
+// Leaking this jclass as we cannot use LazyInstance from some threads. |
+jclass g_HashSet_clazz = NULL; |
+} // namespace |
+ |
+namespace JNI_HashSet { |
+ |
+// Step 2: method stubs. |
+ |
+static base::subtle::AtomicWord g_HashSet_dummy = 0; |
+static void Java_HashSet_dummy(JNIEnv* env, jobject obj) __attribute__ |
+ ((unused)); |
+static void Java_HashSet_dummy(JNIEnv* env, jobject obj) { |
+ /* Must call RegisterNativesImpl() */ |
+ DCHECK(g_HashSet_clazz); |
+ jmethodID method_id = |
+ base::android::MethodID::LazyGet< |
+ base::android::MethodID::TYPE_INSTANCE>( |
+ env, g_HashSet_clazz, |
+ "dummy", |
+ |
+"(" |
+")" |
+"V", |
+ &g_HashSet_dummy); |
+ |
+ env->CallVoidMethod(obj, |
+ method_id); |
+ base::android::CheckException(env); |
+ |
+} |
+ |
+// Step 3: RegisterNatives. |
+ |
+static bool RegisterNativesImpl(JNIEnv* env) { |
+ |
+ g_HashSet_clazz = reinterpret_cast<jclass>(env->NewGlobalRef( |
+ base::android::GetClass(env, kHashSetClassPath).obj())); |
+ return true; |
+} |
+} // namespace JNI_HashSet |
+ |
+#endif // java_util_HashSet_JNI |
+""" |
+ self.assertTextEquals(golden_content, jni_from_javap.GetContent()) |
+ |
def testFromJavaP(self): |
contents = """ |
public abstract class java.io.InputStream extends java.lang.Object |