Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4faf9da2 authored by John Wu's avatar John Wu Committed by Android (Google) Code Review
Browse files

Merge "[HostStubGen] Introduce new feature: method redirection" into main

parents 9e4770e7 f66934ad
Loading
Loading
Loading
Loading
+27 −2
Original line number Original line Diff line number Diff line
@@ -26,6 +26,10 @@ import android.database.sqlite.SQLiteClosable;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteException;
import android.os.Parcel;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.Parcelable;
import android.ravenwood.annotation.RavenwoodKeepWholeClass;
import android.ravenwood.annotation.RavenwoodRedirect;
import android.ravenwood.annotation.RavenwoodRedirectionClass;
import android.ravenwood.annotation.RavenwoodThrow;


import dalvik.annotation.optimization.FastNative;
import dalvik.annotation.optimization.FastNative;
import dalvik.system.CloseGuard;
import dalvik.system.CloseGuard;
@@ -40,8 +44,8 @@ import dalvik.system.CloseGuard;
 * consumer for reading.
 * consumer for reading.
 * </p>
 * </p>
 */
 */
@android.ravenwood.annotation.RavenwoodKeepWholeClass
@RavenwoodKeepWholeClass
@android.ravenwood.annotation.RavenwoodNativeSubstitutionClass(
@RavenwoodRedirectionClass(
        "com.android.platform.test.ravenwood.nativesubstitution.CursorWindow_host")
        "com.android.platform.test.ravenwood.nativesubstitution.CursorWindow_host")
public class CursorWindow extends SQLiteClosable implements Parcelable {
public class CursorWindow extends SQLiteClosable implements Parcelable {
    private static final String STATS_TAG = "CursorWindowStats";
    private static final String STATS_TAG = "CursorWindowStats";
@@ -63,48 +67,69 @@ public class CursorWindow extends SQLiteClosable implements Parcelable {
    private final CloseGuard mCloseGuard;
    private final CloseGuard mCloseGuard;


    // May throw CursorWindowAllocationException
    // May throw CursorWindowAllocationException
    @RavenwoodRedirect
    private static native long nativeCreate(String name, int cursorWindowSize);
    private static native long nativeCreate(String name, int cursorWindowSize);


    // May throw CursorWindowAllocationException
    // May throw CursorWindowAllocationException
    @RavenwoodRedirect
    private static native long nativeCreateFromParcel(Parcel parcel);
    private static native long nativeCreateFromParcel(Parcel parcel);
    @RavenwoodRedirect
    private static native void nativeDispose(long windowPtr);
    private static native void nativeDispose(long windowPtr);
    @RavenwoodRedirect
    private static native void nativeWriteToParcel(long windowPtr, Parcel parcel);
    private static native void nativeWriteToParcel(long windowPtr, Parcel parcel);


    @RavenwoodRedirect
    private static native String nativeGetName(long windowPtr);
    private static native String nativeGetName(long windowPtr);
    @RavenwoodRedirect
    private static native byte[] nativeGetBlob(long windowPtr, int row, int column);
    private static native byte[] nativeGetBlob(long windowPtr, int row, int column);
    @RavenwoodRedirect
    private static native String nativeGetString(long windowPtr, int row, int column);
    private static native String nativeGetString(long windowPtr, int row, int column);
    @RavenwoodThrow
    private static native void nativeCopyStringToBuffer(long windowPtr, int row, int column,
    private static native void nativeCopyStringToBuffer(long windowPtr, int row, int column,
            CharArrayBuffer buffer);
            CharArrayBuffer buffer);
    @RavenwoodRedirect
    private static native boolean nativePutBlob(long windowPtr, byte[] value, int row, int column);
    private static native boolean nativePutBlob(long windowPtr, byte[] value, int row, int column);
    @RavenwoodRedirect
    private static native boolean nativePutString(long windowPtr, String value,
    private static native boolean nativePutString(long windowPtr, String value,
            int row, int column);
            int row, int column);


    // Below native methods don't do unconstrained work, so are FastNative for performance
    // Below native methods don't do unconstrained work, so are FastNative for performance


    @FastNative
    @FastNative
    @RavenwoodThrow
    private static native void nativeClear(long windowPtr);
    private static native void nativeClear(long windowPtr);


    @FastNative
    @FastNative
    @RavenwoodRedirect
    private static native int nativeGetNumRows(long windowPtr);
    private static native int nativeGetNumRows(long windowPtr);
    @FastNative
    @FastNative
    @RavenwoodRedirect
    private static native boolean nativeSetNumColumns(long windowPtr, int columnNum);
    private static native boolean nativeSetNumColumns(long windowPtr, int columnNum);
    @FastNative
    @FastNative
    @RavenwoodRedirect
    private static native boolean nativeAllocRow(long windowPtr);
    private static native boolean nativeAllocRow(long windowPtr);
    @FastNative
    @FastNative
    @RavenwoodThrow
    private static native void nativeFreeLastRow(long windowPtr);
    private static native void nativeFreeLastRow(long windowPtr);


    @FastNative
    @FastNative
    @RavenwoodRedirect
    private static native int nativeGetType(long windowPtr, int row, int column);
    private static native int nativeGetType(long windowPtr, int row, int column);
    @FastNative
    @FastNative
    @RavenwoodRedirect
    private static native long nativeGetLong(long windowPtr, int row, int column);
    private static native long nativeGetLong(long windowPtr, int row, int column);
    @FastNative
    @FastNative
    @RavenwoodRedirect
    private static native double nativeGetDouble(long windowPtr, int row, int column);
    private static native double nativeGetDouble(long windowPtr, int row, int column);


    @FastNative
    @FastNative
    @RavenwoodRedirect
    private static native boolean nativePutLong(long windowPtr, long value, int row, int column);
    private static native boolean nativePutLong(long windowPtr, long value, int row, int column);
    @FastNative
    @FastNative
    @RavenwoodRedirect
    private static native boolean nativePutDouble(long windowPtr, double value, int row, int column);
    private static native boolean nativePutDouble(long windowPtr, double value, int row, int column);
    @FastNative
    @FastNative
    @RavenwoodThrow
    private static native boolean nativePutNull(long windowPtr, int row, int column);
    private static native boolean nativePutNull(long windowPtr, int row, int column);




+11 −5
Original line number Original line Diff line number Diff line
@@ -19,9 +19,9 @@ package android.os;
import android.annotation.IntDef;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.NonNull;
import android.annotation.TestApi;
import android.annotation.TestApi;
import android.os.Handler;
import android.ravenwood.annotation.RavenwoodKeepWholeClass;
import android.os.Looper;
import android.ravenwood.annotation.RavenwoodRedirect;
import android.os.Trace;
import android.ravenwood.annotation.RavenwoodRedirectionClass;
import android.util.Log;
import android.util.Log;
import android.util.Printer;
import android.util.Printer;
import android.util.SparseArray;
import android.util.SparseArray;
@@ -51,8 +51,8 @@ import java.util.concurrent.locks.ReentrantLock;
 * <p>You can retrieve the MessageQueue for the current thread with
 * <p>You can retrieve the MessageQueue for the current thread with
 * {@link Looper#myQueue() Looper.myQueue()}.
 * {@link Looper#myQueue() Looper.myQueue()}.
 */
 */
@android.ravenwood.annotation.RavenwoodKeepWholeClass
@RavenwoodKeepWholeClass
@android.ravenwood.annotation.RavenwoodNativeSubstitutionClass(
@RavenwoodRedirectionClass(
        "com.android.platform.test.ravenwood.nativesubstitution.MessageQueue_host")
        "com.android.platform.test.ravenwood.nativesubstitution.MessageQueue_host")
public final class MessageQueue {
public final class MessageQueue {
    private static final String TAG = "ConcurrentMessageQueue";
    private static final String TAG = "ConcurrentMessageQueue";
@@ -345,11 +345,17 @@ public final class MessageQueue {
    // Barriers are indicated by messages with a null target whose arg1 field carries the token.
    // Barriers are indicated by messages with a null target whose arg1 field carries the token.
    private final AtomicInteger mNextBarrierToken = new AtomicInteger(1);
    private final AtomicInteger mNextBarrierToken = new AtomicInteger(1);


    @RavenwoodRedirect
    private static native long nativeInit();
    private static native long nativeInit();
    @RavenwoodRedirect
    private static native void nativeDestroy(long ptr);
    private static native void nativeDestroy(long ptr);
    @RavenwoodRedirect
    private native void nativePollOnce(long ptr, int timeoutMillis); /*non-static for callbacks*/
    private native void nativePollOnce(long ptr, int timeoutMillis); /*non-static for callbacks*/
    @RavenwoodRedirect
    private static native void nativeWake(long ptr);
    private static native void nativeWake(long ptr);
    @RavenwoodRedirect
    private static native boolean nativeIsPolling(long ptr);
    private static native boolean nativeIsPolling(long ptr);
    @RavenwoodRedirect
    private static native void nativeSetFileDescriptorEvents(long ptr, int fd, int events);
    private static native void nativeSetFileDescriptorEvents(long ptr, int fd, int events);


    MessageQueue(boolean quitAllowed) {
    MessageQueue(boolean quitAllowed) {
+11 −5
Original line number Original line Diff line number Diff line
@@ -20,9 +20,9 @@ import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.NonNull;
import android.annotation.TestApi;
import android.annotation.TestApi;
import android.compat.annotation.UnsupportedAppUsage;
import android.compat.annotation.UnsupportedAppUsage;
import android.os.Handler;
import android.ravenwood.annotation.RavenwoodKeepWholeClass;
import android.os.Process;
import android.ravenwood.annotation.RavenwoodRedirect;
import android.os.Trace;
import android.ravenwood.annotation.RavenwoodRedirectionClass;
import android.util.Log;
import android.util.Log;
import android.util.Printer;
import android.util.Printer;
import android.util.SparseArray;
import android.util.SparseArray;
@@ -42,8 +42,8 @@ import java.util.concurrent.atomic.AtomicLong;
 * <p>You can retrieve the MessageQueue for the current thread with
 * <p>You can retrieve the MessageQueue for the current thread with
 * {@link Looper#myQueue() Looper.myQueue()}.
 * {@link Looper#myQueue() Looper.myQueue()}.
 */
 */
@android.ravenwood.annotation.RavenwoodKeepWholeClass
@RavenwoodKeepWholeClass
@android.ravenwood.annotation.RavenwoodNativeSubstitutionClass(
@RavenwoodRedirectionClass(
        "com.android.platform.test.ravenwood.nativesubstitution.MessageQueue_host")
        "com.android.platform.test.ravenwood.nativesubstitution.MessageQueue_host")
public final class MessageQueue {
public final class MessageQueue {
    private static final String TAG = "MessageQueue";
    private static final String TAG = "MessageQueue";
@@ -79,12 +79,18 @@ public final class MessageQueue {
    @UnsupportedAppUsage
    @UnsupportedAppUsage
    private int mNextBarrierToken;
    private int mNextBarrierToken;


    @RavenwoodRedirect
    private native static long nativeInit();
    private native static long nativeInit();
    @RavenwoodRedirect
    private native static void nativeDestroy(long ptr);
    private native static void nativeDestroy(long ptr);
    @UnsupportedAppUsage
    @UnsupportedAppUsage
    @RavenwoodRedirect
    private native void nativePollOnce(long ptr, int timeoutMillis); /*non-static for callbacks*/
    private native void nativePollOnce(long ptr, int timeoutMillis); /*non-static for callbacks*/
    @RavenwoodRedirect
    private native static void nativeWake(long ptr);
    private native static void nativeWake(long ptr);
    @RavenwoodRedirect
    private native static boolean nativeIsPolling(long ptr);
    private native static boolean nativeIsPolling(long ptr);
    @RavenwoodRedirect
    private native static void nativeSetFileDescriptorEvents(long ptr, int fd, int events);
    private native static void nativeSetFileDescriptorEvents(long ptr, int fd, int events);


    MessageQueue(boolean quitAllowed) {
    MessageQueue(boolean quitAllowed) {
+11 −4
Original line number Original line Diff line number Diff line
@@ -20,8 +20,9 @@ import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.NonNull;
import android.annotation.TestApi;
import android.annotation.TestApi;
import android.compat.annotation.UnsupportedAppUsage;
import android.compat.annotation.UnsupportedAppUsage;
import android.os.Handler;
import android.ravenwood.annotation.RavenwoodKeepWholeClass;
import android.os.Trace;
import android.ravenwood.annotation.RavenwoodRedirect;
import android.ravenwood.annotation.RavenwoodRedirectionClass;
import android.util.Log;
import android.util.Log;
import android.util.Printer;
import android.util.Printer;
import android.util.SparseArray;
import android.util.SparseArray;
@@ -44,8 +45,8 @@ import java.util.concurrent.atomic.AtomicLong;
 * <p>You can retrieve the MessageQueue for the current thread with
 * <p>You can retrieve the MessageQueue for the current thread with
 * {@link Looper#myQueue() Looper.myQueue()}.
 * {@link Looper#myQueue() Looper.myQueue()}.
 */
 */
@android.ravenwood.annotation.RavenwoodKeepWholeClass
@RavenwoodKeepWholeClass
@android.ravenwood.annotation.RavenwoodNativeSubstitutionClass(
@RavenwoodRedirectionClass(
        "com.android.platform.test.ravenwood.nativesubstitution.MessageQueue_host")
        "com.android.platform.test.ravenwood.nativesubstitution.MessageQueue_host")
public final class MessageQueue {
public final class MessageQueue {
    private static final String TAG = "LockedMessageQueue";
    private static final String TAG = "LockedMessageQueue";
@@ -389,12 +390,18 @@ public final class MessageQueue {
    @UnsupportedAppUsage
    @UnsupportedAppUsage
    private int mNextBarrierToken;
    private int mNextBarrierToken;


    @RavenwoodRedirect
    private native static long nativeInit();
    private native static long nativeInit();
    @RavenwoodRedirect
    private native static void nativeDestroy(long ptr);
    private native static void nativeDestroy(long ptr);
    @UnsupportedAppUsage
    @UnsupportedAppUsage
    @RavenwoodRedirect
    private native void nativePollOnce(long ptr, int timeoutMillis); /*non-static for callbacks*/
    private native void nativePollOnce(long ptr, int timeoutMillis); /*non-static for callbacks*/
    @RavenwoodRedirect
    private native static void nativeWake(long ptr);
    private native static void nativeWake(long ptr);
    @RavenwoodRedirect
    private native static boolean nativeIsPolling(long ptr);
    private native static boolean nativeIsPolling(long ptr);
    @RavenwoodRedirect
    private native static void nativeSetFileDescriptorEvents(long ptr, int fd, int events);
    private native static void nativeSetFileDescriptorEvents(long ptr, int fd, int events);


    MessageQueue(boolean quitAllowed) {
    MessageQueue(boolean quitAllowed) {
+44 −2
Original line number Original line Diff line number Diff line
@@ -28,7 +28,8 @@ import android.annotation.TestApi;
import android.app.AppOpsManager;
import android.app.AppOpsManager;
import android.compat.annotation.UnsupportedAppUsage;
import android.compat.annotation.UnsupportedAppUsage;
import android.ravenwood.annotation.RavenwoodKeepWholeClass;
import android.ravenwood.annotation.RavenwoodKeepWholeClass;
import android.ravenwood.annotation.RavenwoodNativeSubstitutionClass;
import android.ravenwood.annotation.RavenwoodRedirect;
import android.ravenwood.annotation.RavenwoodRedirectionClass;
import android.ravenwood.annotation.RavenwoodReplace;
import android.ravenwood.annotation.RavenwoodReplace;
import android.ravenwood.annotation.RavenwoodThrow;
import android.ravenwood.annotation.RavenwoodThrow;
import android.text.TextUtils;
import android.text.TextUtils;
@@ -233,7 +234,7 @@ import java.util.function.IntFunction;
 * {@link #readSparseArray(ClassLoader, Class)}.
 * {@link #readSparseArray(ClassLoader, Class)}.
 */
 */
@RavenwoodKeepWholeClass
@RavenwoodKeepWholeClass
@RavenwoodNativeSubstitutionClass(
@RavenwoodRedirectionClass(
        "com.android.platform.test.ravenwood.nativesubstitution.Parcel_host")
        "com.android.platform.test.ravenwood.nativesubstitution.Parcel_host")
public final class Parcel {
public final class Parcel {


@@ -387,6 +388,7 @@ public final class Parcel {
    private static final int SIZE_COMPLEX_TYPE = 1;
    private static final int SIZE_COMPLEX_TYPE = 1;


    @CriticalNative
    @CriticalNative
    @RavenwoodRedirect
    private static native void nativeMarkSensitive(long nativePtr);
    private static native void nativeMarkSensitive(long nativePtr);
    @FastNative
    @FastNative
    @RavenwoodThrow
    @RavenwoodThrow
@@ -395,86 +397,126 @@ public final class Parcel {
    @RavenwoodThrow
    @RavenwoodThrow
    private static native boolean nativeIsForRpc(long nativePtr);
    private static native boolean nativeIsForRpc(long nativePtr);
    @CriticalNative
    @CriticalNative
    @RavenwoodRedirect
    private static native int nativeDataSize(long nativePtr);
    private static native int nativeDataSize(long nativePtr);
    @CriticalNative
    @CriticalNative
    @RavenwoodRedirect
    private static native int nativeDataAvail(long nativePtr);
    private static native int nativeDataAvail(long nativePtr);
    @CriticalNative
    @CriticalNative
    @RavenwoodRedirect
    private static native int nativeDataPosition(long nativePtr);
    private static native int nativeDataPosition(long nativePtr);
    @CriticalNative
    @CriticalNative
    @RavenwoodRedirect
    private static native int nativeDataCapacity(long nativePtr);
    private static native int nativeDataCapacity(long nativePtr);
    @FastNative
    @FastNative
    @RavenwoodRedirect
    private static native void nativeSetDataSize(long nativePtr, int size);
    private static native void nativeSetDataSize(long nativePtr, int size);
    @CriticalNative
    @CriticalNative
    @RavenwoodRedirect
    private static native void nativeSetDataPosition(long nativePtr, int pos);
    private static native void nativeSetDataPosition(long nativePtr, int pos);
    @FastNative
    @FastNative
    @RavenwoodRedirect
    private static native void nativeSetDataCapacity(long nativePtr, int size);
    private static native void nativeSetDataCapacity(long nativePtr, int size);


    @CriticalNative
    @CriticalNative
    @RavenwoodRedirect
    private static native boolean nativePushAllowFds(long nativePtr, boolean allowFds);
    private static native boolean nativePushAllowFds(long nativePtr, boolean allowFds);
    @CriticalNative
    @CriticalNative
    @RavenwoodRedirect
    private static native void nativeRestoreAllowFds(long nativePtr, boolean lastValue);
    private static native void nativeRestoreAllowFds(long nativePtr, boolean lastValue);


    @RavenwoodRedirect
    private static native void nativeWriteByteArray(long nativePtr, byte[] b, int offset, int len);
    private static native void nativeWriteByteArray(long nativePtr, byte[] b, int offset, int len);
    @RavenwoodRedirect
    private static native void nativeWriteBlob(long nativePtr, byte[] b, int offset, int len);
    private static native void nativeWriteBlob(long nativePtr, byte[] b, int offset, int len);
    @CriticalNative
    @CriticalNative
    @RavenwoodRedirect
    private static native int nativeWriteInt(long nativePtr, int val);
    private static native int nativeWriteInt(long nativePtr, int val);
    @CriticalNative
    @CriticalNative
    @RavenwoodRedirect
    private static native int nativeWriteLong(long nativePtr, long val);
    private static native int nativeWriteLong(long nativePtr, long val);
    @CriticalNative
    @CriticalNative
    @RavenwoodRedirect
    private static native int nativeWriteFloat(long nativePtr, float val);
    private static native int nativeWriteFloat(long nativePtr, float val);
    @CriticalNative
    @CriticalNative
    @RavenwoodRedirect
    private static native int nativeWriteDouble(long nativePtr, double val);
    private static native int nativeWriteDouble(long nativePtr, double val);
    @RavenwoodThrow
    @RavenwoodThrow
    private static native void nativeSignalExceptionForError(int error);
    private static native void nativeSignalExceptionForError(int error);
    @FastNative
    @FastNative
    @RavenwoodRedirect
    private static native void nativeWriteString8(long nativePtr, String val);
    private static native void nativeWriteString8(long nativePtr, String val);
    @FastNative
    @FastNative
    @RavenwoodRedirect
    private static native void nativeWriteString16(long nativePtr, String val);
    private static native void nativeWriteString16(long nativePtr, String val);
    @FastNative
    @FastNative
    @RavenwoodThrow
    @RavenwoodThrow
    private static native void nativeWriteStrongBinder(long nativePtr, IBinder val);
    private static native void nativeWriteStrongBinder(long nativePtr, IBinder val);
    @FastNative
    @FastNative
    @RavenwoodRedirect
    private static native void nativeWriteFileDescriptor(long nativePtr, FileDescriptor val);
    private static native void nativeWriteFileDescriptor(long nativePtr, FileDescriptor val);


    @RavenwoodRedirect
    private static native byte[] nativeCreateByteArray(long nativePtr);
    private static native byte[] nativeCreateByteArray(long nativePtr);
    @RavenwoodRedirect
    private static native boolean nativeReadByteArray(long nativePtr, byte[] dest, int destLen);
    private static native boolean nativeReadByteArray(long nativePtr, byte[] dest, int destLen);
    @RavenwoodRedirect
    private static native byte[] nativeReadBlob(long nativePtr);
    private static native byte[] nativeReadBlob(long nativePtr);
    @CriticalNative
    @CriticalNative
    @RavenwoodRedirect
    private static native int nativeReadInt(long nativePtr);
    private static native int nativeReadInt(long nativePtr);
    @CriticalNative
    @CriticalNative
    @RavenwoodRedirect
    private static native long nativeReadLong(long nativePtr);
    private static native long nativeReadLong(long nativePtr);
    @CriticalNative
    @CriticalNative
    @RavenwoodRedirect
    private static native float nativeReadFloat(long nativePtr);
    private static native float nativeReadFloat(long nativePtr);
    @CriticalNative
    @CriticalNative
    @RavenwoodRedirect
    private static native double nativeReadDouble(long nativePtr);
    private static native double nativeReadDouble(long nativePtr);
    @FastNative
    @FastNative
    @RavenwoodRedirect
    private static native String nativeReadString8(long nativePtr);
    private static native String nativeReadString8(long nativePtr);
    @FastNative
    @FastNative
    @RavenwoodRedirect
    private static native String nativeReadString16(long nativePtr);
    private static native String nativeReadString16(long nativePtr);
    @FastNative
    @FastNative
    @RavenwoodThrow
    @RavenwoodThrow
    private static native IBinder nativeReadStrongBinder(long nativePtr);
    private static native IBinder nativeReadStrongBinder(long nativePtr);
    @FastNative
    @FastNative
    @RavenwoodRedirect
    private static native FileDescriptor nativeReadFileDescriptor(long nativePtr);
    private static native FileDescriptor nativeReadFileDescriptor(long nativePtr);


    @RavenwoodRedirect
    private static native long nativeCreate();
    private static native long nativeCreate();
    @RavenwoodRedirect
    private static native void nativeFreeBuffer(long nativePtr);
    private static native void nativeFreeBuffer(long nativePtr);
    @RavenwoodRedirect
    private static native void nativeDestroy(long nativePtr);
    private static native void nativeDestroy(long nativePtr);


    @RavenwoodRedirect
    private static native byte[] nativeMarshall(long nativePtr);
    private static native byte[] nativeMarshall(long nativePtr);
    @RavenwoodRedirect
    private static native void nativeUnmarshall(
    private static native void nativeUnmarshall(
            long nativePtr, byte[] data, int offset, int length);
            long nativePtr, byte[] data, int offset, int length);
    @RavenwoodRedirect
    private static native int nativeCompareData(long thisNativePtr, long otherNativePtr);
    private static native int nativeCompareData(long thisNativePtr, long otherNativePtr);
    @RavenwoodRedirect
    private static native boolean nativeCompareDataInRange(
    private static native boolean nativeCompareDataInRange(
            long ptrA, int offsetA, long ptrB, int offsetB, int length);
            long ptrA, int offsetA, long ptrB, int offsetB, int length);
    @RavenwoodRedirect
    private static native void nativeAppendFrom(
    private static native void nativeAppendFrom(
            long thisNativePtr, long otherNativePtr, int offset, int length);
            long thisNativePtr, long otherNativePtr, int offset, int length);
    @CriticalNative
    @CriticalNative
    @RavenwoodRedirect
    private static native boolean nativeHasFileDescriptors(long nativePtr);
    private static native boolean nativeHasFileDescriptors(long nativePtr);
    @RavenwoodRedirect
    private static native boolean nativeHasFileDescriptorsInRange(
    private static native boolean nativeHasFileDescriptorsInRange(
            long nativePtr, int offset, int length);
            long nativePtr, int offset, int length);


    @RavenwoodRedirect
    private static native boolean nativeHasBinders(long nativePtr);
    private static native boolean nativeHasBinders(long nativePtr);
    @RavenwoodRedirect
    private static native boolean nativeHasBindersInRange(
    private static native boolean nativeHasBindersInRange(
            long nativePtr, int offset, int length);
            long nativePtr, int offset, int length);
    @RavenwoodThrow
    @RavenwoodThrow
Loading