Android: Delete legacy jni_generator support for non-proxy natives
We have long switched to "proxy natives", and places that use raw
"native" jni calls do so because they do not want to use jni_generator.
This also removes @JniIgnoreNatives annotation, since it existed only to
allow files to opt-out of JNI generation.
Bug: 1407278
Change-Id: Id3bc14ebcf326e9cb9dc864fae2512d472a25c67
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4167416
Commit-Queue: Andrew Grieve <agrieve@chromium.org>
Owners-Override: Andrew Grieve <agrieve@chromium.org>
Reviewed-by: Sam Maier <smaier@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1093873}
diff --git a/android_webview/glue/BUILD.gn b/android_webview/glue/BUILD.gn
index 8d42762..cd83246 100644
--- a/android_webview/glue/BUILD.gn
+++ b/android_webview/glue/BUILD.gn
@@ -16,7 +16,6 @@
"//android_webview/support_library/boundary_interfaces:boundary_interface_java",
"//android_webview/support_library/callback:callback_java",
"//base:base_java",
- "//base:jni_java",
"//build/android:build_java",
"//components/content_capture/android:java",
"//components/embedder_support/android:application_java",
diff --git a/android_webview/glue/java/src/com/android/webview/chromium/DrawFunctor.java b/android_webview/glue/java/src/com/android/webview/chromium/DrawFunctor.java
index 937e875..65a7c55 100644
--- a/android_webview/glue/java/src/com/android/webview/chromium/DrawFunctor.java
+++ b/android_webview/glue/java/src/com/android/webview/chromium/DrawFunctor.java
@@ -4,9 +4,6 @@
package com.android.webview.chromium;
-import org.chromium.base.annotations.JniIgnoreNatives;
-
-@JniIgnoreNatives
class DrawFunctor {
public static long getDrawFnFunctionTable() {
return nativeGetFunctionTable();
diff --git a/android_webview/glue/java/src/com/android/webview/chromium/DrawGLFunctor.java b/android_webview/glue/java/src/com/android/webview/chromium/DrawGLFunctor.java
index 01086cb6..48a6013 100644
--- a/android_webview/glue/java/src/com/android/webview/chromium/DrawGLFunctor.java
+++ b/android_webview/glue/java/src/com/android/webview/chromium/DrawGLFunctor.java
@@ -9,7 +9,6 @@
import android.webkit.WebViewDelegate;
import org.chromium.android_webview.AwContents;
-import org.chromium.base.annotations.JniIgnoreNatives;
/**
* Simple Java abstraction and wrapper for the native DrawGLFunctor flow.
@@ -17,7 +16,6 @@
* and then drawn and detached from the view tree any number of times (using requestDrawGL and
* detach respectively).
*/
-@JniIgnoreNatives
class DrawGLFunctor implements AwContents.NativeDrawGLFunctor {
private static final String TAG = DrawGLFunctor.class.getSimpleName();
diff --git a/android_webview/glue/java/src/com/android/webview/chromium/GraphicsUtils.java b/android_webview/glue/java/src/com/android/webview/chromium/GraphicsUtils.java
index 7de7c96..4e20b5e7 100644
--- a/android_webview/glue/java/src/com/android/webview/chromium/GraphicsUtils.java
+++ b/android_webview/glue/java/src/com/android/webview/chromium/GraphicsUtils.java
@@ -4,9 +4,6 @@
package com.android.webview.chromium;
-import org.chromium.base.annotations.JniIgnoreNatives;
-
-@JniIgnoreNatives
abstract class GraphicsUtils {
public static long getDrawSWFunctionTable() {
return nativeGetDrawSWFunctionTable();
diff --git a/base/BUILD.gn b/base/BUILD.gn
index f95986f..585ed71b 100644
--- a/base/BUILD.gn
+++ b/base/BUILD.gn
@@ -4120,7 +4120,6 @@
"android/java/src/org/chromium/base/annotations/CalledByNativeUnchecked.java",
"android/java/src/org/chromium/base/annotations/JNIAdditionalImport.java",
"android/java/src/org/chromium/base/annotations/JNINamespace.java",
- "android/java/src/org/chromium/base/annotations/JniIgnoreNatives.java",
"android/java/src/org/chromium/base/annotations/NativeClassQualifiedName.java",
"android/java/src/org/chromium/base/annotations/NativeMethods.java",
]
diff --git a/base/android/java/src/org/chromium/base/annotations/JniIgnoreNatives.java b/base/android/java/src/org/chromium/base/annotations/JniIgnoreNatives.java
deleted file mode 100644
index 0105791a..0000000
--- a/base/android/java/src/org/chromium/base/annotations/JniIgnoreNatives.java
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright 2018 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-package org.chromium.base.annotations;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Causes generate_jni_registration() to skip native methods in a file.
- */
-@Target(ElementType.TYPE)
-@Retention(RetentionPolicy.SOURCE)
-public @interface JniIgnoreNatives {}
diff --git a/base/android/java/src/org/chromium/base/library_loader/Linker.java b/base/android/java/src/org/chromium/base/library_loader/Linker.java
index b503843..1d23797 100644
--- a/base/android/java/src/org/chromium/base/library_loader/Linker.java
+++ b/base/android/java/src/org/chromium/base/library_loader/Linker.java
@@ -18,7 +18,6 @@
import org.chromium.base.StreamUtil;
import org.chromium.base.TimeUtils.UptimeMillisTimer;
import org.chromium.base.annotations.AccessedByNative;
-import org.chromium.base.annotations.JniIgnoreNatives;
import org.chromium.base.metrics.RecordHistogram;
import java.io.BufferedReader;
@@ -73,7 +72,6 @@
* available to then send the Bundle to Linkers in other processes, consumed
* by takeSharedRelrosFromBundle().
*/
-@JniIgnoreNatives
class Linker {
private static final String TAG = "Linker";
@@ -769,7 +767,6 @@
* well.
*/
@VisibleForTesting(otherwise = VisibleForTesting.PROTECTED)
- @JniIgnoreNatives
static class LibInfo implements Parcelable {
private static final String EXTRA_LINKER_LIB_INFO = "libinfo";
@@ -870,8 +867,7 @@
public int mRelroFd = -1; // shared RELRO file descriptor, or -1
}
- // Intentionally omitting @NativeMethods because generation of the stubs it requires (as
- // GEN_JNI.java) is disabled by the @JniIgnoreNatives.
+ // Intentionally omitting @NativeMethods because this class does manual JNI.
interface Natives {
/**
* Reserves a memory region (=mapping) of sufficient size to hold the loaded library before
diff --git a/base/android/java/src/org/chromium/base/library_loader/LinkerJni.java b/base/android/java/src/org/chromium/base/library_loader/LinkerJni.java
index c614e2e..80abb1e 100644
--- a/base/android/java/src/org/chromium/base/library_loader/LinkerJni.java
+++ b/base/android/java/src/org/chromium/base/library_loader/LinkerJni.java
@@ -7,7 +7,6 @@
import androidx.annotation.NonNull;
import org.chromium.base.annotations.CalledByNative;
-import org.chromium.base.annotations.JniIgnoreNatives;
/**
* Mockable stub for all native methods in Linker.
@@ -15,11 +14,9 @@
* This functionality is usually generated from @NativeMethods, which cannot be used for the
* auxiliary native library used by classes in Linker and other classes in this package.
*
- * Generation of JNI stubs for classes in this package is omitted via @JniIgnoreNatives because
- * otherwise the generated native parts would have been linked into lib{,mono}chrome.so instead of
- * lib$LINKER_JNI_LIBRARY.so, where they are needed.
+ * Does not use jni_generator because otherwise the generated native parts would have been
+ * linked into libmonochrome.so instead of lib$LINKER_JNI_LIBRARY.so, where they are needed.
*/
-@JniIgnoreNatives
class LinkerJni implements Linker.Natives {
@Override
public void findMemoryRegionAtRandomAddress(@NonNull Linker.LibInfo libInfo) {
diff --git a/base/android/jni_generator/README.md b/base/android/jni_generator/README.md
index b254205d..1cdd208 100644
--- a/base/android/jni_generator/README.md
+++ b/base/android/jni_generator/README.md
@@ -128,13 +128,6 @@
void MyClass::NonStatic(JNIEnv* env) { ... }
```
-**Using the 'native' keyword**
-
-- The binding generator also looks for `native` JNI method declarations and
- generates stubs for them. This used to be the norm, but is now obsolete.
-- If you have native methods that you don't want stubs generated for, you should
- add @JniIgnoreNatives to the class.
-
#### Testing Mockable Natives
1. Add the `JniMocker` rule to your test.
diff --git a/base/android/jni_generator/golden/testMultipleJNIAdditionalImport.golden b/base/android/jni_generator/golden/testMultipleJNIAdditionalImport.golden
index 5398b32..a2570c71 100644
--- a/base/android/jni_generator/golden/testMultipleJNIAdditionalImport.golden
+++ b/base/android/jni_generator/golden/testMultipleJNIAdditionalImport.golden
@@ -35,18 +35,6 @@
// Step 3: Method stubs.
-static void JNI_Foo_DoSomething(JNIEnv* env, const base::android::JavaParamRef<jobject>& callback1,
- const base::android::JavaParamRef<jobject>& callback2);
-
-JNI_GENERATOR_EXPORT void Java_org_chromium_foo_Foo_nativeDoSomething(
- JNIEnv* env,
- jclass jcaller,
- jobject callback1,
- jobject callback2) {
- return JNI_Foo_DoSomething(env, base::android::JavaParamRef<jobject>(env, callback1),
- base::android::JavaParamRef<jobject>(env, callback2));
-}
-
static std::atomic<jmethodID> g_org_chromium_foo_Foo_calledByNative(nullptr);
static void Java_Foo_calledByNative(JNIEnv* env, const base::android::JavaRef<jobject>& callback1,
diff --git a/base/android/jni_generator/golden/testProxyNativesWithNatives.golden b/base/android/jni_generator/golden/testProxyNativesWithNatives.golden
index 2c4cecd4..a15fd819 100644
--- a/base/android/jni_generator/golden/testProxyNativesWithNatives.golden
+++ b/base/android/jni_generator/golden/testProxyNativesWithNatives.golden
@@ -18,42 +18,11 @@
// Step 1: Forward declarations.
-JNI_REGISTRATION_EXPORT extern const char kClassPath_org_chromium_foo_Foo[];
-const char kClassPath_org_chromium_foo_Foo[] = "org/chromium/foo/Foo";
-// Leaking this jclass as we cannot use LazyInstance from some threads.
-JNI_REGISTRATION_EXPORT std::atomic<jclass> g_org_chromium_foo_Foo_clazz(nullptr);
-#ifndef org_chromium_foo_Foo_clazz_defined
-#define org_chromium_foo_Foo_clazz_defined
-inline jclass org_chromium_foo_Foo_clazz(JNIEnv* env) {
- return base::android::LazyGetClass(env, kClassPath_org_chromium_foo_Foo,
- &g_org_chromium_foo_Foo_clazz);
-}
-#endif
-
// Step 2: Constants (optional).
// Step 3: Method stubs.
-JNI_GENERATOR_EXPORT void Java_org_chromium_foo_Foo_nativeInstanceMethod(
- JNIEnv* env,
- jobject jcaller,
- jlong nativeInstance) {
- TRACE_EVENT0("jni", "Instance::InstanceMethod");
- Instance* native = reinterpret_cast<Instance*>(nativeInstance);
- CHECK_NATIVE_PTR(env, jcaller, native, "InstanceMethod");
- return native->InstanceMethod(env, base::android::JavaParamRef<jobject>(env, jcaller));
-}
-
-static void JNI_Foo_StaticMethod(JNIEnv* env);
-
-JNI_GENERATOR_EXPORT void Java_org_chromium_foo_Foo_nativeStaticMethod(
- JNIEnv* env,
- jclass jcaller) {
- TRACE_EVENT0("jni", "JNI_Foo_StaticMethod");
- return JNI_Foo_StaticMethod(env);
-}
-
static void JNI_Foo_Foo(JNIEnv* env);
JNI_GENERATOR_EXPORT void Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1foo_1Foo_1foo(
diff --git a/base/android/jni_generator/golden/testSingleJNIAdditionalImport.golden b/base/android/jni_generator/golden/testSingleJNIAdditionalImport.golden
index bfcd98c..82cc21e 100644
--- a/base/android/jni_generator/golden/testSingleJNIAdditionalImport.golden
+++ b/base/android/jni_generator/golden/testSingleJNIAdditionalImport.golden
@@ -35,15 +35,6 @@
// Step 3: Method stubs.
-static void JNI_Foo_DoSomething(JNIEnv* env, const base::android::JavaParamRef<jobject>& callback);
-
-JNI_GENERATOR_EXPORT void Java_org_chromium_foo_Foo_nativeDoSomething(
- JNIEnv* env,
- jclass jcaller,
- jobject callback) {
- return JNI_Foo_DoSomething(env, base::android::JavaParamRef<jobject>(env, callback));
-}
-
static std::atomic<jmethodID> g_org_chromium_foo_Foo_calledByNative(nullptr);
static void Java_Foo_calledByNative(JNIEnv* env, const base::android::JavaRef<jobject>& callback) {
diff --git a/base/android/jni_generator/jni_generator.py b/base/android/jni_generator/jni_generator.py
index 6f3e4321..e765c9a 100755
--- a/base/android/jni_generator/jni_generator.py
+++ b/base/android/jni_generator/jni_generator.py
@@ -39,25 +39,14 @@
r'//.*?$|/\*.*?\*/|\'(?:\\.|[^\\\'])*\'|"(?:\\.|[^\\"])*"',
re.DOTALL | re.MULTILINE)
-_EXTRACT_NATIVES_REGEX = re.compile(
- r'(@NativeClassQualifiedName'
- r'\(\"(?P<native_class_name>.*?)\"\)\s+)?'
- r'(@NativeCall(\(\"(?P<java_class_name>.*?)\"\))\s+)?'
- r'(?P<qualifiers>\w+\s\w+|\w+|\s+)\s*native '
- r'(?P<return_type>\S*) '
- r'(?P<name>native\w+)\((?P<params>.*?)\);')
-
_MAIN_DEX_REGEX = re.compile(r'^\s*(?:@(?:\w+\.)*\w+\s+)*@MainDex\b',
re.MULTILINE)
-# Matches on method declarations unlike _EXTRACT_NATIVES_REGEX
-# doesn't require name to be prefixed with native, and does not
-# require a native qualifier.
_EXTRACT_METHODS_REGEX = re.compile(
r'(@NativeClassQualifiedName'
r'\(\"(?P<native_class_name>.*?)\"\)\s*)?'
r'(?P<qualifiers>'
- r'((public|private|static|final|abstract|protected|native)\s*)*)\s+'
+ r'((public|private|static|final|abstract|protected)\s*)*)\s+'
r'(?P<return_type>\S*)\s+'
r'(?P<name>\w+)\((?P<params>.*?)\);',
flags=re.DOTALL)
@@ -534,23 +523,6 @@
return class_path + '/' + class_name
-def ExtractNatives(contents, ptr_type):
- """Returns a list of dict containing information about a native method."""
- contents = contents.replace('\n', '')
- natives = []
- for match in _EXTRACT_NATIVES_REGEX.finditer(contents):
- native = NativeMethod(
- static='static' in match.group('qualifiers'),
- java_class_name=match.group('java_class_name'),
- native_class_name=match.group('native_class_name'),
- return_type=match.group('return_type'),
- name=match.group('name').replace('native', ''),
- params=JniParams.Parse(match.group('params')),
- ptr_type=ptr_type)
- natives += [native]
- return natives
-
-
def IsMainDexJavaClass(contents):
"""Returns True if the class or any of its methods are annotated as @MainDex.
@@ -971,13 +943,10 @@
self.jni_params = JniParams(fully_qualified_class)
self.jni_params.ExtractImportsAndInnerClasses(contents)
jni_namespace = ExtractJNINamespace(contents) or options.namespace
- natives = ExtractNatives(contents, options.ptr_type)
called_by_natives = ExtractCalledByNatives(self.jni_params, contents,
options.always_mangle)
-
- natives += ProxyHelpers.ExtractStaticProxyNatives(fully_qualified_class,
- contents,
- options.ptr_type)
+ natives = ProxyHelpers.ExtractStaticProxyNatives(fully_qualified_class,
+ contents, options.ptr_type)
if len(natives) == 0 and len(called_by_natives) == 0:
raise SyntaxError(
diff --git a/base/android/jni_generator/jni_generator_tests.py b/base/android/jni_generator/jni_generator_tests.py
index 60fd271..382cfafd 100755
--- a/base/android/jni_generator/jni_generator_tests.py
+++ b/base/android/jni_generator/jni_generator_tests.py
@@ -219,280 +219,6 @@
self.assertRaises(AssertionError, willRaise)
- def testNatives(self):
- test_data = """"
- import android.graphics.Bitmap;
- import android.view.View;
-
- interface OnFrameAvailableListener {}
- private native int nativeInit();
- private native void nativeDestroy(int nativeChromeBrowserProvider);
- private native long nativeAddBookmark(
- int nativeChromeBrowserProvider,
- String url, String title, boolean isFolder, long parentId);
- private static native String nativeGetDomainAndRegistry(String url);
- private static native void nativeCreateHistoricalTabFromState(
- byte[] state, int tab_index);
- private native byte[] nativeGetStateAsByteArray(View view);
- private static native String[] nativeGetAutofillProfileGUIDs();
- private native void nativeSetRecognitionResults(
- int sessionId, String[] results);
- private native long nativeAddBookmarkFromAPI(
- int nativeChromeBrowserProvider,
- String url, Long created, Boolean isBookmark,
- Long date, byte[] favicon, String title, Integer visits);
- native int nativeFindAll(String find);
- private static native OnFrameAvailableListener nativeGetInnerClass();
- private native Bitmap nativeQueryBitmap(
- int nativeChromeBrowserProvider,
- String[] projection, String selection,
- String[] selectionArgs, String sortOrder);
- private native void nativeGotOrientation(
- int nativeDataFetcherImplAndroid,
- double alpha, double beta, double gamma);
- private static native Throwable nativeMessWithJavaException(Throwable e);
- """
- jni_params = jni_generator.JniParams(
- 'org/chromium/example/jni_generator/SampleForTests')
- jni_params.ExtractImportsAndInnerClasses(test_data)
- natives = jni_generator.ExtractNatives(test_data, 'int')
- golden_natives = [
- NativeMethod(
- return_type='int',
- static=False,
- name='Init',
- params=[],
- java_class_name=None),
- NativeMethod(
- return_type='void',
- static=False,
- name='Destroy',
- params=[Param(datatype='int', name='nativeChromeBrowserProvider')],
- java_class_name=None),
- NativeMethod(
- return_type='long',
- static=False,
- name='AddBookmark',
- params=[
- Param(datatype='int', name='nativeChromeBrowserProvider'),
- Param(datatype='String', name='url'),
- Param(datatype='String', name='title'),
- Param(datatype='boolean', name='isFolder'),
- Param(datatype='long', name='parentId')
- ],
- java_class_name=None),
- NativeMethod(
- return_type='String',
- static=True,
- name='GetDomainAndRegistry',
- params=[Param(datatype='String', name='url')],
- java_class_name=None),
- NativeMethod(
- return_type='void',
- static=True,
- name='CreateHistoricalTabFromState',
- params=[
- Param(datatype='byte[]', name='state'),
- Param(datatype='int', name='tab_index')
- ],
- java_class_name=None),
- NativeMethod(
- return_type='byte[]',
- static=False,
- name='GetStateAsByteArray',
- params=[Param(datatype='View', name='view')],
- java_class_name=None),
- NativeMethod(
- return_type='String[]',
- static=True,
- name='GetAutofillProfileGUIDs',
- params=[],
- java_class_name=None),
- NativeMethod(
- return_type='void',
- static=False,
- name='SetRecognitionResults',
- params=[
- Param(datatype='int', name='sessionId'),
- Param(datatype='String[]', name='results')
- ],
- java_class_name=None),
- NativeMethod(
- return_type='long',
- static=False,
- name='AddBookmarkFromAPI',
- params=[
- Param(datatype='int', name='nativeChromeBrowserProvider'),
- Param(datatype='String', name='url'),
- Param(datatype='Long', name='created'),
- Param(datatype='Boolean', name='isBookmark'),
- Param(datatype='Long', name='date'),
- Param(datatype='byte[]', name='favicon'),
- Param(datatype='String', name='title'),
- Param(datatype='Integer', name='visits')
- ],
- java_class_name=None),
- NativeMethod(
- return_type='int',
- static=False,
- name='FindAll',
- params=[Param(datatype='String', name='find')],
- java_class_name=None),
- NativeMethod(
- return_type='OnFrameAvailableListener',
- static=True,
- name='GetInnerClass',
- params=[],
- java_class_name=None),
- NativeMethod(
- return_type='Bitmap',
- static=False,
- name='QueryBitmap',
- params=[
- Param(datatype='int', name='nativeChromeBrowserProvider'),
- Param(datatype='String[]', name='projection'),
- Param(datatype='String', name='selection'),
- Param(datatype='String[]', name='selectionArgs'),
- Param(datatype='String', name='sortOrder'),
- ],
- java_class_name=None),
- NativeMethod(
- return_type='void',
- static=False,
- name='GotOrientation',
- params=[
- Param(datatype='int', name='nativeDataFetcherImplAndroid'),
- Param(datatype='double', name='alpha'),
- Param(datatype='double', name='beta'),
- Param(datatype='double', name='gamma'),
- ],
- java_class_name=None),
- NativeMethod(
- return_type='Throwable',
- static=True,
- name='MessWithJavaException',
- params=[Param(datatype='Throwable', name='e')],
- java_class_name=None)
- ]
- self.AssertListEquals(golden_natives, natives)
- h1 = jni_generator.InlHeaderFileGenerator('', 'org/chromium/TestJni',
- natives, [], [], jni_params,
- TestOptions())
- self.AssertGoldenTextEquals(h1.GetContent())
- h2 = jni_registration_generator.HeaderGenerator('',
- '',
- 'org/chromium/TestJni',
- natives,
- jni_params,
- True,
- use_proxy_hash=False)
- content = TestGenerator._MergeRegistrationForTests([h2.Generate()])
-
- self.AssertGoldenTextEquals(jni_registration_generator.CreateFromDict(
- content, use_hash=False, manual_jni_registration=True),
- suffix='Registrations')
-
- def testInnerClassNatives(self):
- test_data = """
- class MyInnerClass {
- @NativeCall("MyInnerClass")
- private native int nativeInit();
- }
- """
- natives = jni_generator.ExtractNatives(test_data, 'int')
- golden_natives = [
- NativeMethod(
- return_type='int',
- static=False,
- name='Init',
- params=[],
- java_class_name='MyInnerClass')
- ]
- self.AssertListEquals(golden_natives, natives)
- jni_params = jni_generator.JniParams('')
- h = jni_generator.InlHeaderFileGenerator('', 'org/chromium/TestJni',
- natives, [], [], jni_params,
- TestOptions())
- self.AssertGoldenTextEquals(h.GetContent())
-
- def testInnerClassNativesMultiple(self):
- test_data = """
- class MyInnerClass {
- @NativeCall("MyInnerClass")
- private native int nativeInit();
- }
- class MyOtherInnerClass {
- @NativeCall("MyOtherInnerClass")
- private native int nativeInit();
- }
- """
- natives = jni_generator.ExtractNatives(test_data, 'int')
- golden_natives = [
- NativeMethod(
- return_type='int',
- static=False,
- name='Init',
- params=[],
- java_class_name='MyInnerClass'),
- NativeMethod(
- return_type='int',
- static=False,
- name='Init',
- params=[],
- java_class_name='MyOtherInnerClass')
- ]
- self.AssertListEquals(golden_natives, natives)
- jni_params = jni_generator.JniParams('')
- h = jni_generator.InlHeaderFileGenerator('', 'org/chromium/TestJni',
- natives, [], [], jni_params,
- TestOptions())
- self.AssertGoldenTextEquals(h.GetContent())
-
- def testInnerClassNativesBothInnerAndOuter(self):
- test_data = """
- class MyOuterClass {
- private native int nativeInit();
- class MyOtherInnerClass {
- @NativeCall("MyOtherInnerClass")
- private native int nativeInit();
- }
- }
- """
- natives = jni_generator.ExtractNatives(test_data, 'int')
- golden_natives = [
- NativeMethod(
- return_type='int',
- static=False,
- name='Init',
- params=[],
- java_class_name=None),
- NativeMethod(
- return_type='int',
- static=False,
- name='Init',
- params=[],
- java_class_name='MyOtherInnerClass')
- ]
- self.AssertListEquals(golden_natives, natives)
- jni_params = jni_generator.JniParams('')
- h = jni_generator.InlHeaderFileGenerator('', 'org/chromium/TestJni',
- natives, [], [], jni_params,
- TestOptions())
- self.AssertGoldenTextEquals(h.GetContent())
-
- h2 = jni_registration_generator.HeaderGenerator('',
- '',
- 'org/chromium/TestJni',
- natives,
- jni_params,
- True,
- use_proxy_hash=False)
- content = TestGenerator._MergeRegistrationForTests([h2.Generate()])
-
- self.AssertGoldenTextEquals(jni_registration_generator.CreateFromDict(
- content, use_hash=False, manual_jni_registration=True),
- suffix='Registrations')
-
def testCalledByNatives(self):
test_data = """"
import android.graphics.Bitmap;
@@ -993,27 +719,6 @@
self.assertEqual(86, len(jni_from_javap.called_by_natives))
self.AssertGoldenTextEquals(jni_from_javap.GetContent())
- def testREForNatives(self):
- # We should not match "native SyncSetupFlow" inside the comment.
- test_data = """
- /**
- * Invoked when the setup process is complete so we can disconnect from the
- * private native void nativeSyncSetupFlowHandler();.
- */
- public void destroy() {
- Log.v(TAG, "Destroying native SyncSetupFlow");
- if (mNativeSyncSetupFlow != 0) {
- nativeSyncSetupEnded(mNativeSyncSetupFlow);
- mNativeSyncSetupFlow = 0;
- }
- }
- private native void nativeSyncSetupEnded(
- int nativeAndroidSyncSetupFlowHandler);
- """
- jni_from_java = jni_generator.JNIFromJavaSource(
- test_data, 'foo/bar', TestOptions())
- self.AssertGoldenTextEquals(jni_from_java.GetContent())
-
def testRaisesOnNonJNIMethod(self):
test_data = """
class MyInnerClass {
@@ -1031,24 +736,6 @@
self.AssertGoldenTextEquals(
generated_text, golden_file='SampleForTests_jni.golden')
- def testNoWrappingPreprocessorLines(self):
- test_data = """
- package com.google.lookhowextremelylongiam.snarf.icankeepthisupallday;
-
- class ReallyLongClassNamesAreAllTheRage {
- private static native int nativeTest();
- }
- """
- jni_from_java = jni_generator.JNIFromJavaSource(
- test_data, ('com/google/lookhowextremelylongiam/snarf/'
- 'icankeepthisupallday/ReallyLongClassNamesAreAllTheRage'),
- TestOptions())
- jni_lines = jni_from_java.GetContent().split('\n')
- line = next(
- line for line in jni_lines if line.lstrip().startswith('#ifndef'))
- self.assertTrue(
- len(line) > 80, ('Expected #ifndef line to be > 80 chars: ', line))
-
def testImports(self):
import_header = """
// Copyright 2012 The Chromium Authors
@@ -1109,29 +796,6 @@
self.AssertTextEquals('[Ljava/nio/ByteBuffer;',
jni_params.JavaToJni('java/nio/ByteBuffer[]'))
- def testNativesLong(self):
- test_options = TestOptions()
- test_options.ptr_type = 'long'
- test_data = """"
- private native void nativeDestroy(long nativeChromeBrowserProvider);
- """
- jni_params = jni_generator.JniParams('')
- jni_params.ExtractImportsAndInnerClasses(test_data)
- natives = jni_generator.ExtractNatives(test_data, test_options.ptr_type)
- golden_natives = [
- NativeMethod(
- return_type='void',
- static=False,
- name='Destroy',
- params=[Param(datatype='long', name='nativeChromeBrowserProvider')],
- java_class_name=None,
- ptr_type=test_options.ptr_type),
- ]
- self.AssertListEquals(golden_natives, natives)
- h = jni_generator.InlHeaderFileGenerator(
- '', 'org/chromium/TestJni', natives, [], [], jni_params, test_options)
- self.AssertGoldenTextEquals(h.GetContent())
-
def testMainDexAnnotation(self):
mainDexEntries = [
'@MainDex public class Test {',
@@ -1176,43 +840,6 @@
for entry in noMainDexEntries:
self.assertEqual(False, IsMainDexJavaClass(entry))
- def testNativeExportsOnlyOption(self):
- test_data = """
- package org.chromium.example.jni_generator;
-
- /** The pointer to the native Test. */
- long nativeTest;
-
- class Test {
- private static native int nativeStaticMethod(long nativeTest, int arg1);
- private native int nativeMethod(long nativeTest, int arg1);
- @CalledByNative
- private void testMethodWithParam(int iParam);
- @CalledByNative
- private String testMethodWithParamAndReturn(int iParam);
- @CalledByNative
- private static int testStaticMethodWithParam(int iParam);
- @CalledByNative
- private static double testMethodWithNoParam();
- @CalledByNative
- private static String testStaticMethodWithNoParam();
-
- class MyInnerClass {
- @NativeCall("MyInnerClass")
- private native int nativeInit();
- }
- class MyOtherInnerClass {
- @NativeCall("MyOtherInnerClass")
- private native int nativeInit();
- }
- }
- """
- options = TestOptions()
- options.native_exports_optional = False
- jni_from_java = jni_generator.JNIFromJavaSource(
- test_data, 'org/chromium/example/jni_generator/SampleForTests', options)
- self.AssertGoldenTextEquals(jni_from_java.GetContent())
-
def testOuterInnerRaises(self):
test_data = """
package org.chromium.media;
@@ -1240,9 +867,6 @@
@CalledByNative
private static void calledByNative(Bar.Callback callback) {
}
-
- private static native void nativeDoSomething(Bar.Callback callback);
- }
"""
jni_from_java = jni_generator.JNIFromJavaSource(test_data,
'org/chromium/foo/Foo',
@@ -1260,9 +884,6 @@
private static void calledByNative(Bar1.Callback callback1,
Bar2.Callback callback2) {
}
-
- private static native void nativeDoSomething(Bar1.Callback callback1,
- Bar2.Callback callback2);
}
"""
jni_from_java = jni_generator.JNIFromJavaSource(test_data,
@@ -1270,50 +891,6 @@
TestOptions())
self.AssertGoldenTextEquals(jni_from_java.GetContent())
- def testTracing(self):
- test_data = """
- package org.chromium.foo;
-
- @JNINamespace("org::chromium_foo")
- class Foo {
-
- @CalledByNative
- Foo();
-
- @CalledByNative
- void callbackFromNative();
-
- native void nativeInstanceMethod(long nativeInstance);
-
- static native void nativeStaticMethod();
- }
- """
- options_with_tracing = TestOptions()
- options_with_tracing.enable_tracing = True
- jni_from_java = jni_generator.JNIFromJavaSource(
- test_data, 'org/chromium/foo/Foo', options_with_tracing)
- self.AssertGoldenTextEquals(jni_from_java.GetContent())
-
- def testStaticBindingCaller(self):
- test_data = """
- package org.chromium.foo;
-
- class Bar {
- static native void nativeShouldBindCaller(Object caller);
- static native void nativeShouldBindCaller(Object caller, int a);
- static native void nativeFoo(long nativeNativeObject, Bar caller);
- static native void nativeFoo(long nativeNativeObject, Bar caller, int a);
- native void nativeCallNativeMethod(long nativePtr);
- @NativeClassQualifiedName("Foo::Bar")
- native void nativeCallWithQualifiedObject(long nativePtr);
- }
- """
-
- jni_from_java = jni_generator.JNIFromJavaSource(test_data,
- 'org/chromium/foo/Foo',
- TestOptions())
- self.AssertGoldenTextEquals(jni_from_java.GetContent())
-
def testSplitNameExample(self):
opts = TestOptions()
opts.split_name = "sample"
diff --git a/base/android/jni_generator/jni_registration_generator.py b/base/android/jni_generator/jni_registration_generator.py
index f939014..639bd88 100755
--- a/base/android/jni_generator/jni_registration_generator.py
+++ b/base/android/jni_generator/jni_registration_generator.py
@@ -146,9 +146,8 @@
fully_qualified_class = jni_generator.ExtractFullyQualifiedJavaClassName(
path, contents)
- natives = jni_generator.ExtractNatives(contents, 'long')
- natives += jni_generator.ProxyHelpers.ExtractStaticProxyNatives(
+ natives = jni_generator.ProxyHelpers.ExtractStaticProxyNatives(
fully_qualified_class=fully_qualified_class,
contents=contents,
ptr_type='long',