[jnigen] JObject is now composed of JReference instead of inheriting it. (#982)

diff --git a/pkgs/jni/CHANGELOG.md b/pkgs/jni/CHANGELOG.md
index d9b2a72..31db3e2 100644
--- a/pkgs/jni/CHANGELOG.md
+++ b/pkgs/jni/CHANGELOG.md
@@ -1,5 +1,7 @@
 ## 0.8.0-wip
 
+- **Breaking Change**: `JObject.reference` now returns a `JReference` instead of
+  `Pointer<Void>`.
 - **Breaking Change** ([#548](https://github.com/dart-lang/native/issues/548)):
   Converted various `Exception`s into `Error`s:
   - `UseAfterReleaseException` -> `UseAfterReleaseError`
diff --git a/pkgs/jni/example/pubspec.lock b/pkgs/jni/example/pubspec.lock
index a202698..9a5a874 100644
--- a/pkgs/jni/example/pubspec.lock
+++ b/pkgs/jni/example/pubspec.lock
@@ -5,18 +5,18 @@
     dependency: transitive
     description:
       name: _fe_analyzer_shared
-      sha256: ae92f5d747aee634b87f89d9946000c2de774be1d6ac3e58268224348cd0101a
+      sha256: "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7"
       url: "https://pub.dev"
     source: hosted
-    version: "61.0.0"
+    version: "67.0.0"
   analyzer:
     dependency: transitive
     description:
       name: analyzer
-      sha256: ea3d8652bda62982addfd92fdc2d0214e5f82e43325104990d4f4c4a2a313562
+      sha256: "37577842a27e4338429a1cbc32679d508836510b056f1eedf0c8d20e39c1383d"
       url: "https://pub.dev"
     source: hosted
-    version: "5.13.0"
+    version: "6.4.1"
   args:
     dependency: transitive
     description:
@@ -93,10 +93,10 @@
     dependency: "direct main"
     description:
       name: cupertino_icons
-      sha256: e35129dc44c9118cee2a5603506d823bab99c68393879edb440e0090d07586be
+      sha256: d57953e10f9f8327ce64a508a355f0b1ec902193f66288e8cb5070e7c47eeb2d
       url: "https://pub.dev"
     source: hosted
-    version: "1.0.5"
+    version: "1.0.6"
   fake_async:
     dependency: transitive
     description:
@@ -109,10 +109,10 @@
     dependency: "direct main"
     description:
       name: ffi
-      sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878"
+      sha256: "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21"
       url: "https://pub.dev"
     source: hosted
-    version: "2.1.0"
+    version: "2.1.2"
   file:
     dependency: transitive
     description:
@@ -135,10 +135,10 @@
     dependency: "direct dev"
     description:
       name: flutter_lints
-      sha256: "2118df84ef0c3ca93f96123a616ae8540879991b8b57af2f81b76a7ada49b2a4"
+      sha256: a25a15ebbdfc33ab1cd26c63a6ee519df92338a9c10f122adda92938253bef04
       url: "https://pub.dev"
     source: hosted
-    version: "2.0.2"
+    version: "2.0.3"
   flutter_test:
     dependency: "direct dev"
     description: flutter
@@ -205,10 +205,10 @@
     dependency: transitive
     description:
       name: js
-      sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3
+      sha256: c1b2e9b5ea78c45e1a0788d29606ba27dc5f71f019f32ca5140f61ef071838cf
       url: "https://pub.dev"
     source: hosted
-    version: "0.6.7"
+    version: "0.7.1"
   leak_tracker:
     dependency: transitive
     description:
@@ -277,10 +277,10 @@
     dependency: transitive
     description:
       name: mime
-      sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e
+      sha256: "2e123074287cc9fd6c09de8336dae606d1ddb88d9ac47358826db698c176a1f2"
       url: "https://pub.dev"
     source: hosted
-    version: "1.0.4"
+    version: "1.0.5"
   node_preamble:
     dependency: transitive
     description:
@@ -317,10 +317,10 @@
     dependency: transitive
     description:
       name: plugin_platform_interface
-      sha256: "43798d895c929056255600343db8f049921cbec94d31ec87f1dc5c16c01935dd"
+      sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
       url: "https://pub.dev"
     source: hosted
-    version: "2.1.5"
+    version: "2.1.8"
   pool:
     dependency: transitive
     description:
@@ -502,14 +502,22 @@
       url: "https://pub.dev"
     source: hosted
     version: "1.1.0"
+  web:
+    dependency: transitive
+    description:
+      name: web
+      sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27"
+      url: "https://pub.dev"
+    source: hosted
+    version: "0.5.1"
   web_socket_channel:
     dependency: transitive
     description:
       name: web_socket_channel
-      sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b
+      sha256: "1d8e795e2a8b3730c41b8a98a2dff2e0fb57ae6f0764a1c46ec5915387d257b2"
       url: "https://pub.dev"
     source: hosted
-    version: "2.4.0"
+    version: "2.4.4"
   webdriver:
     dependency: transitive
     description:
@@ -522,10 +530,10 @@
     dependency: transitive
     description:
       name: webkit_inspection_protocol
-      sha256: "67d3a8b6c79e1987d19d848b0892e582dbb0c66c57cc1fef58a177dd2aa2823d"
+      sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572"
       url: "https://pub.dev"
     source: hosted
-    version: "1.2.0"
+    version: "1.2.1"
   yaml:
     dependency: transitive
     description:
@@ -535,5 +543,5 @@
     source: hosted
     version: "3.1.2"
 sdks:
-  dart: ">=3.2.0 <4.0.0"
+  dart: ">=3.3.0 <4.0.0"
   flutter: ">=3.18.0-18.0.pre.54"
diff --git a/pkgs/jni/lib/jni.dart b/pkgs/jni/lib/jni.dart
index 5f0f34c..62f3b29 100644
--- a/pkgs/jni/lib/jni.dart
+++ b/pkgs/jni/lib/jni.dart
@@ -66,7 +66,6 @@
 export 'src/types.dart';
 export 'src/jarray.dart';
 export 'src/jobject.dart';
-export 'src/jreference.dart' show JReferenceUseExtension;
 
 export 'src/lang/lang.dart';
 export 'src/nio/nio.dart';
diff --git a/pkgs/jni/lib/src/jarray.dart b/pkgs/jni/lib/src/jarray.dart
index 2364312..bfccf96 100644
--- a/pkgs/jni/lib/src/jarray.dart
+++ b/pkgs/jni/lib/src/jarray.dart
@@ -75,7 +75,9 @@
       final clazz = (type as JObjType).getClass();
       final array = JArray<E>.fromRef(
         type,
-        Jni.accessors.newObjectArray(length, clazz.reference, nullptr).object,
+        Jni.accessors
+            .newObjectArray(length, clazz.reference.pointer, nullptr)
+            .object,
       );
       clazz.release();
       return array;
@@ -97,7 +99,8 @@
     final array = JArray<E>.fromRef(
       fill.$type as JObjType<E>,
       Jni.accessors
-          .newObjectArray(length, clazz.reference, fill.reference)
+          .newObjectArray(
+              length, clazz.reference.pointer, fill.reference.pointer)
           .object,
     );
     clazz.release();
@@ -108,12 +111,12 @@
 
   JniResult elementAt(int index, int type) {
     RangeError.checkValidIndex(index, this);
-    return Jni.accessors.getArrayElement(reference, index, type);
+    return Jni.accessors.getArrayElement(reference.pointer, index, type);
   }
 
   /// The number of elements in this array.
   int get length {
-    return _length ??= Jni.env.GetArrayLength(reference);
+    return _length ??= Jni.env.GetArrayLength(reference.pointer);
   }
 }
 
@@ -138,7 +141,7 @@
     RangeError.checkValidIndex(index, this);
     _allocate<JBooleanMarker>(sizeOf<JBooleanMarker>(), (ptr) {
       ptr.value = value ? 1 : 0;
-      Jni.env.SetBooleanArrayRegion(reference, index, 1, ptr);
+      Jni.env.SetBooleanArrayRegion(reference.pointer, index, 1, ptr);
     });
   }
 
@@ -151,7 +154,7 @@
       it.forEachIndexed((index, element) {
         ptr[index] = element ? 1 : 0;
       });
-      Jni.env.SetBooleanArrayRegion(reference, start, size, ptr);
+      Jni.env.SetBooleanArrayRegion(reference.pointer, start, size, ptr);
     });
   }
 }
@@ -165,7 +168,7 @@
     RangeError.checkValidIndex(index, this);
     _allocate<JByteMarker>(sizeOf<JByteMarker>(), (ptr) {
       ptr.value = value;
-      Jni.env.SetByteArrayRegion(reference, index, 1, ptr);
+      Jni.env.SetByteArrayRegion(reference.pointer, index, 1, ptr);
     });
   }
 
@@ -178,7 +181,7 @@
       it.forEachIndexed((index, element) {
         ptr[index] = element;
       });
-      Jni.env.SetByteArrayRegion(reference, start, size, ptr);
+      Jni.env.SetByteArrayRegion(reference.pointer, start, size, ptr);
     });
   }
 }
@@ -194,7 +197,7 @@
     RangeError.checkValidIndex(index, this);
     _allocate<JCharMarker>(sizeOf<JCharMarker>(), (ptr) {
       ptr.value = value.codeUnits.first;
-      Jni.env.SetCharArrayRegion(reference, index, 1, ptr);
+      Jni.env.SetCharArrayRegion(reference.pointer, index, 1, ptr);
     });
   }
 
@@ -207,7 +210,7 @@
       it.forEachIndexed((index, element) {
         ptr[index] = element.codeUnits.first;
       });
-      Jni.env.SetCharArrayRegion(reference, start, size, ptr);
+      Jni.env.SetCharArrayRegion(reference.pointer, start, size, ptr);
     });
   }
 }
@@ -221,7 +224,7 @@
     RangeError.checkValidIndex(index, this);
     _allocate<JShortMarker>(sizeOf<JShortMarker>(), (ptr) {
       ptr.value = value;
-      Jni.env.SetShortArrayRegion(reference, index, 1, ptr);
+      Jni.env.SetShortArrayRegion(reference.pointer, index, 1, ptr);
     });
   }
 
@@ -234,7 +237,7 @@
       it.forEachIndexed((index, element) {
         ptr[index] = element;
       });
-      Jni.env.SetShortArrayRegion(reference, start, size, ptr);
+      Jni.env.SetShortArrayRegion(reference.pointer, start, size, ptr);
     });
   }
 }
@@ -248,7 +251,7 @@
     RangeError.checkValidIndex(index, this);
     _allocate<JIntMarker>(sizeOf<JIntMarker>(), (ptr) {
       ptr.value = value;
-      Jni.env.SetIntArrayRegion(reference, index, 1, ptr);
+      Jni.env.SetIntArrayRegion(reference.pointer, index, 1, ptr);
     });
   }
 
@@ -261,7 +264,7 @@
       it.forEachIndexed((index, element) {
         ptr[index] = element;
       });
-      Jni.env.SetIntArrayRegion(reference, start, size, ptr);
+      Jni.env.SetIntArrayRegion(reference.pointer, start, size, ptr);
     });
   }
 }
@@ -275,7 +278,7 @@
     RangeError.checkValidIndex(index, this);
     _allocate<JLongMarker>(sizeOf<JLongMarker>(), (ptr) {
       ptr.value = value;
-      Jni.env.SetLongArrayRegion(reference, index, 1, ptr);
+      Jni.env.SetLongArrayRegion(reference.pointer, index, 1, ptr);
     });
   }
 
@@ -288,7 +291,7 @@
       it.forEachIndexed((index, element) {
         ptr[index] = element;
       });
-      Jni.env.SetLongArrayRegion(reference, start, size, ptr);
+      Jni.env.SetLongArrayRegion(reference.pointer, start, size, ptr);
     });
   }
 }
@@ -302,7 +305,7 @@
     RangeError.checkValidIndex(index, this);
     _allocate<JFloatMarker>(sizeOf<JFloatMarker>(), (ptr) {
       ptr.value = value;
-      Jni.env.SetFloatArrayRegion(reference, index, 1, ptr);
+      Jni.env.SetFloatArrayRegion(reference.pointer, index, 1, ptr);
     });
   }
 
@@ -315,7 +318,7 @@
       it.forEachIndexed((index, element) {
         ptr[index] = element;
       });
-      Jni.env.SetFloatArrayRegion(reference, start, size, ptr);
+      Jni.env.SetFloatArrayRegion(reference.pointer, start, size, ptr);
     });
   }
 }
@@ -329,7 +332,7 @@
     RangeError.checkValidIndex(index, this);
     _allocate<JDoubleMarker>(sizeOf<JDoubleMarker>(), (ptr) {
       ptr.value = value;
-      Jni.env.SetDoubleArrayRegion(reference, index, 1, ptr);
+      Jni.env.SetDoubleArrayRegion(reference.pointer, index, 1, ptr);
     });
   }
 
@@ -342,7 +345,7 @@
       it.forEachIndexed((index, element) {
         ptr[index] = element;
       });
-      Jni.env.SetDoubleArrayRegion(reference, start, size, ptr);
+      Jni.env.SetDoubleArrayRegion(reference.pointer, start, size, ptr);
     });
   }
 }
@@ -355,7 +358,8 @@
 
   void operator []=(int index, T value) {
     RangeError.checkValidIndex(index, this);
-    Jni.env.SetObjectArrayElement(reference, index, value.reference);
+    Jni.env.SetObjectArrayElement(
+        reference.pointer, index, value.reference.pointer);
   }
 
   void setRange(int start, int end, Iterable<T> iterable, [int skipCount = 0]) {
diff --git a/pkgs/jni/lib/src/jobject.dart b/pkgs/jni/lib/src/jobject.dart
index 15c6972..cb68632 100644
--- a/pkgs/jni/lib/src/jobject.dart
+++ b/pkgs/jni/lib/src/jobject.dart
@@ -5,13 +5,12 @@
 import 'dart:ffi';
 
 import 'package:ffi/ffi.dart';
-import 'package:jni/src/accessors.dart';
+import 'package:jni/internal_helpers_for_jnigen.dart';
 
 import 'errors.dart';
 import 'jni.dart';
-import 'jreference.dart';
-import 'lang/jstring.dart';
 import 'jvalues.dart';
+import 'lang/jstring.dart';
 import 'third_party/generated_bindings.dart';
 import 'types.dart';
 
@@ -50,12 +49,12 @@
   JniPointerResult Function(
           Pointer<Void> ptr, Pointer<Char> name, Pointer<Char> sig)
       f,
-  Pointer<Void> ptr,
+  JReference ref,
   String name,
   String sig,
 ) {
-  final result = using(
-      (arena) => f(ptr, name.toNativeChars(arena), sig.toNativeChars(arena)));
+  final result = using((arena) =>
+      f(ref.pointer, name.toNativeChars(arena), sig.toNativeChars(arena)));
   if (result.exception != nullptr) {
     Jni.accessors.throwException(result.exception);
   }
@@ -162,14 +161,16 @@
 /// A high-level wrapper for JNI global object reference.
 ///
 /// This is the base class for classes generated by `jnigen`.
-class JObject extends JReference {
+class JObject {
+  final JReference reference;
+
   late final JObjType<JObject> $type = type;
 
   /// The type which includes information such as the signature of this class.
   static const JObjType<JObject> type = JObjectType();
 
-  /// Construct a new [JObject] with [reference] as its underlying reference.
-  JObject.fromRef(JObjectPtr reference) : super.fromRef(reference);
+  /// Construct a new [JObject] with [ref] as its underlying reference.
+  JObject.fromRef(JObjectPtr ref) : reference = JGlobalReference(ref);
 
   JClass? _jClass;
 
@@ -177,17 +178,18 @@
     return _jClass ??= getClass();
   }
 
-  @override
+  bool get isNull => reference.isNull;
+
   void release() {
     _jClass?.release();
-    super.release();
+    reference.release();
   }
 
   /// Returns [JClass] corresponding to concrete class of this object.
   ///
   /// This may be a subclass of compile-time class.
   JClass getClass() {
-    final classRef = Jni.env.GetObjectClass(reference);
+    final classRef = Jni.env.GetObjectClass(reference.pointer);
     if (classRef == nullptr) {
       Jni.accessors.throwException(Jni.env.ExceptionOccurred());
     }
@@ -231,8 +233,8 @@
     if (callType == JniCallType.voidType) {
       throw ArgumentError("void is not a valid field type.");
     }
-    return _getField<T>(
-        callType, (ct) => Jni.accessors.getField(reference, fieldID, ct));
+    return _getField<T>(callType,
+        (ct) => Jni.accessors.getField(reference.pointer, fieldID, ct));
   }
 
   /// Get value of the field identified by [name] and [signature].
@@ -250,8 +252,10 @@
     if (callType == JniCallType.voidType) {
       throw ArgumentError("void is not a valid field type.");
     }
-    return _getField<T>(callType,
-        (ct) => Jni.accessors.getStaticField(_class.reference, fieldID, ct));
+    return _getField<T>(
+        callType,
+        (ct) => Jni.accessors
+            .getStaticField(_class.reference.pointer, fieldID, ct));
   }
 
   /// Get value of the static field identified by [name] and [signature].
@@ -269,8 +273,11 @@
   ///
   /// See [getField] for an explanation about [callType] and return type [T].
   T callMethod<T>(JMethodIDPtr methodID, List<dynamic> args, [int? callType]) {
-    return _callMethod<T>(callType, args,
-        (ct, jvs) => Jni.accessors.callMethod(reference, methodID, ct, jvs));
+    return _callMethod<T>(
+        callType,
+        args,
+        (ct, jvs) =>
+            Jni.accessors.callMethod(reference.pointer, methodID, ct, jvs));
   }
 
   /// Call instance method identified by [name] and [signature].
@@ -289,8 +296,8 @@
     return _callMethod<T>(
         callType,
         args,
-        (ct, jvs) =>
-            Jni.accessors.callStaticMethod(reference, methodID, ct, jvs));
+        (ct, jvs) => Jni.accessors
+            .callStaticMethod(reference.pointer, methodID, ct, jvs));
   }
 
   /// Call static method identified by [name] and [signature].
@@ -311,47 +318,54 @@
   }) {
     if (releaseOriginal) {
       _jClass?.release();
-      final ret = type.fromRef(reference);
-      setAsReleased();
+      final ret = type.fromRef(reference.pointer);
+      reference.setAsReleased();
       return ret;
     }
-    final newRef = Jni.env.NewGlobalRef(reference);
+    final newRef = Jni.env.NewGlobalRef(reference.pointer);
     return type.fromRef(newRef);
   }
 
   static final _objectClass = Jni.findJClass('java/lang/Object');
 
-  static final _hashCodeId =
-      Jni.accessors.getMethodIDOf(_objectClass.reference, r"hashCode", r"()I");
+  static final _hashCodeId = Jni.accessors
+      .getMethodIDOf(_objectClass.reference.pointer, r"hashCode", r"()I");
   @override
   int get hashCode => Jni.accessors.callMethodWithArgs(
-      reference, _hashCodeId, JniCallType.intType, []).integer;
+      reference.pointer, _hashCodeId, JniCallType.intType, []).integer;
 
   static final _equalsId = Jni.accessors.getMethodIDOf(
-      _objectClass.reference, r"equals", r"(Ljava/lang/Object;)Z");
+      _objectClass.reference.pointer, r"equals", r"(Ljava/lang/Object;)Z");
   @override
   bool operator ==(Object other) {
     if (other is! JObject) {
       return false;
     }
-    return Jni.accessors.callMethodWithArgs(reference, _equalsId,
-        JniCallType.booleanType, [other.reference]).boolean;
+    return Jni.accessors.callMethodWithArgs(reference.pointer, _equalsId,
+        JniCallType.booleanType, [other.reference.pointer]).boolean;
   }
 
   static final _toStringId = Jni.accessors.getMethodIDOf(
-      _objectClass.reference, r"toString", r"()Ljava/lang/String;");
+      _objectClass.reference.pointer, r"toString", r"()Ljava/lang/String;");
   @override
   String toString() {
     return JString.fromRef(Jni.accessors.callMethodWithArgs(
-            reference, _toStringId, JniCallType.objectType, []).object)
+            reference.pointer, _toStringId, JniCallType.objectType, []).object)
         .toDartString(releaseOriginal: true);
   }
+
+  bool get isReleased => reference.isReleased;
+
+  /// Registers this object to be released at the end of [arena]'s lifetime.
+  void releasedBy(Arena arena) => arena.onReleaseAll(release);
 }
 
 /// A high level wrapper over a JNI class reference.
-class JClass extends JReference {
-  /// Construct a new [JClass] with [reference] as its underlying reference.
-  JClass.fromRef(JObjectPtr reference) : super.fromRef(reference);
+class JClass {
+  final JReference reference;
+
+  /// Construct a new [JClass] with [ref] as its underlying reference.
+  JClass.fromRef(JObjectPtr ref) : reference = JGlobalReference(ref);
 
   /// Get [JFieldIDPtr] of static field [fieldName] with [signature].
   JFieldIDPtr getStaticFieldID(String fieldName, String signature) {
@@ -387,8 +401,8 @@
     if (callType == JniCallType.voidType) {
       throw ArgumentError("void is not a valid field type.");
     }
-    return _getField<T>(
-        callType, (ct) => Jni.accessors.getStaticField(reference, fieldID, ct));
+    return _getField<T>(callType,
+        (ct) => Jni.accessors.getStaticField(reference.pointer, fieldID, ct));
   }
 
   /// Get the value of static field identified by [name] and [signature].
@@ -408,8 +422,8 @@
     return _callMethod<T>(
         callType,
         args,
-        (ct, jvs) =>
-            Jni.accessors.callStaticMethod(reference, methodID, ct, jvs));
+        (ct, jvs) => Jni.accessors
+            .callStaticMethod(reference.pointer, methodID, ct, jvs));
   }
 
   /// Call the static method identified by [name] and [signature].
@@ -424,8 +438,44 @@
   /// Create a new instance of this class with [ctor] and [args].
   JObject newInstance(JMethodIDPtr ctor, List<dynamic> args) => using((arena) {
         final jArgs = JValueArgs(args, arena);
-        final res =
-            Jni.accessors.newObject(reference, ctor, jArgs.values).object;
+        final res = Jni.accessors
+            .newObject(reference.pointer, ctor, jArgs.values)
+            .object;
         return JObject.fromRef(res);
       });
+
+  bool get isReleased => reference.isReleased;
+
+  void release() {
+    reference.release();
+  }
+
+  /// Registers this object to be released at the end of [arena]'s lifetime.
+  void releasedBy(Arena arena) => arena.onReleaseAll(release);
+}
+
+extension JObjectUseExtension<T extends JObject> on T {
+  /// Applies [callback] on [this] object and then delete the underlying JNI
+  /// reference, returning the result of [callback].
+  R use<R>(R Function(T) callback) {
+    try {
+      final result = callback(this);
+      return result;
+    } finally {
+      release();
+    }
+  }
+}
+
+extension JClassUseExtension<T extends JClass> on T {
+  /// Applies [callback] on [this] object and then delete the underlying JNI
+  /// reference, returning the result of [callback].
+  R use<R>(R Function(T) callback) {
+    try {
+      final result = callback(this);
+      return result;
+    } finally {
+      release();
+    }
+  }
 }
diff --git a/pkgs/jni/lib/src/jreference.dart b/pkgs/jni/lib/src/jreference.dart
index 8d8b71d..38dad2d 100644
--- a/pkgs/jni/lib/src/jreference.dart
+++ b/pkgs/jni/lib/src/jreference.dart
@@ -4,7 +4,6 @@
 
 import 'dart:ffi';
 
-import 'package:ffi/ffi.dart';
 import 'package:jni/src/third_party/generated_bindings.dart';
 
 import 'errors.dart';
@@ -16,7 +15,7 @@
       throw DoubleReleaseError();
     }
     _released = true;
-    JReference._finalizer.detach(this);
+    JGlobalReference._finalizer.detach(this);
   }
 
   void ensureNotNull() {
@@ -25,34 +24,38 @@
     }
   }
 
-  /// Similar to [reference].
+  /// Similar to [pointer].
   ///
   /// Detaches the finalizer so the underlying pointer will not be deleted.
   JObjectPtr toPointer() {
     setAsReleased();
-    return _reference;
+    return _pointer;
   }
 }
 
-/// A managed JNI global reference.
-///
-/// Uses a [NativeFinalizer] to delete the JNI global reference when finalized.
-abstract class JReference implements Finalizable {
-  static final _finalizer =
-      NativeFinalizer(Jni.env.ptr.ref.DeleteGlobalRef.cast());
-
-  JReference.fromRef(this._reference) {
-    _finalizer.attach(this, _reference, detach: this);
-  }
-
+sealed class JReference {
+  final JObjectPtr _pointer;
   bool _released = false;
 
-  /// Whether the underlying JNI reference is `null` or not.
-  bool get isNull => reference == nullptr;
+  JReference(this._pointer);
+
+  /// The underlying JNI reference.
+  ///
+  /// Throws [UseAfterReleaseError] if the object is previously released.
+  ///
+  /// Be careful when storing this in a variable since it might have gotten
+  /// released upon use.
+  JObjectPtr get pointer {
+    if (_released) throw UseAfterReleaseError();
+    return _pointer;
+  }
 
   /// Whether the underlying JNI reference is deleted or not.
   bool get isReleased => _released;
 
+  /// Whether the underlying JNI reference is `null` or not.
+  bool get isNull;
+
   /// Deletes the underlying JNI reference and marks this as released.
   ///
   /// Throws [DoubleReleaseError] if this is already released.
@@ -60,35 +63,28 @@
   /// Further uses of this object will throw [UseAfterReleaseError].
   void release() {
     setAsReleased();
-    Jni.env.DeleteGlobalRef(_reference);
+    _deleteReference();
   }
 
-  /// The underlying JNI global object reference.
-  ///
-  /// Throws [UseAfterReleaseError] if the object is previously released.
-  ///
-  /// Be careful when storing this in a variable since it might have gotten
-  /// released upon use.
-  JObjectPtr get reference {
-    if (_released) throw UseAfterReleaseError();
-    return _reference;
-  }
-
-  final JObjectPtr _reference;
-
-  /// Registers this object to be released at the end of [arena]'s lifetime.
-  void releasedBy(Arena arena) => arena.onReleaseAll(release);
+  void _deleteReference();
 }
 
-extension JReferenceUseExtension<T extends JReference> on T {
-  /// Applies [callback] on [this] object and then delete the underlying JNI
-  /// reference, returning the result of [callback].
-  R use<R>(R Function(T) callback) {
-    try {
-      final result = callback(this);
-      return result;
-    } finally {
-      release();
-    }
+/// A managed JNI global reference.
+///
+/// Uses a [NativeFinalizer] to delete the JNI global reference when finalized.
+class JGlobalReference extends JReference implements Finalizable {
+  static final _finalizer =
+      NativeFinalizer(Jni.env.ptr.ref.DeleteGlobalRef.cast());
+
+  JGlobalReference(super._reference) {
+    _finalizer.attach(this, _pointer, detach: this);
+  }
+
+  @override
+  bool get isNull => pointer == nullptr;
+
+  @override
+  void _deleteReference() {
+    Jni.env.DeleteGlobalRef(_pointer);
   }
 }
diff --git a/pkgs/jni/lib/src/jvalues.dart b/pkgs/jni/lib/src/jvalues.dart
index ce8f273..f21382c 100644
--- a/pkgs/jni/lib/src/jvalues.dart
+++ b/pkgs/jni/lib/src/jvalues.dart
@@ -11,7 +11,7 @@
 
 void _fillJValue(Pointer<JValue> pos, dynamic arg) {
   if (arg is JObject) {
-    pos.ref.l = arg.reference;
+    pos.ref.l = arg.reference.pointer;
     return;
   }
 
diff --git a/pkgs/jni/lib/src/lang/jboolean.dart b/pkgs/jni/lib/src/lang/jboolean.dart
index 9ea92b4..8072329 100644
--- a/pkgs/jni/lib/src/lang/jboolean.dart
+++ b/pkgs/jni/lib/src/lang/jboolean.dart
@@ -48,18 +48,18 @@
   static final _class = Jni.findJClass(r"java/lang/Boolean");
 
   static final _ctorId =
-      Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"(Z)V");
+      Jni.accessors.getMethodIDOf(_class.reference.pointer, r"<init>", r"(Z)V");
   JBoolean(bool boolean)
       : super.fromRef(Jni.accessors.newObjectWithArgs(
-            _class.reference, _ctorId, [boolean ? 1 : 0]).object);
+            _class.reference.pointer, _ctorId, [boolean ? 1 : 0]).object);
 
-  static final _booleanValueId =
-      Jni.accessors.getMethodIDOf(_class.reference, r"booleanValue", r"()Z");
+  static final _booleanValueId = Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"booleanValue", r"()Z");
 
   bool booleanValue({bool releaseOriginal = false}) {
-    ensureNotNull();
-    final ret = Jni.accessors.callMethodWithArgs(
-        reference, _booleanValueId, JniCallType.booleanType, []).boolean;
+    reference.ensureNotNull();
+    final ret = Jni.accessors.callMethodWithArgs(reference.pointer,
+        _booleanValueId, JniCallType.booleanType, []).boolean;
     if (releaseOriginal) {
       release();
     }
diff --git a/pkgs/jni/lib/src/lang/jbyte.dart b/pkgs/jni/lib/src/lang/jbyte.dart
index 6b5aa98..b560c92 100644
--- a/pkgs/jni/lib/src/lang/jbyte.dart
+++ b/pkgs/jni/lib/src/lang/jbyte.dart
@@ -48,8 +48,8 @@
   static final _class = Jni.findJClass(r"java/lang/Byte");
 
   static final _ctorId =
-      Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"(B)V");
+      Jni.accessors.getMethodIDOf(_class.reference.pointer, r"<init>", r"(B)V");
   JByte(int num)
       : super.fromRef(Jni.accessors.newObjectWithArgs(
-            _class.reference, _ctorId, [JValueByte(num)]).object);
+            _class.reference.pointer, _ctorId, [JValueByte(num)]).object);
 }
diff --git a/pkgs/jni/lib/src/lang/jcharacter.dart b/pkgs/jni/lib/src/lang/jcharacter.dart
index b50f67f..9ba7fac 100644
--- a/pkgs/jni/lib/src/lang/jcharacter.dart
+++ b/pkgs/jni/lib/src/lang/jcharacter.dart
@@ -45,19 +45,19 @@
   static final _class = Jni.findJClass(r"java/lang/Character");
 
   static final _ctorId =
-      Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"(C)V");
+      Jni.accessors.getMethodIDOf(_class.reference.pointer, r"<init>", r"(C)V");
 
   JCharacter(int c)
       : super.fromRef(Jni.accessors.newObjectWithArgs(
-            _class.reference, _ctorId, [JValueChar(c)]).object);
+            _class.reference.pointer, _ctorId, [JValueChar(c)]).object);
 
-  static final _charValueId =
-      Jni.accessors.getMethodIDOf(_class.reference, r"charValue", r"()C");
+  static final _charValueId = Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"charValue", r"()C");
 
   int charValue({bool releaseOriginal = false}) {
-    ensureNotNull();
+    reference.ensureNotNull();
     final ret = Jni.accessors.callMethodWithArgs(
-        reference, _charValueId, JniCallType.charType, []).char;
+        reference.pointer, _charValueId, JniCallType.charType, []).char;
     if (releaseOriginal) {
       release();
     }
diff --git a/pkgs/jni/lib/src/lang/jdouble.dart b/pkgs/jni/lib/src/lang/jdouble.dart
index 6db163e..ef74762 100644
--- a/pkgs/jni/lib/src/lang/jdouble.dart
+++ b/pkgs/jni/lib/src/lang/jdouble.dart
@@ -47,8 +47,8 @@
   static final _class = Jni.findJClass(r"java/lang/Double");
 
   static final _ctorId =
-      Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"(D)V");
+      Jni.accessors.getMethodIDOf(_class.reference.pointer, r"<init>", r"(D)V");
   JDouble(double num)
-      : super.fromRef(Jni.accessors
-            .newObjectWithArgs(_class.reference, _ctorId, [num]).object);
+      : super.fromRef(Jni.accessors.newObjectWithArgs(
+            _class.reference.pointer, _ctorId, [num]).object);
 }
diff --git a/pkgs/jni/lib/src/lang/jfloat.dart b/pkgs/jni/lib/src/lang/jfloat.dart
index a352659..a4389fb 100644
--- a/pkgs/jni/lib/src/lang/jfloat.dart
+++ b/pkgs/jni/lib/src/lang/jfloat.dart
@@ -48,9 +48,9 @@
   static final _class = Jni.findJClass(r"java/lang/Float");
 
   static final _ctorId =
-      Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"(F)V");
+      Jni.accessors.getMethodIDOf(_class.reference.pointer, r"<init>", r"(F)V");
 
   JFloat(double num)
       : super.fromRef(Jni.accessors.newObjectWithArgs(
-            _class.reference, _ctorId, [JValueFloat(num)]).object);
+            _class.reference.pointer, _ctorId, [JValueFloat(num)]).object);
 }
diff --git a/pkgs/jni/lib/src/lang/jinteger.dart b/pkgs/jni/lib/src/lang/jinteger.dart
index 8ece466..834ed25 100644
--- a/pkgs/jni/lib/src/lang/jinteger.dart
+++ b/pkgs/jni/lib/src/lang/jinteger.dart
@@ -48,9 +48,9 @@
   static final _class = Jni.findJClass(r"java/lang/Integer");
 
   static final _ctorId =
-      Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"(I)V");
+      Jni.accessors.getMethodIDOf(_class.reference.pointer, r"<init>", r"(I)V");
 
   JInteger(int num)
       : super.fromRef(Jni.accessors.newObjectWithArgs(
-            _class.reference, _ctorId, [JValueInt(num)]).object);
+            _class.reference.pointer, _ctorId, [JValueInt(num)]).object);
 }
diff --git a/pkgs/jni/lib/src/lang/jlong.dart b/pkgs/jni/lib/src/lang/jlong.dart
index 66d054b..4014675 100644
--- a/pkgs/jni/lib/src/lang/jlong.dart
+++ b/pkgs/jni/lib/src/lang/jlong.dart
@@ -47,9 +47,9 @@
   static final _class = Jni.findJClass(r"java/lang/Long");
 
   static final _ctorId =
-      Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"(J)V");
+      Jni.accessors.getMethodIDOf(_class.reference.pointer, r"<init>", r"(J)V");
 
   JLong(int num)
-      : super.fromRef(Jni.accessors
-            .newObjectWithArgs(_class.reference, _ctorId, [num]).object);
+      : super.fromRef(Jni.accessors.newObjectWithArgs(
+            _class.reference.pointer, _ctorId, [num]).object);
 }
diff --git a/pkgs/jni/lib/src/lang/jnumber.dart b/pkgs/jni/lib/src/lang/jnumber.dart
index 45d86dc..98fa98b 100644
--- a/pkgs/jni/lib/src/lang/jnumber.dart
+++ b/pkgs/jni/lib/src/lang/jnumber.dart
@@ -55,84 +55,84 @@
   /// The type which includes information such as the signature of this class.
   static const type = JNumberType();
   static final _ctorId =
-      Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"()V");
+      Jni.accessors.getMethodIDOf(_class.reference.pointer, r"<init>", r"()V");
 
   JNumber()
       : super.fromRef(Jni.accessors
-            .newObjectWithArgs(_class.reference, _ctorId, []).object);
+            .newObjectWithArgs(_class.reference.pointer, _ctorId, []).object);
 
-  static final _intValueId =
-      Jni.accessors.getMethodIDOf(_class.reference, r"intValue", r"()I");
+  static final _intValueId = Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"intValue", r"()I");
 
   int intValue({bool releaseOriginal = false}) {
-    ensureNotNull();
+    reference.ensureNotNull();
     final ret = Jni.accessors.callMethodWithArgs(
-        reference, _intValueId, JniCallType.intType, []).integer;
+        reference.pointer, _intValueId, JniCallType.intType, []).integer;
     if (releaseOriginal) {
       release();
     }
     return ret;
   }
 
-  static final _longValueId =
-      Jni.accessors.getMethodIDOf(_class.reference, r"longValue", r"()J");
+  static final _longValueId = Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"longValue", r"()J");
 
   int longValue({bool releaseOriginal = false}) {
-    ensureNotNull();
+    reference.ensureNotNull();
     final ret = Jni.accessors.callMethodWithArgs(
-        reference, _longValueId, JniCallType.longType, []).long;
+        reference.pointer, _longValueId, JniCallType.longType, []).long;
     if (releaseOriginal) {
       release();
     }
     return ret;
   }
 
-  static final _floatValueId =
-      Jni.accessors.getMethodIDOf(_class.reference, r"floatValue", r"()F");
+  static final _floatValueId = Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"floatValue", r"()F");
 
   double floatValue({bool releaseOriginal = false}) {
-    ensureNotNull();
+    reference.ensureNotNull();
     final ret = Jni.accessors.callMethodWithArgs(
-        reference, _floatValueId, JniCallType.floatType, []).float;
+        reference.pointer, _floatValueId, JniCallType.floatType, []).float;
     if (releaseOriginal) {
       release();
     }
     return ret;
   }
 
-  static final _doubleValueId =
-      Jni.accessors.getMethodIDOf(_class.reference, r"doubleValue", r"()D");
+  static final _doubleValueId = Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"doubleValue", r"()D");
 
   double doubleValue({bool releaseOriginal = false}) {
-    ensureNotNull();
-    final ret = Jni.accessors.callMethodWithArgs(
-        reference, _doubleValueId, JniCallType.doubleType, []).doubleFloat;
+    reference.ensureNotNull();
+    final ret = Jni.accessors.callMethodWithArgs(reference.pointer,
+        _doubleValueId, JniCallType.doubleType, []).doubleFloat;
     if (releaseOriginal) {
       release();
     }
     return ret;
   }
 
-  static final _byteValueId =
-      Jni.accessors.getMethodIDOf(_class.reference, r"byteValue", r"()B");
+  static final _byteValueId = Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"byteValue", r"()B");
 
   int byteValue({bool releaseOriginal = false}) {
-    ensureNotNull();
+    reference.ensureNotNull();
     final ret = Jni.accessors.callMethodWithArgs(
-        reference, _byteValueId, JniCallType.byteType, []).byte;
+        reference.pointer, _byteValueId, JniCallType.byteType, []).byte;
     if (releaseOriginal) {
       release();
     }
     return ret;
   }
 
-  static final _shortValueId =
-      Jni.accessors.getMethodIDOf(_class.reference, r"shortValue", r"()S");
+  static final _shortValueId = Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"shortValue", r"()S");
 
   int shortValue({bool releaseOriginal = false}) {
-    ensureNotNull();
+    reference.ensureNotNull();
     final ret = Jni.accessors.callMethodWithArgs(
-        reference, _shortValueId, JniCallType.shortType, []).short;
+        reference.pointer, _shortValueId, JniCallType.shortType, []).short;
     if (releaseOriginal) {
       release();
     }
diff --git a/pkgs/jni/lib/src/lang/jshort.dart b/pkgs/jni/lib/src/lang/jshort.dart
index 39d3c1d..dbaf0a4 100644
--- a/pkgs/jni/lib/src/lang/jshort.dart
+++ b/pkgs/jni/lib/src/lang/jshort.dart
@@ -48,9 +48,9 @@
   static final _class = Jni.findJClass(r"java/lang/Short");
 
   static final _ctorId =
-      Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"(S)V");
+      Jni.accessors.getMethodIDOf(_class.reference.pointer, r"<init>", r"(S)V");
 
   JShort(int num)
       : super.fromRef(Jni.accessors.newObjectWithArgs(
-            _class.reference, _ctorId, [JValueShort(num)]).object);
+            _class.reference.pointer, _ctorId, [JValueShort(num)]).object);
 }
diff --git a/pkgs/jni/lib/src/lang/jstring.dart b/pkgs/jni/lib/src/lang/jstring.dart
index 9b8fbbb..aa7a165 100644
--- a/pkgs/jni/lib/src/lang/jstring.dart
+++ b/pkgs/jni/lib/src/lang/jstring.dart
@@ -47,7 +47,7 @@
   JString.fromRef(JStringPtr reference) : super.fromRef(reference);
 
   /// The number of Unicode characters in this Java string.
-  int get length => Jni.env.GetStringLength(reference);
+  int get length => Jni.env.GetStringLength(reference.pointer);
 
   /// Construct a [JString] from the contents of Dart string [s].
   JString.fromString(String s) : super.fromRef(Jni.env.toJStringPtr(s));
@@ -57,8 +57,8 @@
   /// If [releaseOriginal] is true, the underlying reference is deleted
   /// after conversion and this object will be marked as released.
   String toDartString({bool releaseOriginal = false}) {
-    ensureNotNull();
-    final result = Jni.env.toDartString(reference);
+    reference.ensureNotNull();
+    final result = Jni.env.toDartString(reference.pointer);
     if (releaseOriginal) {
       release();
     }
diff --git a/pkgs/jni/lib/src/nio/jbuffer.dart b/pkgs/jni/lib/src/nio/jbuffer.dart
index cae6bc9..e665465 100644
--- a/pkgs/jni/lib/src/nio/jbuffer.dart
+++ b/pkgs/jni/lib/src/nio/jbuffer.dart
@@ -58,63 +58,63 @@
   /// The type which includes information such as the signature of this class.
   static const type = JBufferType();
 
-  static final _capacityId =
-      Jni.accessors.getMethodIDOf(_class.reference, r"capacity", r"()I");
+  static final _capacityId = Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"capacity", r"()I");
 
   /// The number of elements this buffer contains.
   ///
   /// It is never negative and never changes.
   int get capacity {
     return Jni.accessors.callMethodWithArgs(
-        reference, _capacityId, JniCallType.intType, []).integer;
+        reference.pointer, _capacityId, JniCallType.intType, []).integer;
   }
 
-  static final _positionId =
-      Jni.accessors.getMethodIDOf(_class.reference, r"position", r"()I");
+  static final _positionId = Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"position", r"()I");
 
   /// The index of the next element to be read or written.
   ///
   /// It is never negative and is never greater than its [limit].
   int get position {
     return Jni.accessors.callMethodWithArgs(
-        reference, _positionId, JniCallType.intType, []).integer;
+        reference.pointer, _positionId, JniCallType.intType, []).integer;
   }
 
-  static final _setPositionId = Jni.accessors
-      .getMethodIDOf(_class.reference, r"position", r"(I)Ljava/nio/Buffer;");
+  static final _setPositionId = Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"position", r"(I)Ljava/nio/Buffer;");
 
   /// Throws:
   /// * [IllegalArgumentException] - If the preconditions on [newPosition] do
   ///   not hold.
   set position(int position) {
-    Jni.env.DeleteGlobalRef(Jni.accessors.callMethodWithArgs(reference,
+    Jni.env.DeleteGlobalRef(Jni.accessors.callMethodWithArgs(reference.pointer,
         _setPositionId, JniCallType.objectType, [JValueInt(position)]).object);
   }
 
   static final _limitId =
-      Jni.accessors.getMethodIDOf(_class.reference, r"limit", r"()I");
+      Jni.accessors.getMethodIDOf(_class.reference.pointer, r"limit", r"()I");
 
   /// The index of the first element that should not be read or written.
   ///
   /// It is never negative and is never greater than its [capacity].
   int get limit {
     return Jni.accessors.callMethodWithArgs(
-        reference, _limitId, JniCallType.intType, []).integer;
+        reference.pointer, _limitId, JniCallType.intType, []).integer;
   }
 
-  static final _setLimitId = Jni.accessors
-      .getMethodIDOf(_class.reference, r"limit", r"(I)Ljava/nio/Buffer;");
+  static final _setLimitId = Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"limit", r"(I)Ljava/nio/Buffer;");
 
   /// Throws:
   /// * [IllegalArgumentException] - If the preconditions on [newLimit] do not
   ///   hold.
   set limit(int newLimit) {
-    Jni.env.DeleteGlobalRef(Jni.accessors.callMethodWithArgs(reference,
+    Jni.env.DeleteGlobalRef(Jni.accessors.callMethodWithArgs(reference.pointer,
         _setLimitId, JniCallType.objectType, [JValueInt(newLimit)]).object);
   }
 
   static final _markId = Jni.accessors
-      .getMethodIDOf(_class.reference, r"mark", r"()Ljava/nio/Buffer;");
+      .getMethodIDOf(_class.reference.pointer, r"mark", r"()Ljava/nio/Buffer;");
 
   /// Sets this buffer's mark at its [position].
   ///
@@ -122,11 +122,11 @@
   /// method is invoked.
   void mark() {
     Jni.env.DeleteGlobalRef(Jni.accessors.callMethodWithArgs(
-        reference, _markId, JniCallType.objectType, []).object);
+        reference.pointer, _markId, JniCallType.objectType, []).object);
   }
 
-  static final _resetId = Jni.accessors
-      .getMethodIDOf(_class.reference, r"reset", r"()Ljava/nio/Buffer;");
+  static final _resetId = Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"reset", r"()Ljava/nio/Buffer;");
 
   /// Resets this buffer's [position] to the previously-marked position.
   ///
@@ -134,11 +134,11 @@
   /// * [InvalidMarkException] - If the mark has not been set
   void reset() {
     Jni.env.DeleteGlobalRef(Jni.accessors.callMethodWithArgs(
-        reference, _resetId, JniCallType.objectType, []).object);
+        reference.pointer, _resetId, JniCallType.objectType, []).object);
   }
 
-  static final _clearId = Jni.accessors
-      .getMethodIDOf(_class.reference, r"clear", r"()Ljava/nio/Buffer;");
+  static final _clearId = Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"clear", r"()Ljava/nio/Buffer;");
 
   /// Clears this buffer.
   ///
@@ -146,11 +146,11 @@
   /// the [capacity], and the mark is discarded.
   void clear() {
     Jni.env.DeleteGlobalRef(Jni.accessors.callMethodWithArgs(
-        reference, _clearId, JniCallType.objectType, []).object);
+        reference.pointer, _clearId, JniCallType.objectType, []).object);
   }
 
   static final _flipId = Jni.accessors
-      .getMethodIDOf(_class.reference, r"flip", r"()Ljava/nio/Buffer;");
+      .getMethodIDOf(_class.reference.pointer, r"flip", r"()Ljava/nio/Buffer;");
 
   /// Flips this buffer.
   ///
@@ -158,60 +158,60 @@
   /// to zero. If the mark is defined then it is discarded.
   void flip() {
     Jni.env.DeleteGlobalRef(Jni.accessors.callMethodWithArgs(
-        reference, _flipId, JniCallType.objectType, []).object);
+        reference.pointer, _flipId, JniCallType.objectType, []).object);
   }
 
-  static final _rewindId = Jni.accessors
-      .getMethodIDOf(_class.reference, r"rewind", r"()Ljava/nio/Buffer;");
+  static final _rewindId = Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"rewind", r"()Ljava/nio/Buffer;");
 
   /// Rewinds this buffer.
   ///
   /// The [position] is set to zero and the mark is discarded.
   void rewind() {
     Jni.env.DeleteGlobalRef(Jni.accessors.callMethodWithArgs(
-        reference, _rewindId, JniCallType.objectType, []).object);
+        reference.pointer, _rewindId, JniCallType.objectType, []).object);
   }
 
-  static final _remainingId =
-      Jni.accessors.getMethodIDOf(_class.reference, r"remaining", r"()I");
+  static final _remainingId = Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"remaining", r"()I");
 
   /// The number of elements between the current [position] and the
   /// [limit].
   int get remaining {
     return Jni.accessors.callMethodWithArgs(
-        reference, _remainingId, JniCallType.intType, []).integer;
+        reference.pointer, _remainingId, JniCallType.intType, []).integer;
   }
 
-  static final _hasRemainingId =
-      Jni.accessors.getMethodIDOf(_class.reference, r"hasRemaining", r"()Z");
+  static final _hasRemainingId = Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"hasRemaining", r"()Z");
 
   /// Whether there are any elements between the current [position] and
   /// the [limit].
   bool get hasRemaining {
-    return Jni.accessors.callMethodWithArgs(
-        reference, _hasRemainingId, JniCallType.booleanType, []).boolean;
+    return Jni.accessors.callMethodWithArgs(reference.pointer, _hasRemainingId,
+        JniCallType.booleanType, []).boolean;
   }
 
-  static final _isReadOnlyId =
-      Jni.accessors.getMethodIDOf(_class.reference, r"isReadOnly", r"()Z");
+  static final _isReadOnlyId = Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"isReadOnly", r"()Z");
 
   /// Whether or not this buffer is read-only.
   bool get isReadOnly {
     return Jni.accessors.callMethodWithArgs(
-        reference, _isReadOnlyId, JniCallType.booleanType, []).boolean;
+        reference.pointer, _isReadOnlyId, JniCallType.booleanType, []).boolean;
   }
 
-  static final _hasArrayId =
-      Jni.accessors.getMethodIDOf(_class.reference, r"hasArray", r"()Z");
+  static final _hasArrayId = Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"hasArray", r"()Z");
 
   /// Whether or not this buffer is backed by an accessible array.
   bool get hasArray {
     return Jni.accessors.callMethodWithArgs(
-        reference, _hasArrayId, JniCallType.booleanType, []).boolean;
+        reference.pointer, _hasArrayId, JniCallType.booleanType, []).boolean;
   }
 
-  static final _arrayId = Jni.accessors
-      .getMethodIDOf(_class.reference, r"array", r"()Ljava/lang/Object;");
+  static final _arrayId = Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"array", r"()Ljava/lang/Object;");
 
   /// The array that backs this buffer.
   ///
@@ -225,11 +225,11 @@
   ///   accessible array
   JObject get array {
     return const JObjectType().fromRef(Jni.accessors.callMethodWithArgs(
-        reference, _arrayId, JniCallType.objectType, []).object);
+        reference.pointer, _arrayId, JniCallType.objectType, []).object);
   }
 
-  static final _arrayOffsetId =
-      Jni.accessors.getMethodIDOf(_class.reference, r"arrayOffset", r"()I");
+  static final _arrayOffsetId = Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"arrayOffset", r"()I");
 
   /// The offset within this buffer's backing array of the first element
   /// of the buffer.
@@ -241,15 +241,15 @@
   ///   accessible array
   int get arrayOffset {
     return Jni.accessors.callMethodWithArgs(
-        reference, _arrayOffsetId, JniCallType.intType, []).integer;
+        reference.pointer, _arrayOffsetId, JniCallType.intType, []).integer;
   }
 
-  static final _isDirectId =
-      Jni.accessors.getMethodIDOf(_class.reference, r"isDirect", r"()Z");
+  static final _isDirectId = Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"isDirect", r"()Z");
 
   /// Whether or not this buffer is direct.
   bool get isDirect {
     return Jni.accessors.callMethodWithArgs(
-        reference, _isDirectId, JniCallType.booleanType, []).boolean;
+        reference.pointer, _isDirectId, JniCallType.booleanType, []).boolean;
   }
 }
diff --git a/pkgs/jni/lib/src/nio/jbyte_buffer.dart b/pkgs/jni/lib/src/nio/jbyte_buffer.dart
index d5f5488..d100039 100644
--- a/pkgs/jni/lib/src/nio/jbyte_buffer.dart
+++ b/pkgs/jni/lib/src/nio/jbyte_buffer.dart
@@ -102,7 +102,7 @@
   static const type = JByteBufferType();
 
   static final _allocateDirectId = Jni.accessors.getStaticMethodIDOf(
-      _class.reference, r"allocateDirect", r"(I)Ljava/nio/ByteBuffer;");
+      _class.reference.pointer, r"allocateDirect", r"(I)Ljava/nio/ByteBuffer;");
 
   /// Allocates a new direct byte buffer.
   ///
@@ -111,7 +111,7 @@
   factory JByteBuffer.allocateDirect(int capacity) {
     return JByteBuffer.fromRef(
       Jni.accessors.callStaticMethodWithArgs(
-          _class.reference,
+          _class.reference.pointer,
           _allocateDirectId,
           JniCallType.objectType,
           [JValueInt(capacity)]).object,
@@ -119,7 +119,7 @@
   }
 
   static final _allocateId = Jni.accessors.getStaticMethodIDOf(
-      _class.reference, r"allocate", r"(I)Ljava/nio/ByteBuffer;");
+      _class.reference.pointer, r"allocate", r"(I)Ljava/nio/ByteBuffer;");
 
   /// Allocates a new byte buffer.
   ///
@@ -127,14 +127,14 @@
   /// * [IllegalArgumentException] - If the capacity is a negative integer
   factory JByteBuffer.allocate(int capacity) {
     return const JByteBufferType().fromRef(Jni.accessors
-        .callStaticMethodWithArgs(_class.reference, _allocateId,
+        .callStaticMethodWithArgs(_class.reference.pointer, _allocateId,
             JniCallType.objectType, [JValueInt(capacity)]).object);
   }
 
   static final _wrapWholeId = Jni.accessors.getStaticMethodIDOf(
-      _class.reference, r"wrap", r"([B)Ljava/nio/ByteBuffer;");
+      _class.reference.pointer, r"wrap", r"([B)Ljava/nio/ByteBuffer;");
   static final _wrapId = Jni.accessors.getStaticMethodIDOf(
-      _class.reference, r"wrap", r"([BII)Ljava/nio/ByteBuffer;");
+      _class.reference.pointer, r"wrap", r"([BII)Ljava/nio/ByteBuffer;");
 
   /// Wraps a byte array into a buffer.
   ///
@@ -149,10 +149,10 @@
     if (offset == null && length == null) {
       return const JByteBufferType().fromRef(
         Jni.accessors.callStaticMethodWithArgs(
-          _class.reference,
+          _class.reference.pointer,
           _wrapWholeId,
           JniCallType.objectType,
-          [array.reference],
+          [array.reference.pointer],
         ).object,
       );
     }
@@ -160,10 +160,10 @@
     length ??= array.length - offset;
     return const JByteBufferType().fromRef(
       Jni.accessors.callStaticMethodWithArgs(
-        _class.reference,
+        _class.reference.pointer,
         _wrapId,
         JniCallType.objectType,
-        [array.reference, JValueInt(offset), JValueInt(length)],
+        [array.reference.pointer, JValueInt(offset), JValueInt(length)],
       ).object,
     );
   }
@@ -177,36 +177,40 @@
     return buffer;
   }
 
-  static final _sliceId = Jni.accessors
-      .getMethodIDOf(_class.reference, r"slice", r"()Ljava/nio/ByteBuffer;");
+  static final _sliceId = Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"slice", r"()Ljava/nio/ByteBuffer;");
 
   /// Creates a new byte buffer whose content is a shared subsequence of this
   /// buffer's content.
   JByteBuffer slice() {
     return const JByteBufferType().fromRef(Jni.accessors.callMethodWithArgs(
-        reference, _sliceId, JniCallType.objectType, []).object);
+        reference.pointer, _sliceId, JniCallType.objectType, []).object);
   }
 
   static final _duplicateId = Jni.accessors.getMethodIDOf(
-      _class.reference, r"duplicate", r"()Ljava/nio/ByteBuffer;");
+      _class.reference.pointer, r"duplicate", r"()Ljava/nio/ByteBuffer;");
 
   /// Creates a new byte buffer that shares this buffer's content.
   JByteBuffer duplicate() {
     return const JByteBufferType().fromRef(Jni.accessors.callMethodWithArgs(
-        reference, _duplicateId, JniCallType.objectType, []).object);
+        reference.pointer, _duplicateId, JniCallType.objectType, []).object);
   }
 
   static final _asReadOnlyBufferId = Jni.accessors.getMethodIDOf(
-      _class.reference, r"asReadOnlyBuffer", r"()Ljava/nio/ByteBuffer;");
+      _class.reference.pointer,
+      r"asReadOnlyBuffer",
+      r"()Ljava/nio/ByteBuffer;");
 
   /// Creates a new, read-only byte buffer that shares this buffer's content.
   JByteBuffer asReadOnlyBuffer() {
     return const JByteBufferType().fromRef(Jni.accessors.callMethodWithArgs(
-        reference, _asReadOnlyBufferId, JniCallType.objectType, []).object);
+        reference.pointer,
+        _asReadOnlyBufferId,
+        JniCallType.objectType, []).object);
   }
 
   static final _getId =
-      Jni.accessors.getMethodIDOf(_class.reference, r"get", r"()B");
+      Jni.accessors.getMethodIDOf(_class.reference.pointer, r"get", r"()B");
 
   /// Reads the byte at this buffer's current [position], and then increments the
   /// [position].
@@ -215,12 +219,12 @@
   ///  * [BufferOverflowException] - If the buffer's current [position] is not
   ///    smaller than its [limit]
   int get nextByte {
-    return Jni.accessors
-        .callMethodWithArgs(reference, _getId, JniCallType.byteType, []).byte;
+    return Jni.accessors.callMethodWithArgs(
+        reference.pointer, _getId, JniCallType.byteType, []).byte;
   }
 
-  static final _putId = Jni.accessors
-      .getMethodIDOf(_class.reference, r"put", r"(B)Ljava/nio/ByteBuffer;");
+  static final _putId = Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"put", r"(B)Ljava/nio/ByteBuffer;");
 
   /// Writes the given byte into this buffer at the current [position], and then
   /// increments the [position].
@@ -230,18 +234,18 @@
   ///   smaller than its [limit]
   /// * [ReadOnlyBufferException] - If this buffer is read-only
   set nextByte(int b) {
-    Jni.env.DeleteGlobalRef(Jni.accessors.callMethodWithArgs(
-        reference, _putId, JniCallType.objectType, [JValueByte(b)]).object);
+    Jni.env.DeleteGlobalRef(Jni.accessors.callMethodWithArgs(reference.pointer,
+        _putId, JniCallType.objectType, [JValueByte(b)]).object);
   }
 
   static final _arrayId =
-      Jni.accessors.getMethodIDOf(_class.reference, r"array", r"()[B");
+      Jni.accessors.getMethodIDOf(_class.reference.pointer, r"array", r"()[B");
 
   @override
   JArray<jbyte> get array {
     return const JArrayType(jbyteType()).fromRef(Jni.accessors
         .callMethodWithArgs(
-            reference, _arrayId, JniCallType.objectType, []).object);
+            reference.pointer, _arrayId, JniCallType.objectType, []).object);
   }
 
   void _ensureIsDirect() {
@@ -253,7 +257,7 @@
   }
 
   Pointer<Void> _directBufferAddress() {
-    final address = Jni.env.GetDirectBufferAddress(reference);
+    final address = Jni.env.GetDirectBufferAddress(reference.pointer);
     if (address == nullptr) {
       throw StateError(
         'The memory region is undefined or '
@@ -264,7 +268,7 @@
   }
 
   int _directBufferCapacity() {
-    final capacity = Jni.env.GetDirectBufferCapacity(reference);
+    final capacity = Jni.env.GetDirectBufferCapacity(reference.pointer);
     if (capacity == -1) {
       throw StateError(
         'The object is an unaligned view buffer and the processor '
@@ -293,9 +297,11 @@
     _ensureIsDirect();
     final address = _directBufferAddress();
     final capacity = _directBufferCapacity();
-    final token = releaseOriginal ? reference : Jni.env.NewGlobalRef(reference);
+    final token = releaseOriginal
+        ? reference.pointer
+        : Jni.env.NewGlobalRef(reference.pointer);
     if (releaseOriginal) {
-      setAsReleased();
+      reference.setAsReleased();
     }
     return address.cast<Uint8>().asTypedList(
           capacity,
diff --git a/pkgs/jni/lib/src/util/jiterator.dart b/pkgs/jni/lib/src/util/jiterator.dart
index 0d0122f..c9861af 100644
--- a/pkgs/jni/lib/src/util/jiterator.dart
+++ b/pkgs/jni/lib/src/util/jiterator.dart
@@ -67,17 +67,17 @@
   $E get current => _current as $E;
 
   static final _hasNextId =
-      Jni.accessors.getMethodIDOf(_class.reference, r"hasNext", r"()Z");
+      Jni.accessors.getMethodIDOf(_class.reference.pointer, r"hasNext", r"()Z");
   bool _hasNext() {
     return Jni.accessors.callMethodWithArgs(
-        reference, _hasNextId, JniCallType.booleanType, []).boolean;
+        reference.pointer, _hasNextId, JniCallType.booleanType, []).boolean;
   }
 
-  static final _nextId = Jni.accessors
-      .getMethodIDOf(_class.reference, r"next", r"()Ljava/lang/Object;");
+  static final _nextId = Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"next", r"()Ljava/lang/Object;");
   $E _next() {
     return E.fromRef(Jni.accessors.callMethodWithArgs(
-        reference, _nextId, JniCallType.objectType, []).object);
+        reference.pointer, _nextId, JniCallType.objectType, []).object);
   }
 
   @override
diff --git a/pkgs/jni/lib/src/util/jlist.dart b/pkgs/jni/lib/src/util/jlist.dart
index 9779032..bb99c1c 100644
--- a/pkgs/jni/lib/src/util/jlist.dart
+++ b/pkgs/jni/lib/src/util/jlist.dart
@@ -68,16 +68,16 @@
 
   static final _arrayListClassRef = Jni.findJClass(r"java/util/ArrayList");
   static final _ctorId = Jni.accessors
-      .getMethodIDOf(_arrayListClassRef.reference, r"<init>", r"()V");
+      .getMethodIDOf(_arrayListClassRef.reference.pointer, r"<init>", r"()V");
   JList.array(this.E)
       : super.fromRef(Jni.accessors.newObjectWithArgs(
-            _arrayListClassRef.reference, _ctorId, []).object);
+            _arrayListClassRef.reference.pointer, _ctorId, []).object);
 
   static final _sizeId =
-      Jni.accessors.getMethodIDOf(_class.reference, r"size", r"()I");
+      Jni.accessors.getMethodIDOf(_class.reference.pointer, r"size", r"()I");
   @override
-  int get length => Jni.accessors
-      .callMethodWithArgs(reference, _sizeId, JniCallType.intType, []).integer;
+  int get length => Jni.accessors.callMethodWithArgs(
+      reference.pointer, _sizeId, JniCallType.intType, []).integer;
 
   @override
   set length(int newLength) {
@@ -90,113 +90,122 @@
     }
   }
 
-  static final _getId = Jni.accessors
-      .getMethodIDOf(_class.reference, r"get", r"(I)Ljava/lang/Object;");
+  static final _getId = Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"get", r"(I)Ljava/lang/Object;");
   @override
   $E operator [](int index) {
     RangeError.checkValidIndex(index, this);
-    return E.fromRef(Jni.accessors.callMethodWithArgs(
-        reference, _getId, JniCallType.objectType, [JValueInt(index)]).object);
+    return E.fromRef(Jni.accessors.callMethodWithArgs(reference.pointer, _getId,
+        JniCallType.objectType, [JValueInt(index)]).object);
   }
 
-  static final _setId = Jni.accessors.getMethodIDOf(
-      _class.reference, r"set", r"(ILjava/lang/Object;)Ljava/lang/Object;");
+  static final _setId = Jni.accessors.getMethodIDOf(_class.reference.pointer,
+      r"set", r"(ILjava/lang/Object;)Ljava/lang/Object;");
   @override
   void operator []=(int index, $E value) {
     RangeError.checkValidIndex(index, this);
-    E.fromRef(Jni.accessors.callMethodWithArgs(reference, _setId,
-        JniCallType.objectType, [JValueInt(index), value.reference]).object);
+    E.fromRef(Jni.accessors.callMethodWithArgs(
+        reference.pointer,
+        _setId,
+        JniCallType.objectType,
+        [JValueInt(index), value.reference.pointer]).object);
   }
 
-  static final _addId = Jni.accessors
-      .getMethodIDOf(_class.reference, r"add", r"(Ljava/lang/Object;)Z");
+  static final _addId = Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"add", r"(Ljava/lang/Object;)Z");
   @override
   void add($E element) {
-    Jni.accessors.callMethodWithArgs(reference, _addId, JniCallType.booleanType,
-        [element.reference]).check();
+    Jni.accessors.callMethodWithArgs(reference.pointer, _addId,
+        JniCallType.booleanType, [element.reference.pointer]).check();
   }
 
   static final _collectionClass = Jni.findJClass("java/util/Collection");
-  static final _addAllId = Jni.accessors
-      .getMethodIDOf(_class.reference, r"addAll", r"(Ljava/util/Collection;)Z");
+  static final _addAllId = Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"addAll", r"(Ljava/util/Collection;)Z");
   @override
   void addAll(Iterable<$E> iterable) {
     if (iterable is JObject &&
-        Jni.env.IsInstanceOf(
-            (iterable as JObject).reference, _collectionClass.reference)) {
-      Jni.accessors.callMethodWithArgs(reference, _addAllId,
-          JniCallType.booleanType, [(iterable as JObject).reference]).boolean;
+        Jni.env.IsInstanceOf((iterable as JObject).reference.pointer,
+            _collectionClass.reference.pointer)) {
+      Jni.accessors.callMethodWithArgs(
+          reference.pointer,
+          _addAllId,
+          JniCallType.booleanType,
+          [(iterable as JObject).reference.pointer]).boolean;
       return;
     }
     return super.addAll(iterable);
   }
 
   static final _clearId =
-      Jni.accessors.getMethodIDOf(_class.reference, r"clear", r"()V");
+      Jni.accessors.getMethodIDOf(_class.reference.pointer, r"clear", r"()V");
   @override
   void clear() {
     Jni.accessors.callMethodWithArgs(
-        reference, _clearId, JniCallType.voidType, []).check();
+        reference.pointer, _clearId, JniCallType.voidType, []).check();
   }
 
-  static final _containsId = Jni.accessors
-      .getMethodIDOf(_class.reference, r"contains", r"(Ljava/lang/Object;)Z");
+  static final _containsId = Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"contains", r"(Ljava/lang/Object;)Z");
   @override
   bool contains(Object? element) {
     if (element is! JObject) return false;
-    return Jni.accessors.callMethodWithArgs(reference, _containsId,
-        JniCallType.booleanType, [element.reference]).boolean;
+    return Jni.accessors.callMethodWithArgs(reference.pointer, _containsId,
+        JniCallType.booleanType, [element.reference.pointer]).boolean;
   }
 
-  static final _getRangeId = Jni.accessors
-      .getMethodIDOf(_class.reference, r"subList", r"(II)Ljava/util/List;");
+  static final _getRangeId = Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"subList", r"(II)Ljava/util/List;");
   @override
   JList<$E> getRange(int start, int end) {
     RangeError.checkValidRange(start, end, this.length);
     return JListType(E).fromRef(
-      Jni.accessors.callMethodWithArgs(reference, _getRangeId,
+      Jni.accessors.callMethodWithArgs(reference.pointer, _getRangeId,
           JniCallType.objectType, [JValueInt(start), JValueInt(end)]).object,
     );
   }
 
-  static final _indexOfId = Jni.accessors
-      .getMethodIDOf(_class.reference, r"indexOf", r"(Ljava/lang/Object;)I");
+  static final _indexOfId = Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"indexOf", r"(Ljava/lang/Object;)I");
   @override
   int indexOf(Object? element, [int start = 0]) {
     if (element is! JObject) return -1;
     if (start < 0) start = 0;
     if (start == 0) {
-      return Jni.accessors.callMethodWithArgs(reference, _indexOfId,
-          JniCallType.intType, [element.reference]).integer;
+      return Jni.accessors.callMethodWithArgs(reference.pointer, _indexOfId,
+          JniCallType.intType, [element.reference.pointer]).integer;
     }
     return Jni.accessors.callMethodWithArgs(
-      getRange(start, length).reference,
+      getRange(start, length).reference.pointer,
       _indexOfId,
       JniCallType.intType,
-      [element.reference],
+      [element.reference.pointer],
     ).integer;
   }
 
-  static final _insertId = Jni.accessors
-      .getMethodIDOf(_class.reference, r"add", r"(ILjava/lang/Object;)V");
+  static final _insertId = Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"add", r"(ILjava/lang/Object;)V");
   @override
   void insert(int index, $E element) {
-    Jni.accessors.callMethodWithArgs(reference, _insertId, JniCallType.voidType,
-        [JValueInt(index), element.reference]).check();
+    Jni.accessors.callMethodWithArgs(
+        reference.pointer,
+        _insertId,
+        JniCallType.voidType,
+        [JValueInt(index), element.reference.pointer]).check();
   }
 
   static final _insertAllId = Jni.accessors.getMethodIDOf(
-      _class.reference, r"addAll", r"(ILjava/util/Collection;)Z");
+      _class.reference.pointer, r"addAll", r"(ILjava/util/Collection;)Z");
   @override
   void insertAll(int index, Iterable<$E> iterable) {
     if (iterable is JObject &&
-        Jni.env.IsInstanceOf(
-            (iterable as JObject).reference, _collectionClass.reference)) {
+        Jni.env.IsInstanceOf((iterable as JObject).reference.pointer,
+            _collectionClass.reference.pointer)) {
       Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _insertAllId,
         JniCallType.booleanType,
-        [JValueInt(index), (iterable as JObject).reference],
+        [JValueInt(index), (iterable as JObject).reference.pointer],
       ).boolean;
       return;
     }
@@ -204,57 +213,57 @@
   }
 
   static final _isEmptyId =
-      Jni.accessors.getMethodIDOf(_class.reference, r"isEmpty", r"()Z");
+      Jni.accessors.getMethodIDOf(_class.reference.pointer, r"isEmpty", r"()Z");
   @override
   bool get isEmpty => Jni.accessors.callMethodWithArgs(
-      reference, _isEmptyId, JniCallType.booleanType, []).boolean;
+      reference.pointer, _isEmptyId, JniCallType.booleanType, []).boolean;
 
   @override
   bool get isNotEmpty => !isEmpty;
 
-  static final _iteratorId = Jni.accessors
-      .getMethodIDOf(_class.reference, r"iterator", r"()Ljava/util/Iterator;");
+  static final _iteratorId = Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"iterator", r"()Ljava/util/Iterator;");
   @override
   JIterator<$E> get iterator =>
       JIteratorType(E).fromRef(Jni.accessors.callMethodWithArgs(
-          reference, _iteratorId, JniCallType.objectType, []).object);
+          reference.pointer, _iteratorId, JniCallType.objectType, []).object);
 
   static final _lastIndexOfId = Jni.accessors.getMethodIDOf(
-      _class.reference, r"lastIndexOf", r"(Ljava/lang/Object;)I");
+      _class.reference.pointer, r"lastIndexOf", r"(Ljava/lang/Object;)I");
   @override
   int lastIndexOf(Object? element, [int? start]) {
     if (element is! JObject) return -1;
     if (start == null || start >= this.length) start = this.length - 1;
     if (start == this.length - 1) {
-      return Jni.accessors.callMethodWithArgs(reference, _lastIndexOfId,
-          JniCallType.intType, [element.reference]).integer;
+      return Jni.accessors.callMethodWithArgs(reference.pointer, _lastIndexOfId,
+          JniCallType.intType, [element.reference.pointer]).integer;
     }
     final range = getRange(start, length);
     final res = Jni.accessors.callMethodWithArgs(
-      range.reference,
+      range.reference.pointer,
       _lastIndexOfId,
       JniCallType.intType,
-      [element.reference],
+      [element.reference.pointer],
     ).integer;
     range.release();
     return res;
   }
 
-  static final _removeId = Jni.accessors
-      .getMethodIDOf(_class.reference, r"remove", r"(Ljava/lang/Object;)Z");
+  static final _removeId = Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"remove", r"(Ljava/lang/Object;)Z");
   @override
   bool remove(Object? element) {
     if (element is! JObject) return false;
-    return Jni.accessors.callMethodWithArgs(reference, _removeId,
-        JniCallType.booleanType, [element.reference]).boolean;
+    return Jni.accessors.callMethodWithArgs(reference.pointer, _removeId,
+        JniCallType.booleanType, [element.reference.pointer]).boolean;
   }
 
-  static final _removeAtId = Jni.accessors
-      .getMethodIDOf(_class.reference, r"remove", r"(I)Ljava/lang/Object;");
+  static final _removeAtId = Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"remove", r"(I)Ljava/lang/Object;");
   @override
   $E removeAt(int index) {
-    return E.fromRef(Jni.accessors.callMethodWithArgs(reference, _removeAtId,
-        JniCallType.objectType, [JValueInt(index)]).object);
+    return E.fromRef(Jni.accessors.callMethodWithArgs(reference.pointer,
+        _removeAtId, JniCallType.objectType, [JValueInt(index)]).object);
   }
 
   @override
diff --git a/pkgs/jni/lib/src/util/jmap.dart b/pkgs/jni/lib/src/util/jmap.dart
index 73a6d62..cc95b31 100644
--- a/pkgs/jni/lib/src/util/jmap.dart
+++ b/pkgs/jni/lib/src/util/jmap.dart
@@ -74,104 +74,107 @@
   }
 
   static final _hashMapClass = Jni.findJClass(r"java/util/HashMap");
-  static final _ctorId =
-      Jni.accessors.getMethodIDOf(_hashMapClass.reference, r"<init>", r"()V");
+  static final _ctorId = Jni.accessors
+      .getMethodIDOf(_hashMapClass.reference.pointer, r"<init>", r"()V");
   JMap.hash(this.K, this.V)
-      : super.fromRef(Jni.accessors
-            .newObjectWithArgs(_hashMapClass.reference, _ctorId, []).object);
+      : super.fromRef(Jni.accessors.newObjectWithArgs(
+            _hashMapClass.reference.pointer, _ctorId, []).object);
 
-  static final _getId = Jni.accessors.getMethodIDOf(
-      _class.reference, r"get", r"(Ljava/lang/Object;)Ljava/lang/Object;");
+  static final _getId = Jni.accessors.getMethodIDOf(_class.reference.pointer,
+      r"get", r"(Ljava/lang/Object;)Ljava/lang/Object;");
   @override
   $V? operator [](Object? key) {
     if (key is! JObject) {
       return null;
     }
-    final value = V.fromRef(Jni.accessors.callMethodWithArgs(
-        reference, _getId, JniCallType.objectType, [key.reference]).object);
+    final value = V.fromRef(Jni.accessors.callMethodWithArgs(reference.pointer,
+        _getId, JniCallType.objectType, [key.reference.pointer]).object);
     return value.isNull ? null : value;
   }
 
-  static final _putId = Jni.accessors.getMethodIDOf(_class.reference, r"put",
-      r"(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
+  static final _putId = Jni.accessors.getMethodIDOf(_class.reference.pointer,
+      r"put", r"(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
   @override
   void operator []=($K key, $V value) {
-    Jni.accessors.callMethodWithArgs(reference, _putId, JniCallType.objectType,
-        [key.reference, value.reference]).object;
+    Jni.accessors.callMethodWithArgs(
+        reference.pointer,
+        _putId,
+        JniCallType.objectType,
+        [key.reference.pointer, value.reference.pointer]).object;
   }
 
-  static final _addAllId = Jni.accessors
-      .getMethodIDOf(_class.reference, r"putAll", r"(Ljava/util/Map;)V");
+  static final _addAllId = Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"putAll", r"(Ljava/util/Map;)V");
   @override
   void addAll(Map<$K, $V> other) {
     if (other is JMap<$K, $V>) {
-      Jni.accessors.callMethodWithArgs(reference, _addAllId,
-          JniCallType.voidType, [other.reference]).check();
+      Jni.accessors.callMethodWithArgs(reference.pointer, _addAllId,
+          JniCallType.voidType, [other.reference.pointer]).check();
       return;
     }
     super.addAll(other);
   }
 
   static final _clearId =
-      Jni.accessors.getMethodIDOf(_class.reference, r"clear", r"()V");
+      Jni.accessors.getMethodIDOf(_class.reference.pointer, r"clear", r"()V");
   @override
   void clear() {
     Jni.accessors.callMethodWithArgs(
-        reference, _clearId, JniCallType.voidType, []).check();
+        reference.pointer, _clearId, JniCallType.voidType, []).check();
   }
 
   static final _containsKeyId = Jni.accessors.getMethodIDOf(
-      _class.reference, r"containsKey", r"(Ljava/lang/Object;)Z");
+      _class.reference.pointer, r"containsKey", r"(Ljava/lang/Object;)Z");
   @override
   bool containsKey(Object? key) {
     if (key is! JObject) {
       return false;
     }
-    return Jni.accessors.callMethodWithArgs(reference, _containsKeyId,
-        JniCallType.booleanType, [key.reference]).boolean;
+    return Jni.accessors.callMethodWithArgs(reference.pointer, _containsKeyId,
+        JniCallType.booleanType, [key.reference.pointer]).boolean;
   }
 
   static final _containsValueId = Jni.accessors.getMethodIDOf(
-      _class.reference, r"containsValue", r"(Ljava/lang/Object;)Z");
+      _class.reference.pointer, r"containsValue", r"(Ljava/lang/Object;)Z");
   @override
   bool containsValue(Object? value) {
     if (value is! JObject) {
       return false;
     }
-    return Jni.accessors.callMethodWithArgs(reference, _containsValueId,
-        JniCallType.booleanType, [value.reference]).boolean;
+    return Jni.accessors.callMethodWithArgs(reference.pointer, _containsValueId,
+        JniCallType.booleanType, [value.reference.pointer]).boolean;
   }
 
   static final isEmptyId =
-      Jni.accessors.getMethodIDOf(_class.reference, r"isEmpty", r"()Z");
+      Jni.accessors.getMethodIDOf(_class.reference.pointer, r"isEmpty", r"()Z");
   @override
   bool get isEmpty => Jni.accessors.callMethodWithArgs(
-      reference, isEmptyId, JniCallType.booleanType, []).boolean;
+      reference.pointer, isEmptyId, JniCallType.booleanType, []).boolean;
 
   @override
   bool get isNotEmpty => !isEmpty;
 
   static final _keysId = Jni.accessors
-      .getMethodIDOf(_class.reference, r"keySet", r"()Ljava/util/Set;");
+      .getMethodIDOf(_class.reference.pointer, r"keySet", r"()Ljava/util/Set;");
   @override
   JSet<$K> get keys => JSetType(K).fromRef(Jni.accessors.callMethodWithArgs(
-      reference, _keysId, JniCallType.objectType, []).object);
+      reference.pointer, _keysId, JniCallType.objectType, []).object);
 
   static final _sizeId =
-      Jni.accessors.getMethodIDOf(_class.reference, r"size", r"()I");
+      Jni.accessors.getMethodIDOf(_class.reference.pointer, r"size", r"()I");
   @override
-  int get length => Jni.accessors
-      .callMethodWithArgs(reference, _sizeId, JniCallType.intType, []).integer;
+  int get length => Jni.accessors.callMethodWithArgs(
+      reference.pointer, _sizeId, JniCallType.intType, []).integer;
 
-  static final _removeId = Jni.accessors.getMethodIDOf(
-      _class.reference, r"remove", r"(Ljava/lang/Object;)Ljava/lang/Object;");
+  static final _removeId = Jni.accessors.getMethodIDOf(_class.reference.pointer,
+      r"remove", r"(Ljava/lang/Object;)Ljava/lang/Object;");
   @override
   $V? remove(Object? key) {
     if (key is! JObject) {
       return null;
     }
-    final value = V.fromRef(Jni.accessors.callMethodWithArgs(
-        reference, _removeId, JniCallType.objectType, [key.reference]).object);
+    final value = V.fromRef(Jni.accessors.callMethodWithArgs(reference.pointer,
+        _removeId, JniCallType.objectType, [key.reference.pointer]).object);
     return value.isNull ? null : value;
   }
 }
diff --git a/pkgs/jni/lib/src/util/jset.dart b/pkgs/jni/lib/src/util/jset.dart
index df51003..021de60 100644
--- a/pkgs/jni/lib/src/util/jset.dart
+++ b/pkgs/jni/lib/src/util/jset.dart
@@ -66,32 +66,32 @@
   }
 
   static final _hashSetClass = Jni.findJClass(r"java/util/HashSet");
-  static final _ctorId =
-      Jni.accessors.getMethodIDOf(_hashSetClass.reference, r"<init>", r"()V");
+  static final _ctorId = Jni.accessors
+      .getMethodIDOf(_hashSetClass.reference.pointer, r"<init>", r"()V");
   JSet.hash(this.E)
-      : super.fromRef(Jni.accessors
-            .newObjectWithArgs(_hashSetClass.reference, _ctorId, []).object);
+      : super.fromRef(Jni.accessors.newObjectWithArgs(
+            _hashSetClass.reference.pointer, _ctorId, []).object);
 
-  static final _addId = Jni.accessors
-      .getMethodIDOf(_class.reference, r"add", r"(Ljava/lang/Object;)Z");
+  static final _addId = Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"add", r"(Ljava/lang/Object;)Z");
   @override
   bool add($E value) {
-    return Jni.accessors.callMethodWithArgs(
-        reference, _addId, JniCallType.booleanType, [value.reference]).boolean;
+    return Jni.accessors.callMethodWithArgs(reference.pointer, _addId,
+        JniCallType.booleanType, [value.reference.pointer]).boolean;
   }
 
-  static final _addAllId = Jni.accessors
-      .getMethodIDOf(_class.reference, r"addAll", r"(Ljava/util/Collection;)Z");
+  static final _addAllId = Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"addAll", r"(Ljava/util/Collection;)Z");
   @override
   void addAll(Iterable<$E> elements) {
     if (elements is JObject &&
-        Jni.env.IsInstanceOf(
-            (elements as JObject).reference, _collectionClass.reference)) {
+        Jni.env.IsInstanceOf((elements as JObject).reference.pointer,
+            _collectionClass.reference.pointer)) {
       Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _addAllId,
         JniCallType.booleanType,
-        [(elements as JObject).reference],
+        [(elements as JObject).reference.pointer],
       ).boolean;
       return;
     }
@@ -99,95 +99,104 @@
   }
 
   static final _clearId =
-      Jni.accessors.getMethodIDOf(_class.reference, r"clear", r"()V");
+      Jni.accessors.getMethodIDOf(_class.reference.pointer, r"clear", r"()V");
   @override
   void clear() {
     return Jni.accessors.callMethodWithArgs(
-        reference, _clearId, JniCallType.voidType, []).check();
+        reference.pointer, _clearId, JniCallType.voidType, []).check();
   }
 
-  static final _containsId = Jni.accessors
-      .getMethodIDOf(_class.reference, r"contains", r"(Ljava/lang/Object;)Z");
+  static final _containsId = Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"contains", r"(Ljava/lang/Object;)Z");
 
   @override
   bool contains(Object? element) {
     if (element is! JObject) {
       return false;
     }
-    return Jni.accessors.callMethodWithArgs(reference, _containsId,
-        JniCallType.booleanType, [element.reference]).boolean;
+    return Jni.accessors.callMethodWithArgs(reference.pointer, _containsId,
+        JniCallType.booleanType, [element.reference.pointer]).boolean;
   }
 
   static final _containsAllId = Jni.accessors.getMethodIDOf(
-      _class.reference, r"containsAll", r"(Ljava/util/Collection;)Z");
+      _class.reference.pointer, r"containsAll", r"(Ljava/util/Collection;)Z");
   static final _collectionClass = Jni.findJClass("java/util/Collection");
   @override
   bool containsAll(Iterable<Object?> other) {
     if (other is JObject &&
-        Jni.env.IsInstanceOf(
-            (other as JObject).reference, _collectionClass.reference)) {
-      return Jni.accessors.callMethodWithArgs(reference, _containsAllId,
-          JniCallType.booleanType, [(other as JObject).reference]).boolean;
+        Jni.env.IsInstanceOf((other as JObject).reference.pointer,
+            _collectionClass.reference.pointer)) {
+      return Jni.accessors.callMethodWithArgs(
+          reference.pointer,
+          _containsAllId,
+          JniCallType.booleanType,
+          [(other as JObject).reference.pointer]).boolean;
     }
     return super.containsAll(other);
   }
 
   static final _isEmptyId =
-      Jni.accessors.getMethodIDOf(_class.reference, r"isEmpty", r"()Z");
+      Jni.accessors.getMethodIDOf(_class.reference.pointer, r"isEmpty", r"()Z");
   @override
   bool get isEmpty => Jni.accessors.callMethodWithArgs(
-      reference, _isEmptyId, JniCallType.booleanType, []).boolean;
+      reference.pointer, _isEmptyId, JniCallType.booleanType, []).boolean;
 
   @override
   bool get isNotEmpty => !isEmpty;
 
-  static final _iteratorId = Jni.accessors
-      .getMethodIDOf(_class.reference, r"iterator", r"()Ljava/util/Iterator;");
+  static final _iteratorId = Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"iterator", r"()Ljava/util/Iterator;");
   @override
   JIterator<$E> get iterator =>
       JIteratorType(E).fromRef(Jni.accessors.callMethodWithArgs(
-          reference, _iteratorId, JniCallType.objectType, []).object);
+          reference.pointer, _iteratorId, JniCallType.objectType, []).object);
 
   static final _sizeId =
-      Jni.accessors.getMethodIDOf(_class.reference, r"size", r"()I");
+      Jni.accessors.getMethodIDOf(_class.reference.pointer, r"size", r"()I");
   @override
-  int get length => Jni.accessors
-      .callMethodWithArgs(reference, _sizeId, JniCallType.intType, []).integer;
+  int get length => Jni.accessors.callMethodWithArgs(
+      reference.pointer, _sizeId, JniCallType.intType, []).integer;
 
-  static final _removeId = Jni.accessors
-      .getMethodIDOf(_class.reference, r"remove", r"(Ljava/lang/Object;)Z");
+  static final _removeId = Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"remove", r"(Ljava/lang/Object;)Z");
   @override
   bool remove(Object? value) {
     if (value is! $E) {
       return false;
     }
-    return Jni.accessors.callMethodWithArgs(reference, _removeId,
-        JniCallType.booleanType, [value.reference]).boolean;
+    return Jni.accessors.callMethodWithArgs(reference.pointer, _removeId,
+        JniCallType.booleanType, [value.reference.pointer]).boolean;
   }
 
   static final _removeAllId = Jni.accessors.getMethodIDOf(
-      _class.reference, r"removeAll", r"(Ljava/util/Collection;)Z");
+      _class.reference.pointer, r"removeAll", r"(Ljava/util/Collection;)Z");
   @override
   void removeAll(Iterable<Object?> elements) {
     if (elements is JObject &&
-        Jni.env.IsInstanceOf(
-            (elements as JObject).reference, _collectionClass.reference)) {
-      Jni.accessors.callMethodWithArgs(reference, _removeAllId,
-          JniCallType.booleanType, [(elements as JObject).reference]).boolean;
+        Jni.env.IsInstanceOf((elements as JObject).reference.pointer,
+            _collectionClass.reference.pointer)) {
+      Jni.accessors.callMethodWithArgs(
+          reference.pointer,
+          _removeAllId,
+          JniCallType.booleanType,
+          [(elements as JObject).reference.pointer]).boolean;
       return;
     }
     return super.removeAll(elements);
   }
 
   static final _retainAllId = Jni.accessors.getMethodIDOf(
-      _class.reference, r"retainAll", r"(Ljava/util/Collection;)Z");
+      _class.reference.pointer, r"retainAll", r"(Ljava/util/Collection;)Z");
   @override
   void retainAll(Iterable<Object?> elements) {
     if (elements is JObject &&
-        Jni.env.IsInstanceOf(
-            (elements as JObject).reference, _collectionClass.reference)) {
-      Jni.accessors.callMethodWithArgs(reference, _retainAllId,
-          JniCallType.booleanType, [(elements as JObject).reference]).boolean;
+        Jni.env.IsInstanceOf((elements as JObject).reference.pointer,
+            _collectionClass.reference.pointer)) {
+      Jni.accessors.callMethodWithArgs(
+          reference.pointer,
+          _retainAllId,
+          JniCallType.booleanType,
+          [(elements as JObject).reference.pointer]).boolean;
       return;
     }
     return super.retainAll(elements);
diff --git a/pkgs/jni/test/jarray_test.dart b/pkgs/jni/test/jarray_test.dart
index 064bc84..43d6e5d 100644
--- a/pkgs/jni/test/jarray_test.dart
+++ b/pkgs/jni/test/jarray_test.dart
@@ -259,9 +259,9 @@
     using((arena) {
       final array = JArray(JObject.type, 3)..releasedBy(arena);
       expect(array.length, 3);
-      expect(array[0].reference, nullptr);
-      expect(array[1].reference, nullptr);
-      expect(array[2].reference, nullptr);
+      expect(array[0].reference.pointer, nullptr);
+      expect(array[1].reference.pointer, nullptr);
+      expect(array[2].reference.pointer, nullptr);
     });
   });
   testRunner("Java 2d array", () {
diff --git a/pkgs/jni/test/load_test.dart b/pkgs/jni/test/load_test.dart
index d74a5fc..ff25bc3 100644
--- a/pkgs/jni/test/load_test.dart
+++ b/pkgs/jni/test/load_test.dart
@@ -121,7 +121,7 @@
         isA<int>(),
       );
       expect(
-        Jni.env.GetObjectRefType(random.reference),
+        Jni.env.GetObjectRefType(random.reference.pointer),
         equals(JObjectRefType.JNIGlobalRefType),
       );
     });
diff --git a/pkgs/jnigen/example/in_app_java/lib/android_utils.dart b/pkgs/jnigen/example/in_app_java/lib/android_utils.dart
index 0be99f7..d47f3a1 100644
--- a/pkgs/jnigen/example/in_app_java/lib/android_utils.dart
+++ b/pkgs/jnigen/example/in_app_java/lib/android_utils.dart
@@ -99,7 +99,8 @@
   factory EmojiCompat_Config(
     EmojiCompat_MetadataRepoLoader metadataLoader,
   ) {
-    return EmojiCompat_Config.fromRef(_new0(metadataLoader.reference).object);
+    return EmojiCompat_Config.fromRef(
+        _new0(metadataLoader.reference.pointer).object);
   }
 
   static final _registerInitCallback = jniLookup<
@@ -121,7 +122,8 @@
     EmojiCompat_InitCallback initCallback,
   ) {
     return const $EmojiCompat_ConfigType().fromRef(
-        _registerInitCallback(reference, initCallback.reference).object);
+        _registerInitCallback(reference.pointer, initCallback.reference.pointer)
+            .object);
   }
 
   static final _unregisterInitCallback = jniLookup<
@@ -142,8 +144,9 @@
   EmojiCompat_Config unregisterInitCallback(
     EmojiCompat_InitCallback initCallback,
   ) {
-    return const $EmojiCompat_ConfigType().fromRef(
-        _unregisterInitCallback(reference, initCallback.reference).object);
+    return const $EmojiCompat_ConfigType().fromRef(_unregisterInitCallback(
+            reference.pointer, initCallback.reference.pointer)
+        .object);
   }
 
   static final _setReplaceAll = jniLookup<
@@ -164,7 +167,7 @@
     bool replaceAll,
   ) {
     return const $EmojiCompat_ConfigType()
-        .fromRef(_setReplaceAll(reference, replaceAll ? 1 : 0).object);
+        .fromRef(_setReplaceAll(reference.pointer, replaceAll ? 1 : 0).object);
   }
 
   static final _setUseEmojiAsDefaultStyle = jniLookup<
@@ -191,9 +194,9 @@
   EmojiCompat_Config setUseEmojiAsDefaultStyle(
     bool useEmojiAsDefaultStyle,
   ) {
-    return const $EmojiCompat_ConfigType().fromRef(
-        _setUseEmojiAsDefaultStyle(reference, useEmojiAsDefaultStyle ? 1 : 0)
-            .object);
+    return const $EmojiCompat_ConfigType().fromRef(_setUseEmojiAsDefaultStyle(
+            reference.pointer, useEmojiAsDefaultStyle ? 1 : 0)
+        .object);
   }
 
   static final _setUseEmojiAsDefaultStyle1 = jniLookup<
@@ -225,9 +228,9 @@
     jni.JList<jni.JInteger> emojiAsDefaultStyleExceptions,
   ) {
     return const $EmojiCompat_ConfigType().fromRef(_setUseEmojiAsDefaultStyle1(
-            reference,
+            reference.pointer,
             useEmojiAsDefaultStyle ? 1 : 0,
-            emojiAsDefaultStyleExceptions.reference)
+            emojiAsDefaultStyleExceptions.reference.pointer)
         .object);
   }
 
@@ -250,7 +253,7 @@
   ) {
     return const $EmojiCompat_ConfigType().fromRef(
         _setEmojiSpanIndicatorEnabled(
-                reference, emojiSpanIndicatorEnabled ? 1 : 0)
+                reference.pointer, emojiSpanIndicatorEnabled ? 1 : 0)
             .object);
   }
 
@@ -270,7 +273,7 @@
     int color,
   ) {
     return const $EmojiCompat_ConfigType()
-        .fromRef(_setEmojiSpanIndicatorColor(reference, color).object);
+        .fromRef(_setEmojiSpanIndicatorColor(reference.pointer, color).object);
   }
 
   static final _setMetadataLoadStrategy = jniLookup<
@@ -318,7 +321,7 @@
     int strategy,
   ) {
     return const $EmojiCompat_ConfigType()
-        .fromRef(_setMetadataLoadStrategy(reference, strategy).object);
+        .fromRef(_setMetadataLoadStrategy(reference.pointer, strategy).object);
   }
 
   static final _setSpanFactory = jniLookup<
@@ -338,8 +341,8 @@
   EmojiCompat_Config setSpanFactory(
     EmojiCompat_SpanFactory factory0,
   ) {
-    return const $EmojiCompat_ConfigType()
-        .fromRef(_setSpanFactory(reference, factory0.reference).object);
+    return const $EmojiCompat_ConfigType().fromRef(
+        _setSpanFactory(reference.pointer, factory0.reference.pointer).object);
   }
 
   static final _setGlyphChecker = jniLookup<
@@ -360,8 +363,9 @@
   EmojiCompat_Config setGlyphChecker(
     EmojiCompat_GlyphChecker glyphChecker,
   ) {
-    return const $EmojiCompat_ConfigType()
-        .fromRef(_setGlyphChecker(reference, glyphChecker.reference).object);
+    return const $EmojiCompat_ConfigType().fromRef(
+        _setGlyphChecker(reference.pointer, glyphChecker.reference.pointer)
+            .object);
   }
 
   static final _getMetadataRepoLoader = jniLookup<
@@ -376,7 +380,7 @@
   /// Returns the MetadataRepoLoader.
   EmojiCompat_MetadataRepoLoader getMetadataRepoLoader() {
     return const $EmojiCompat_MetadataRepoLoaderType()
-        .fromRef(_getMetadataRepoLoader(reference).object);
+        .fromRef(_getMetadataRepoLoader(reference.pointer).object);
   }
 }
 
@@ -448,8 +452,8 @@
   jni.JObject createSpan(
     jni.JObject rasterizer,
   ) {
-    return const jni.JObjectType()
-        .fromRef(_createSpan(reference, rasterizer.reference).object);
+    return const jni.JObjectType().fromRef(
+        _createSpan(reference.pointer, rasterizer.reference.pointer).object);
   }
 }
 
@@ -549,7 +553,8 @@
     int end,
     int sdkAdded,
   ) {
-    return _hasGlyph(reference, charSequence.reference, start, end, sdkAdded)
+    return _hasGlyph(reference.pointer, charSequence.reference.pointer, start,
+            end, sdkAdded)
         .boolean;
   }
 }
@@ -615,7 +620,7 @@
   /// Called when EmojiCompat is initialized and the emoji data is loaded. When used on devices
   /// running API 18 or below, this function is always called.
   void onInitialized() {
-    return _onInitialized(reference).check();
+    return _onInitialized(reference.pointer).check();
   }
 
   static final _onFailed = jniLookup<
@@ -633,7 +638,7 @@
   void onFailed(
     jni.JObject throwable,
   ) {
-    return _onFailed(reference, throwable.reference).check();
+    return _onFailed(reference.pointer, throwable.reference.pointer).check();
   }
 }
 
@@ -735,7 +740,7 @@
   void load(
     EmojiCompat_MetadataRepoLoaderCallback loaderCallback,
   ) {
-    return _load(reference, loaderCallback.reference).check();
+    return _load(reference.pointer, loaderCallback.reference.pointer).check();
   }
 }
 
@@ -807,7 +812,7 @@
   void onLoaded(
     jni.JObject metadataRepo,
   ) {
-    return _onLoaded(reference, metadataRepo.reference).check();
+    return _onLoaded(reference.pointer, metadataRepo.reference.pointer).check();
   }
 
   static final _onFailed = jniLookup<
@@ -826,7 +831,7 @@
   void onFailed(
     jni.JObject throwable,
   ) {
-    return _onFailed(reference, throwable.reference).check();
+    return _onFailed(reference.pointer, throwable.reference.pointer).check();
   }
 }
 
@@ -935,8 +940,8 @@
   jni.JObject createSpan(
     jni.JObject rasterizer,
   ) {
-    return const jni.JObjectType()
-        .fromRef(_createSpan(reference, rasterizer.reference).object);
+    return const jni.JObjectType().fromRef(
+        _createSpan(reference.pointer, rasterizer.reference.pointer).object);
   }
 }
 
@@ -1247,7 +1252,8 @@
   static EmojiCompat init(
     jni.JObject context,
   ) {
-    return const $EmojiCompatType().fromRef(_init(context.reference).object);
+    return const $EmojiCompatType()
+        .fromRef(_init(context.reference.pointer).object);
   }
 
   static final _init1 = jniLookup<
@@ -1266,8 +1272,9 @@
     jni.JObject context,
     DefaultEmojiCompatConfig_DefaultEmojiCompatConfigFactory defaultFactory,
   ) {
-    return const $EmojiCompatType()
-        .fromRef(_init1(context.reference, defaultFactory.reference).object);
+    return const $EmojiCompatType().fromRef(
+        _init1(context.reference.pointer, defaultFactory.reference.pointer)
+            .object);
   }
 
   static final _init2 = jniLookup<
@@ -1288,7 +1295,8 @@
   static EmojiCompat init2(
     EmojiCompat_Config config,
   ) {
-    return const $EmojiCompatType().fromRef(_init2(config.reference).object);
+    return const $EmojiCompatType()
+        .fromRef(_init2(config.reference.pointer).object);
   }
 
   static final _isConfigured =
@@ -1326,7 +1334,8 @@
   static EmojiCompat reset(
     EmojiCompat_Config config,
   ) {
-    return const $EmojiCompatType().fromRef(_reset(config.reference).object);
+    return const $EmojiCompatType()
+        .fromRef(_reset(config.reference.pointer).object);
   }
 
   static final _reset1 = jniLookup<
@@ -1344,7 +1353,7 @@
     EmojiCompat emojiCompat,
   ) {
     return const $EmojiCompatType()
-        .fromRef(_reset1(emojiCompat.reference).object);
+        .fromRef(_reset1(emojiCompat.reference.pointer).object);
   }
 
   static final _skipDefaultConfigurationLookup =
@@ -1399,7 +1408,7 @@
   ///@throws IllegalStateException when Config\#setMetadataLoadStrategy(int) is not set
   /// to \#LOAD_STRATEGY_MANUAL
   void load() {
-    return _load(reference).check();
+    return _load(reference.pointer).check();
   }
 
   static final _registerInitCallback = jniLookup<
@@ -1424,7 +1433,9 @@
   void registerInitCallback(
     EmojiCompat_InitCallback initCallback,
   ) {
-    return _registerInitCallback(reference, initCallback.reference).check();
+    return _registerInitCallback(
+            reference.pointer, initCallback.reference.pointer)
+        .check();
   }
 
   static final _unregisterInitCallback = jniLookup<
@@ -1443,7 +1454,9 @@
   void unregisterInitCallback(
     EmojiCompat_InitCallback initCallback,
   ) {
-    return _unregisterInitCallback(reference, initCallback.reference).check();
+    return _unregisterInitCallback(
+            reference.pointer, initCallback.reference.pointer)
+        .check();
   }
 
   static final _getLoadState = jniLookup<
@@ -1459,7 +1472,7 @@
   ///@return one of \#LOAD_STATE_DEFAULT, \#LOAD_STATE_LOADING,
   /// \#LOAD_STATE_SUCCEEDED, \#LOAD_STATE_FAILED
   int getLoadState() {
-    return _getLoadState(reference).integer;
+    return _getLoadState(reference.pointer).integer;
   }
 
   static final _isEmojiSpanIndicatorEnabled = jniLookup<
@@ -1473,7 +1486,7 @@
   /// @return whether a background should be drawn for the emoji for debugging
   ///@hide
   bool isEmojiSpanIndicatorEnabled() {
-    return _isEmojiSpanIndicatorEnabled(reference).boolean;
+    return _isEmojiSpanIndicatorEnabled(reference.pointer).boolean;
   }
 
   static final _getEmojiSpanIndicatorColor = jniLookup<
@@ -1487,7 +1500,7 @@
   /// @return color of background drawn if EmojiCompat\#isEmojiSpanIndicatorEnabled is true
   ///@hide
   int getEmojiSpanIndicatorColor() {
-    return _getEmojiSpanIndicatorColor(reference).integer;
+    return _getEmojiSpanIndicatorColor(reference.pointer).integer;
   }
 
   static final _getEmojiStart = jniLookup<
@@ -1515,7 +1528,9 @@
     jni.JObject charSequence,
     int offset,
   ) {
-    return _getEmojiStart(reference, charSequence.reference, offset).integer;
+    return _getEmojiStart(
+            reference.pointer, charSequence.reference.pointer, offset)
+        .integer;
   }
 
   static final _getEmojiEnd = jniLookup<
@@ -1535,7 +1550,9 @@
     jni.JObject charSequence,
     int offset,
   ) {
-    return _getEmojiEnd(reference, charSequence.reference, offset).integer;
+    return _getEmojiEnd(
+            reference.pointer, charSequence.reference.pointer, offset)
+        .integer;
   }
 
   static final _handleOnKeyDown = jniLookup<
@@ -1569,7 +1586,8 @@
     int keyCode,
     jni.JObject event,
   ) {
-    return _handleOnKeyDown(editable.reference, keyCode, event.reference)
+    return _handleOnKeyDown(
+            editable.reference.pointer, keyCode, event.reference.pointer)
         .boolean;
   }
 
@@ -1608,8 +1626,12 @@
     int afterLength,
     bool inCodePoints,
   ) {
-    return _handleDeleteSurroundingText(inputConnection.reference,
-            editable.reference, beforeLength, afterLength, inCodePoints ? 1 : 0)
+    return _handleDeleteSurroundingText(
+            inputConnection.reference.pointer,
+            editable.reference.pointer,
+            beforeLength,
+            afterLength,
+            inCodePoints ? 1 : 0)
         .boolean;
   }
 
@@ -1632,7 +1654,8 @@
   bool hasEmojiGlyph(
     jni.JObject sequence,
   ) {
-    return _hasEmojiGlyph(reference, sequence.reference).boolean;
+    return _hasEmojiGlyph(reference.pointer, sequence.reference.pointer)
+        .boolean;
   }
 
   static final _hasEmojiGlyph1 = jniLookup<
@@ -1659,7 +1682,8 @@
     jni.JObject sequence,
     int metadataVersion,
   ) {
-    return _hasEmojiGlyph1(reference, sequence.reference, metadataVersion)
+    return _hasEmojiGlyph1(
+            reference.pointer, sequence.reference.pointer, metadataVersion)
         .boolean;
   }
 
@@ -1690,7 +1714,8 @@
     jni.JObject sequence,
     int metadataVersion,
   ) {
-    return _getEmojiMatch(reference, sequence.reference, metadataVersion)
+    return _getEmojiMatch(
+            reference.pointer, sequence.reference.pointer, metadataVersion)
         .integer;
   }
 
@@ -1714,8 +1739,8 @@
   jni.JObject process(
     jni.JObject charSequence,
   ) {
-    return const jni.JObjectType()
-        .fromRef(_process(reference, charSequence.reference).object);
+    return const jni.JObjectType().fromRef(
+        _process(reference.pointer, charSequence.reference.pointer).object);
   }
 
   static final _process1 = jniLookup<
@@ -1761,7 +1786,8 @@
     int end,
   ) {
     return const jni.JObjectType().fromRef(
-        _process1(reference, charSequence.reference, start, end).object);
+        _process1(reference.pointer, charSequence.reference.pointer, start, end)
+            .object);
   }
 
   static final _process2 = jniLookup<
@@ -1811,9 +1837,9 @@
     int end,
     int maxEmojiCount,
   ) {
-    return const jni.JObjectType().fromRef(
-        _process2(reference, charSequence.reference, start, end, maxEmojiCount)
-            .object);
+    return const jni.JObjectType().fromRef(_process2(reference.pointer,
+            charSequence.reference.pointer, start, end, maxEmojiCount)
+        .object);
   }
 
   static final _process3 = jniLookup<
@@ -1869,8 +1895,13 @@
     int maxEmojiCount,
     int replaceStrategy,
   ) {
-    return const jni.JObjectType().fromRef(_process3(reference,
-            charSequence.reference, start, end, maxEmojiCount, replaceStrategy)
+    return const jni.JObjectType().fromRef(_process3(
+            reference.pointer,
+            charSequence.reference.pointer,
+            start,
+            end,
+            maxEmojiCount,
+            replaceStrategy)
         .object);
   }
 
@@ -1889,7 +1920,7 @@
   ///@throws IllegalStateException if not initialized yet
   jni.JString getAssetSignature() {
     return const jni.JStringType()
-        .fromRef(_getAssetSignature(reference).object);
+        .fromRef(_getAssetSignature(reference.pointer).object);
   }
 
   static final _updateEditorInfo = jniLookup<
@@ -1920,7 +1951,8 @@
   void updateEditorInfo(
     jni.JObject outAttrs,
   ) {
-    return _updateEditorInfo(reference, outAttrs.reference).check();
+    return _updateEditorInfo(reference.pointer, outAttrs.reference.pointer)
+        .check();
   }
 }
 
@@ -1981,7 +2013,7 @@
     DefaultEmojiCompatConfig_DefaultEmojiCompatConfigHelper helper,
   ) {
     return DefaultEmojiCompatConfig_DefaultEmojiCompatConfigFactory.fromRef(
-        _new0(helper.reference).object);
+        _new0(helper.reference.pointer).object);
   }
 
   static final _create = jniLookup<
@@ -2002,7 +2034,7 @@
     jni.JObject context,
   ) {
     return const $EmojiCompat_ConfigType()
-        .fromRef(_create(reference, context.reference).object);
+        .fromRef(_create(reference.pointer, context.reference.pointer).object);
   }
 }
 
@@ -2086,7 +2118,9 @@
   ) {
     return const jni.JArrayType(jni.JObjectType()).fromRef(
         _getSigningSignatures(
-                reference, packageManager.reference, providerPackage.reference)
+                reference.pointer,
+                packageManager.reference.pointer,
+                providerPackage.reference.pointer)
             .object);
   }
 
@@ -2113,7 +2147,10 @@
   ) {
     return const jni.JListType(jni.JObjectType()).fromRef(
         _queryIntentContentProviders(
-                reference, packageManager.reference, intent.reference, flags)
+                reference.pointer,
+                packageManager.reference.pointer,
+                intent.reference.pointer,
+                flags)
             .object);
   }
 
@@ -2135,8 +2172,9 @@
   jni.JObject getProviderInfo(
     jni.JObject resolveInfo,
   ) {
-    return const jni.JObjectType()
-        .fromRef(_getProviderInfo(reference, resolveInfo.reference).object);
+    return const jni.JObjectType().fromRef(
+        _getProviderInfo(reference.pointer, resolveInfo.reference.pointer)
+            .object);
   }
 }
 
@@ -2222,7 +2260,10 @@
   ) {
     return const jni.JListType(jni.JObjectType()).fromRef(
         _queryIntentContentProviders(
-                reference, packageManager.reference, intent.reference, flags)
+                reference.pointer,
+                packageManager.reference.pointer,
+                intent.reference.pointer,
+                flags)
             .object);
   }
 
@@ -2240,8 +2281,9 @@
   jni.JObject getProviderInfo(
     jni.JObject resolveInfo,
   ) {
-    return const jni.JObjectType()
-        .fromRef(_getProviderInfo(reference, resolveInfo.reference).object);
+    return const jni.JObjectType().fromRef(
+        _getProviderInfo(reference.pointer, resolveInfo.reference.pointer)
+            .object);
   }
 }
 
@@ -2327,7 +2369,9 @@
   ) {
     return const jni.JArrayType(jni.JObjectType()).fromRef(
         _getSigningSignatures1(
-                reference, packageManager.reference, providerPackage.reference)
+                reference.pointer,
+                packageManager.reference.pointer,
+                providerPackage.reference.pointer)
             .object);
   }
 }
@@ -2435,7 +2479,8 @@
   static jni.JObject create(
     jni.JObject context,
   ) {
-    return const jni.JObjectType().fromRef(_create(context.reference).object);
+    return const jni.JObjectType()
+        .fromRef(_create(context.reference.pointer).object);
   }
 }
 
@@ -2496,7 +2541,7 @@
   /// from: public java.lang.String getName()
   /// The returned object must be released after use, by calling the [release] method.
   jni.JString getName() {
-    return const jni.JStringType().fromRef(_getName(reference).object);
+    return const jni.JStringType().fromRef(_getName(reference.pointer).object);
   }
 
   static final _getFingerprint = jniLookup<
@@ -2508,7 +2553,8 @@
   /// from: public java.lang.String getFingerprint()
   /// The returned object must be released after use, by calling the [release] method.
   jni.JString getFingerprint() {
-    return const jni.JStringType().fromRef(_getFingerprint(reference).object);
+    return const jni.JStringType()
+        .fromRef(_getFingerprint(reference.pointer).object);
   }
 
   static final _getBuildTimeMillis = jniLookup<
@@ -2519,7 +2565,7 @@
 
   /// from: public long getBuildTimeMillis()
   int getBuildTimeMillis() {
-    return _getBuildTimeMillis(reference).long;
+    return _getBuildTimeMillis(reference.pointer).long;
   }
 
   static final _equals1 = jniLookup<
@@ -2534,7 +2580,7 @@
   bool equals1(
     jni.JObject object,
   ) {
-    return _equals1(reference, object.reference).boolean;
+    return _equals1(reference.pointer, object.reference.pointer).boolean;
   }
 
   static final _hashCode1 = jniLookup<
@@ -2545,7 +2591,7 @@
 
   /// from: public int hashCode()
   int hashCode1() {
-    return _hashCode1(reference).integer;
+    return _hashCode1(reference.pointer).integer;
   }
 }
 
@@ -3319,7 +3365,7 @@
     V ??= jni.lowestCommonSuperType([
       (map.$type as jni.JMapType).V,
     ]) as jni.JObjType<$V>;
-    return HashMap.fromRef(K, V, _new3(map.reference).object);
+    return HashMap.fromRef(K, V, _new3(map.reference.pointer).object);
   }
 
   static final _size = jniLookup<
@@ -3329,7 +3375,7 @@
 
   /// from: public int size()
   int size() {
-    return _size(reference).integer;
+    return _size(reference.pointer).integer;
   }
 
   static final _isEmpty = jniLookup<
@@ -3340,7 +3386,7 @@
 
   /// from: public boolean isEmpty()
   bool isEmpty() {
-    return _isEmpty(reference).boolean;
+    return _isEmpty(reference.pointer).boolean;
   }
 
   static final _get0 = jniLookup<
@@ -3356,7 +3402,7 @@
   $V get0(
     jni.JObject object,
   ) {
-    return V.fromRef(_get0(reference, object.reference).object);
+    return V.fromRef(_get0(reference.pointer, object.reference.pointer).object);
   }
 
   static final _containsKey = jniLookup<
@@ -3371,7 +3417,7 @@
   bool containsKey(
     jni.JObject object,
   ) {
-    return _containsKey(reference, object.reference).boolean;
+    return _containsKey(reference.pointer, object.reference.pointer).boolean;
   }
 
   static final _put = jniLookup<
@@ -3390,8 +3436,9 @@
     $K object,
     $V object1,
   ) {
-    return V
-        .fromRef(_put(reference, object.reference, object1.reference).object);
+    return V.fromRef(_put(reference.pointer, object.reference.pointer,
+            object1.reference.pointer)
+        .object);
   }
 
   static final _putAll = jniLookup<
@@ -3406,7 +3453,7 @@
   void putAll(
     jni.JMap<$K, $V> map,
   ) {
-    return _putAll(reference, map.reference).check();
+    return _putAll(reference.pointer, map.reference.pointer).check();
   }
 
   static final _remove = jniLookup<
@@ -3422,7 +3469,8 @@
   $V remove(
     jni.JObject object,
   ) {
-    return V.fromRef(_remove(reference, object.reference).object);
+    return V
+        .fromRef(_remove(reference.pointer, object.reference.pointer).object);
   }
 
   static final _clear = jniLookup<
@@ -3432,7 +3480,7 @@
 
   /// from: public void clear()
   void clear() {
-    return _clear(reference).check();
+    return _clear(reference.pointer).check();
   }
 
   static final _containsValue = jniLookup<
@@ -3447,7 +3495,7 @@
   bool containsValue(
     jni.JObject object,
   ) {
-    return _containsValue(reference, object.reference).boolean;
+    return _containsValue(reference.pointer, object.reference.pointer).boolean;
   }
 
   static final _keySet = jniLookup<
@@ -3458,7 +3506,7 @@
   /// from: public java.util.Set keySet()
   /// The returned object must be released after use, by calling the [release] method.
   jni.JSet<$K> keySet() {
-    return jni.JSetType(K).fromRef(_keySet(reference).object);
+    return jni.JSetType(K).fromRef(_keySet(reference.pointer).object);
   }
 
   static final _values = jniLookup<
@@ -3469,7 +3517,7 @@
   /// from: public java.util.Collection values()
   /// The returned object must be released after use, by calling the [release] method.
   jni.JObject values() {
-    return const jni.JObjectType().fromRef(_values(reference).object);
+    return const jni.JObjectType().fromRef(_values(reference.pointer).object);
   }
 
   static final _entrySet = jniLookup<
@@ -3482,7 +3530,7 @@
   /// The returned object must be released after use, by calling the [release] method.
   jni.JSet<jni.JObject> entrySet() {
     return const jni.JSetType(jni.JObjectType())
-        .fromRef(_entrySet(reference).object);
+        .fromRef(_entrySet(reference.pointer).object);
   }
 
   static final _getOrDefault = jniLookup<
@@ -3501,8 +3549,9 @@
     jni.JObject object,
     $V object1,
   ) {
-    return V.fromRef(
-        _getOrDefault(reference, object.reference, object1.reference).object);
+    return V.fromRef(_getOrDefault(reference.pointer, object.reference.pointer,
+            object1.reference.pointer)
+        .object);
   }
 
   static final _putIfAbsent = jniLookup<
@@ -3521,8 +3570,9 @@
     $K object,
     $V object1,
   ) {
-    return V.fromRef(
-        _putIfAbsent(reference, object.reference, object1.reference).object);
+    return V.fromRef(_putIfAbsent(reference.pointer, object.reference.pointer,
+            object1.reference.pointer)
+        .object);
   }
 
   static final _remove1 = jniLookup<
@@ -3540,7 +3590,9 @@
     jni.JObject object,
     jni.JObject object1,
   ) {
-    return _remove1(reference, object.reference, object1.reference).boolean;
+    return _remove1(reference.pointer, object.reference.pointer,
+            object1.reference.pointer)
+        .boolean;
   }
 
   static final _replace = jniLookup<
@@ -3560,8 +3612,8 @@
     $V object1,
     $V object2,
   ) {
-    return _replace(
-            reference, object.reference, object1.reference, object2.reference)
+    return _replace(reference.pointer, object.reference.pointer,
+            object1.reference.pointer, object2.reference.pointer)
         .boolean;
   }
 
@@ -3581,8 +3633,9 @@
     $K object,
     $V object1,
   ) {
-    return V.fromRef(
-        _replace1(reference, object.reference, object1.reference).object);
+    return V.fromRef(_replace1(reference.pointer, object.reference.pointer,
+            object1.reference.pointer)
+        .object);
   }
 
   static final _computeIfAbsent = jniLookup<
@@ -3601,9 +3654,9 @@
     $K object,
     jni.JObject function,
   ) {
-    return V.fromRef(
-        _computeIfAbsent(reference, object.reference, function.reference)
-            .object);
+    return V.fromRef(_computeIfAbsent(reference.pointer,
+            object.reference.pointer, function.reference.pointer)
+        .object);
   }
 
   static final _computeIfPresent = jniLookup<
@@ -3622,9 +3675,9 @@
     $K object,
     jni.JObject biFunction,
   ) {
-    return V.fromRef(
-        _computeIfPresent(reference, object.reference, biFunction.reference)
-            .object);
+    return V.fromRef(_computeIfPresent(reference.pointer,
+            object.reference.pointer, biFunction.reference.pointer)
+        .object);
   }
 
   static final _compute = jniLookup<
@@ -3643,8 +3696,9 @@
     $K object,
     jni.JObject biFunction,
   ) {
-    return V.fromRef(
-        _compute(reference, object.reference, biFunction.reference).object);
+    return V.fromRef(_compute(reference.pointer, object.reference.pointer,
+            biFunction.reference.pointer)
+        .object);
   }
 
   static final _merge = jniLookup<
@@ -3665,8 +3719,8 @@
     $V object1,
     jni.JObject biFunction,
   ) {
-    return V.fromRef(_merge(reference, object.reference, object1.reference,
-            biFunction.reference)
+    return V.fromRef(_merge(reference.pointer, object.reference.pointer,
+            object1.reference.pointer, biFunction.reference.pointer)
         .object);
   }
 
@@ -3682,7 +3736,7 @@
   void forEach(
     jni.JObject biConsumer,
   ) {
-    return _forEach(reference, biConsumer.reference).check();
+    return _forEach(reference.pointer, biConsumer.reference.pointer).check();
   }
 
   static final _replaceAll = jniLookup<
@@ -3697,7 +3751,7 @@
   void replaceAll(
     jni.JObject biFunction,
   ) {
-    return _replaceAll(reference, biFunction.reference).check();
+    return _replaceAll(reference.pointer, biFunction.reference.pointer).check();
   }
 
   static final _clone = jniLookup<
@@ -3708,7 +3762,7 @@
   /// from: public java.lang.Object clone()
   /// The returned object must be released after use, by calling the [release] method.
   jni.JObject clone() {
-    return const jni.JObjectType().fromRef(_clone(reference).object);
+    return const jni.JObjectType().fromRef(_clone(reference.pointer).object);
   }
 }
 
@@ -3771,7 +3825,9 @@
     jni.JObject text,
     int duration,
   ) {
-    return _showToast(mainActivity.reference, text.reference, duration).check();
+    return _showToast(
+            mainActivity.reference.pointer, text.reference.pointer, duration)
+        .check();
   }
 }
 
diff --git a/pkgs/jnigen/example/kotlin_plugin/lib/kotlin_bindings.dart b/pkgs/jnigen/example/kotlin_plugin/lib/kotlin_bindings.dart
index e1e7abb..10652ae 100644
--- a/pkgs/jnigen/example/kotlin_plugin/lib/kotlin_bindings.dart
+++ b/pkgs/jnigen/example/kotlin_plugin/lib/kotlin_bindings.dart
@@ -62,9 +62,9 @@
     final $p = ReceivePort();
     final $c =
         jni.JObject.fromRef(ProtectedJniExtensions.newPortContinuation($p));
-    _thinkBeforeAnswering(reference, $c.reference).object;
+    _thinkBeforeAnswering(reference.pointer, $c.reference.pointer).object;
     final $o = jni.JObjectPtr.fromAddress(await $p.first);
-    final $k = const jni.JStringType().getClass().reference;
+    final $k = const jni.JStringType().getClass().reference.pointer;
     if (!jni.Jni.env.IsInstanceOf($o, $k)) {
       throw "Failed";
     }
diff --git a/pkgs/jnigen/example/notification_plugin/lib/notifications.dart b/pkgs/jnigen/example/notification_plugin/lib/notifications.dart
index d91a2f5..0b5e313 100644
--- a/pkgs/jnigen/example/notification_plugin/lib/notifications.dart
+++ b/pkgs/jnigen/example/notification_plugin/lib/notifications.dart
@@ -70,8 +70,8 @@
     jni.JString title,
     jni.JString text,
   ) {
-    return _showNotification(
-            context.reference, notificationID, title.reference, text.reference)
+    return _showNotification(context.reference.pointer, notificationID,
+            title.reference.pointer, text.reference.pointer)
         .check();
   }
 }
diff --git a/pkgs/jnigen/example/pdfbox_plugin/example/lib/main.dart b/pkgs/jnigen/example/pdfbox_plugin/example/lib/main.dart
index ccc6563..51d0bbb 100644
--- a/pkgs/jnigen/example/pdfbox_plugin/example/lib/main.dart
+++ b/pkgs/jnigen/example/pdfbox_plugin/example/lib/main.dart
@@ -158,7 +158,7 @@
   /// Converts JString to dart string and deletes the original.
   /// Also handles the case where the underlying string is Null.
   String _fromJavaStr(JString jstr) {
-    if (jstr.reference == nullptr) {
+    if (jstr.reference.pointer == nullptr) {
       return '(null)';
     }
     return jstr.toDartString(releaseOriginal: true);
diff --git a/pkgs/jnigen/example/pdfbox_plugin/lib/src/third_party/org/apache/pdfbox/pdmodel/PDDocument.dart b/pkgs/jnigen/example/pdfbox_plugin/lib/src/third_party/org/apache/pdfbox/pdmodel/PDDocument.dart
index e8777cb..ca2d148 100644
--- a/pkgs/jnigen/example/pdfbox_plugin/lib/src/third_party/org/apache/pdfbox/pdmodel/PDDocument.dart
+++ b/pkgs/jnigen/example/pdfbox_plugin/lib/src/third_party/org/apache/pdfbox/pdmodel/PDDocument.dart
@@ -86,7 +86,7 @@
   factory PDDocument.new1(
     jni.JObject memUsageSetting,
   ) {
-    return PDDocument.fromRef(_new1(memUsageSetting.reference).object);
+    return PDDocument.fromRef(_new1(memUsageSetting.reference.pointer).object);
   }
 
   static final _new2 = jniLookup<
@@ -103,7 +103,7 @@
   factory PDDocument.new2(
     jni.JObject doc,
   ) {
-    return PDDocument.fromRef(_new2(doc.reference).object);
+    return PDDocument.fromRef(_new2(doc.reference.pointer).object);
   }
 
   static final _new3 = jniLookup<
@@ -124,7 +124,8 @@
     jni.JObject doc,
     jni.JObject source,
   ) {
-    return PDDocument.fromRef(_new3(doc.reference, source.reference).object);
+    return PDDocument.fromRef(
+        _new3(doc.reference.pointer, source.reference.pointer).object);
   }
 
   static final _new4 = jniLookup<
@@ -149,8 +150,9 @@
     jni.JObject source,
     jni.JObject permission,
   ) {
-    return PDDocument.fromRef(
-        _new4(doc.reference, source.reference, permission.reference).object);
+    return PDDocument.fromRef(_new4(doc.reference.pointer,
+            source.reference.pointer, permission.reference.pointer)
+        .object);
   }
 
   static final _addPage = jniLookup<
@@ -169,7 +171,7 @@
   void addPage(
     jni.JObject page,
   ) {
-    return _addPage(reference, page.reference).check();
+    return _addPage(reference.pointer, page.reference.pointer).check();
   }
 
   static final _addSignature = jniLookup<
@@ -195,7 +197,8 @@
   void addSignature(
     jni.JObject sigObject,
   ) {
-    return _addSignature(reference, sigObject.reference).check();
+    return _addSignature(reference.pointer, sigObject.reference.pointer)
+        .check();
   }
 
   static final _addSignature1 = jniLookup<
@@ -225,7 +228,8 @@
     jni.JObject sigObject,
     jni.JObject options,
   ) {
-    return _addSignature1(reference, sigObject.reference, options.reference)
+    return _addSignature1(reference.pointer, sigObject.reference.pointer,
+            options.reference.pointer)
         .check();
   }
 
@@ -255,8 +259,8 @@
     jni.JObject sigObject,
     jni.JObject signatureInterface,
   ) {
-    return _addSignature2(
-            reference, sigObject.reference, signatureInterface.reference)
+    return _addSignature2(reference.pointer, sigObject.reference.pointer,
+            signatureInterface.reference.pointer)
         .check();
   }
 
@@ -291,8 +295,8 @@
     jni.JObject signatureInterface,
     jni.JObject options,
   ) {
-    return _addSignature3(reference, sigObject.reference,
-            signatureInterface.reference, options.reference)
+    return _addSignature3(reference.pointer, sigObject.reference.pointer,
+            signatureInterface.reference.pointer, options.reference.pointer)
         .check();
   }
 
@@ -322,8 +326,8 @@
     jni.JObject signatureInterface,
     jni.JObject options,
   ) {
-    return _addSignatureField(reference, sigFields.reference,
-            signatureInterface.reference, options.reference)
+    return _addSignatureField(reference.pointer, sigFields.reference.pointer,
+            signatureInterface.reference.pointer, options.reference.pointer)
         .check();
   }
 
@@ -342,7 +346,7 @@
   void removePage(
     jni.JObject page,
   ) {
-    return _removePage(reference, page.reference).check();
+    return _removePage(reference.pointer, page.reference.pointer).check();
   }
 
   static final _removePage1 = jniLookup<
@@ -358,7 +362,7 @@
   void removePage1(
     int pageNumber,
   ) {
-    return _removePage1(reference, pageNumber).check();
+    return _removePage1(reference.pointer, pageNumber).check();
   }
 
   static final _importPage = jniLookup<
@@ -397,7 +401,7 @@
     jni.JObject page,
   ) {
     return const jni.JObjectType()
-        .fromRef(_importPage(reference, page.reference).object);
+        .fromRef(_importPage(reference.pointer, page.reference.pointer).object);
   }
 
   static final _getDocument = jniLookup<
@@ -412,7 +416,8 @@
   /// This will get the low level document.
   ///@return The document that this layer sits on top of.
   jni.JObject getDocument() {
-    return const jni.JObjectType().fromRef(_getDocument(reference).object);
+    return const jni.JObjectType()
+        .fromRef(_getDocument(reference.pointer).object);
   }
 
   static final _getDocumentInformation = jniLookup<
@@ -433,7 +438,7 @@
   ///@return The documents /Info dictionary, never null.
   pddocumentinformation_.PDDocumentInformation getDocumentInformation() {
     return const pddocumentinformation_.$PDDocumentInformationType()
-        .fromRef(_getDocumentInformation(reference).object);
+        .fromRef(_getDocumentInformation(reference.pointer).object);
   }
 
   static final _setDocumentInformation = jniLookup<
@@ -455,7 +460,8 @@
   void setDocumentInformation(
     pddocumentinformation_.PDDocumentInformation info,
   ) {
-    return _setDocumentInformation(reference, info.reference).check();
+    return _setDocumentInformation(reference.pointer, info.reference.pointer)
+        .check();
   }
 
   static final _getDocumentCatalog = jniLookup<
@@ -471,7 +477,7 @@
   ///@return The documents /Root dictionary
   jni.JObject getDocumentCatalog() {
     return const jni.JObjectType()
-        .fromRef(_getDocumentCatalog(reference).object);
+        .fromRef(_getDocumentCatalog(reference.pointer).object);
   }
 
   static final _isEncrypted = jniLookup<
@@ -485,7 +491,7 @@
   /// This will tell if this document is encrypted or not.
   ///@return true If this document is encrypted.
   bool isEncrypted() {
-    return _isEncrypted(reference).boolean;
+    return _isEncrypted(reference.pointer).boolean;
   }
 
   static final _getEncryption = jniLookup<
@@ -503,7 +509,8 @@
   /// PDStandardEncryption object.
   ///@return The encryption dictionary(most likely a PDStandardEncryption object)
   jni.JObject getEncryption() {
-    return const jni.JObjectType().fromRef(_getEncryption(reference).object);
+    return const jni.JObjectType()
+        .fromRef(_getEncryption(reference.pointer).object);
   }
 
   static final _setEncryptionDictionary = jniLookup<
@@ -523,7 +530,9 @@
   void setEncryptionDictionary(
     jni.JObject encryption,
   ) {
-    return _setEncryptionDictionary(reference, encryption.reference).check();
+    return _setEncryptionDictionary(
+            reference.pointer, encryption.reference.pointer)
+        .check();
   }
 
   static final _getLastSignatureDictionary = jniLookup<
@@ -541,7 +550,7 @@
   ///@throws IOException if no document catalog can be found.
   jni.JObject getLastSignatureDictionary() {
     return const jni.JObjectType()
-        .fromRef(_getLastSignatureDictionary(reference).object);
+        .fromRef(_getLastSignatureDictionary(reference.pointer).object);
   }
 
   static final _getSignatureFields = jniLookup<
@@ -558,7 +567,7 @@
   ///@throws IOException if no document catalog can be found.
   jni.JList<jni.JObject> getSignatureFields() {
     return const jni.JListType(jni.JObjectType())
-        .fromRef(_getSignatureFields(reference).object);
+        .fromRef(_getSignatureFields(reference.pointer).object);
   }
 
   static final _getSignatureDictionaries = jniLookup<
@@ -575,7 +584,7 @@
   ///@throws IOException if no document catalog can be found.
   jni.JList<jni.JObject> getSignatureDictionaries() {
     return const jni.JListType(jni.JObjectType())
-        .fromRef(_getSignatureDictionaries(reference).object);
+        .fromRef(_getSignatureDictionaries(reference.pointer).object);
   }
 
   static final _registerTrueTypeFontForClosing = jniLookup<
@@ -596,7 +605,9 @@
   void registerTrueTypeFontForClosing(
     jni.JObject ttf,
   ) {
-    return _registerTrueTypeFontForClosing(reference, ttf.reference).check();
+    return _registerTrueTypeFontForClosing(
+            reference.pointer, ttf.reference.pointer)
+        .check();
   }
 
   static final _load = jniLookup<
@@ -616,7 +627,8 @@
   static PDDocument load(
     jni.JObject file,
   ) {
-    return const $PDDocumentType().fromRef(_load(file.reference).object);
+    return const $PDDocumentType()
+        .fromRef(_load(file.reference.pointer).object);
   }
 
   static final _load1 = jniLookup<
@@ -640,8 +652,9 @@
     jni.JObject file,
     jni.JObject memUsageSetting,
   ) {
-    return const $PDDocumentType()
-        .fromRef(_load1(file.reference, memUsageSetting.reference).object);
+    return const $PDDocumentType().fromRef(
+        _load1(file.reference.pointer, memUsageSetting.reference.pointer)
+            .object);
   }
 
   static final _load2 = jniLookup<
@@ -665,8 +678,8 @@
     jni.JObject file,
     jni.JString password,
   ) {
-    return const $PDDocumentType()
-        .fromRef(_load2(file.reference, password.reference).object);
+    return const $PDDocumentType().fromRef(
+        _load2(file.reference.pointer, password.reference.pointer).object);
   }
 
   static final _load3 = jniLookup<
@@ -694,9 +707,9 @@
     jni.JString password,
     jni.JObject memUsageSetting,
   ) {
-    return const $PDDocumentType().fromRef(
-        _load3(file.reference, password.reference, memUsageSetting.reference)
-            .object);
+    return const $PDDocumentType().fromRef(_load3(file.reference.pointer,
+            password.reference.pointer, memUsageSetting.reference.pointer)
+        .object);
   }
 
   static final _load4 = jniLookup<
@@ -726,8 +739,11 @@
     jni.JObject keyStore,
     jni.JString alias,
   ) {
-    return const $PDDocumentType().fromRef(_load4(file.reference,
-            password.reference, keyStore.reference, alias.reference)
+    return const $PDDocumentType().fromRef(_load4(
+            file.reference.pointer,
+            password.reference.pointer,
+            keyStore.reference.pointer,
+            alias.reference.pointer)
         .object);
   }
 
@@ -766,11 +782,11 @@
     jni.JObject memUsageSetting,
   ) {
     return const $PDDocumentType().fromRef(_load5(
-            file.reference,
-            password.reference,
-            keyStore.reference,
-            alias.reference,
-            memUsageSetting.reference)
+            file.reference.pointer,
+            password.reference.pointer,
+            keyStore.reference.pointer,
+            alias.reference.pointer,
+            memUsageSetting.reference.pointer)
         .object);
   }
 
@@ -792,7 +808,8 @@
   static PDDocument load6(
     jni.JObject input,
   ) {
-    return const $PDDocumentType().fromRef(_load6(input.reference).object);
+    return const $PDDocumentType()
+        .fromRef(_load6(input.reference.pointer).object);
   }
 
   static final _load7 = jniLookup<
@@ -817,8 +834,9 @@
     jni.JObject input,
     jni.JObject memUsageSetting,
   ) {
-    return const $PDDocumentType()
-        .fromRef(_load7(input.reference, memUsageSetting.reference).object);
+    return const $PDDocumentType().fromRef(
+        _load7(input.reference.pointer, memUsageSetting.reference.pointer)
+            .object);
   }
 
   static final _load8 = jniLookup<
@@ -843,8 +861,8 @@
     jni.JObject input,
     jni.JString password,
   ) {
-    return const $PDDocumentType()
-        .fromRef(_load8(input.reference, password.reference).object);
+    return const $PDDocumentType().fromRef(
+        _load8(input.reference.pointer, password.reference.pointer).object);
   }
 
   static final _load9 = jniLookup<
@@ -875,8 +893,11 @@
     jni.JObject keyStore,
     jni.JString alias,
   ) {
-    return const $PDDocumentType().fromRef(_load9(input.reference,
-            password.reference, keyStore.reference, alias.reference)
+    return const $PDDocumentType().fromRef(_load9(
+            input.reference.pointer,
+            password.reference.pointer,
+            keyStore.reference.pointer,
+            alias.reference.pointer)
         .object);
   }
 
@@ -906,9 +927,9 @@
     jni.JString password,
     jni.JObject memUsageSetting,
   ) {
-    return const $PDDocumentType().fromRef(
-        _load10(input.reference, password.reference, memUsageSetting.reference)
-            .object);
+    return const $PDDocumentType().fromRef(_load10(input.reference.pointer,
+            password.reference.pointer, memUsageSetting.reference.pointer)
+        .object);
   }
 
   static final _load11 = jniLookup<
@@ -948,11 +969,11 @@
     jni.JObject memUsageSetting,
   ) {
     return const $PDDocumentType().fromRef(_load11(
-            input.reference,
-            password.reference,
-            keyStore.reference,
-            alias.reference,
-            memUsageSetting.reference)
+            input.reference.pointer,
+            password.reference.pointer,
+            keyStore.reference.pointer,
+            alias.reference.pointer,
+            memUsageSetting.reference.pointer)
         .object);
   }
 
@@ -973,7 +994,8 @@
   static PDDocument load12(
     jni.JArray<jni.jbyte> input,
   ) {
-    return const $PDDocumentType().fromRef(_load12(input.reference).object);
+    return const $PDDocumentType()
+        .fromRef(_load12(input.reference.pointer).object);
   }
 
   static final _load13 = jniLookup<
@@ -997,8 +1019,8 @@
     jni.JArray<jni.jbyte> input,
     jni.JString password,
   ) {
-    return const $PDDocumentType()
-        .fromRef(_load13(input.reference, password.reference).object);
+    return const $PDDocumentType().fromRef(
+        _load13(input.reference.pointer, password.reference.pointer).object);
   }
 
   static final _load14 = jniLookup<
@@ -1029,8 +1051,11 @@
     jni.JObject keyStore,
     jni.JString alias,
   ) {
-    return const $PDDocumentType().fromRef(_load14(input.reference,
-            password.reference, keyStore.reference, alias.reference)
+    return const $PDDocumentType().fromRef(_load14(
+            input.reference.pointer,
+            password.reference.pointer,
+            keyStore.reference.pointer,
+            alias.reference.pointer)
         .object);
   }
 
@@ -1070,11 +1095,11 @@
     jni.JObject memUsageSetting,
   ) {
     return const $PDDocumentType().fromRef(_load15(
-            input.reference,
-            password.reference,
-            keyStore.reference,
-            alias.reference,
-            memUsageSetting.reference)
+            input.reference.pointer,
+            password.reference.pointer,
+            keyStore.reference.pointer,
+            alias.reference.pointer,
+            memUsageSetting.reference.pointer)
         .object);
   }
 
@@ -1098,7 +1123,7 @@
   void save(
     jni.JString fileName,
   ) {
-    return _save(reference, fileName.reference).check();
+    return _save(reference.pointer, fileName.reference.pointer).check();
   }
 
   static final _save1 = jniLookup<
@@ -1121,7 +1146,7 @@
   void save1(
     jni.JObject file,
   ) {
-    return _save1(reference, file.reference).check();
+    return _save1(reference.pointer, file.reference.pointer).check();
   }
 
   static final _save2 = jniLookup<
@@ -1145,7 +1170,7 @@
   void save2(
     jni.JObject output,
   ) {
-    return _save2(reference, output.reference).check();
+    return _save2(reference.pointer, output.reference.pointer).check();
   }
 
   static final _saveIncremental = jniLookup<
@@ -1174,7 +1199,8 @@
   void saveIncremental(
     jni.JObject output,
   ) {
-    return _saveIncremental(reference, output.reference).check();
+    return _saveIncremental(reference.pointer, output.reference.pointer)
+        .check();
   }
 
   static final _saveIncremental1 = jniLookup<
@@ -1211,8 +1237,8 @@
     jni.JObject output,
     jni.JSet<jni.JObject> objectsToWrite,
   ) {
-    return _saveIncremental1(
-            reference, output.reference, objectsToWrite.reference)
+    return _saveIncremental1(reference.pointer, output.reference.pointer,
+            objectsToWrite.reference.pointer)
         .check();
   }
 
@@ -1268,8 +1294,9 @@
   jni.JObject saveIncrementalForExternalSigning(
     jni.JObject output,
   ) {
-    return const jni.JObjectType().fromRef(
-        _saveIncrementalForExternalSigning(reference, output.reference).object);
+    return const jni.JObjectType().fromRef(_saveIncrementalForExternalSigning(
+            reference.pointer, output.reference.pointer)
+        .object);
   }
 
   static final _getPage = jniLookup<
@@ -1292,7 +1319,7 @@
     int pageIndex,
   ) {
     return const jni.JObjectType()
-        .fromRef(_getPage(reference, pageIndex).object);
+        .fromRef(_getPage(reference.pointer, pageIndex).object);
   }
 
   static final _getPages = jniLookup<
@@ -1307,7 +1334,7 @@
   /// Returns the page tree.
   ///@return the page tree
   jni.JObject getPages() {
-    return const jni.JObjectType().fromRef(_getPages(reference).object);
+    return const jni.JObjectType().fromRef(_getPages(reference.pointer).object);
   }
 
   static final _getNumberOfPages = jniLookup<
@@ -1321,7 +1348,7 @@
   /// This will return the total page count of the PDF document.
   ///@return The total number of pages in the PDF document.
   int getNumberOfPages() {
-    return _getNumberOfPages(reference).integer;
+    return _getNumberOfPages(reference.pointer).integer;
   }
 
   static final _close = jniLookup<
@@ -1335,7 +1362,7 @@
   /// This will close the underlying COSDocument object.
   ///@throws IOException If there is an error releasing resources.
   void close() {
-    return _close(reference).check();
+    return _close(reference.pointer).check();
   }
 
   static final _protect = jniLookup<
@@ -1361,7 +1388,7 @@
   void protect(
     jni.JObject policy,
   ) {
-    return _protect(reference, policy.reference).check();
+    return _protect(reference.pointer, policy.reference.pointer).check();
   }
 
   static final _getCurrentAccessPermission = jniLookup<
@@ -1380,7 +1407,7 @@
   ///@return the access permissions for the current user on the document.
   jni.JObject getCurrentAccessPermission() {
     return const jni.JObjectType()
-        .fromRef(_getCurrentAccessPermission(reference).object);
+        .fromRef(_getCurrentAccessPermission(reference.pointer).object);
   }
 
   static final _isAllSecurityToBeRemoved = jniLookup<
@@ -1394,7 +1421,7 @@
   /// Indicates if all security is removed or not when writing the pdf.
   ///@return returns true if all security shall be removed otherwise false
   bool isAllSecurityToBeRemoved() {
-    return _isAllSecurityToBeRemoved(reference).boolean;
+    return _isAllSecurityToBeRemoved(reference.pointer).boolean;
   }
 
   static final _setAllSecurityToBeRemoved = jniLookup<
@@ -1410,7 +1437,8 @@
   void setAllSecurityToBeRemoved(
     bool removeAllSecurity,
   ) {
-    return _setAllSecurityToBeRemoved(reference, removeAllSecurity ? 1 : 0)
+    return _setAllSecurityToBeRemoved(
+            reference.pointer, removeAllSecurity ? 1 : 0)
         .check();
   }
 
@@ -1426,7 +1454,8 @@
   /// Provides the document ID.
   ///@return the document ID
   jni.JLong getDocumentId() {
-    return const jni.JLongType().fromRef(_getDocumentId(reference).object);
+    return const jni.JLongType()
+        .fromRef(_getDocumentId(reference.pointer).object);
   }
 
   static final _setDocumentId = jniLookup<
@@ -1444,7 +1473,7 @@
   void setDocumentId(
     jni.JLong docId,
   ) {
-    return _setDocumentId(reference, docId.reference).check();
+    return _setDocumentId(reference.pointer, docId.reference.pointer).check();
   }
 
   static final _getVersion = jniLookup<
@@ -1458,7 +1487,7 @@
   /// Returns the PDF specification version this document conforms to.
   ///@return the PDF version (e.g. 1.4f)
   double getVersion() {
-    return _getVersion(reference).float;
+    return _getVersion(reference.pointer).float;
   }
 
   static final _setVersion = jniLookup<
@@ -1474,7 +1503,7 @@
   void setVersion(
     double newVersion,
   ) {
-    return _setVersion(reference, newVersion).check();
+    return _setVersion(reference.pointer, newVersion).check();
   }
 
   static final _getResourceCache = jniLookup<
@@ -1489,7 +1518,8 @@
   /// Returns the resource cache associated with this document, or null if there is none.
   ///@return the resource cache or null.
   jni.JObject getResourceCache() {
-    return const jni.JObjectType().fromRef(_getResourceCache(reference).object);
+    return const jni.JObjectType()
+        .fromRef(_getResourceCache(reference.pointer).object);
   }
 
   static final _setResourceCache = jniLookup<
@@ -1507,7 +1537,8 @@
   void setResourceCache(
     jni.JObject resourceCache,
   ) {
-    return _setResourceCache(reference, resourceCache.reference).check();
+    return _setResourceCache(reference.pointer, resourceCache.reference.pointer)
+        .check();
   }
 }
 
diff --git a/pkgs/jnigen/example/pdfbox_plugin/lib/src/third_party/org/apache/pdfbox/pdmodel/PDDocumentInformation.dart b/pkgs/jnigen/example/pdfbox_plugin/lib/src/third_party/org/apache/pdfbox/pdmodel/PDDocumentInformation.dart
index b05c031..45e477d 100644
--- a/pkgs/jnigen/example/pdfbox_plugin/lib/src/third_party/org/apache/pdfbox/pdmodel/PDDocumentInformation.dart
+++ b/pkgs/jnigen/example/pdfbox_plugin/lib/src/third_party/org/apache/pdfbox/pdmodel/PDDocumentInformation.dart
@@ -85,7 +85,7 @@
   factory PDDocumentInformation.new1(
     jni.JObject dic,
   ) {
-    return PDDocumentInformation.fromRef(_new1(dic.reference).object);
+    return PDDocumentInformation.fromRef(_new1(dic.reference.pointer).object);
   }
 
   static final _getCOSObject = jniLookup<
@@ -100,7 +100,8 @@
   /// This will get the underlying dictionary that this object wraps.
   ///@return The underlying info dictionary.
   jni.JObject getCOSObject() {
-    return const jni.JObjectType().fromRef(_getCOSObject(reference).object);
+    return const jni.JObjectType()
+        .fromRef(_getCOSObject(reference.pointer).object);
   }
 
   static final _getPropertyStringValue = jniLookup<
@@ -126,8 +127,9 @@
   jni.JObject getPropertyStringValue(
     jni.JString propertyKey,
   ) {
-    return const jni.JObjectType().fromRef(
-        _getPropertyStringValue(reference, propertyKey.reference).object);
+    return const jni.JObjectType().fromRef(_getPropertyStringValue(
+            reference.pointer, propertyKey.reference.pointer)
+        .object);
   }
 
   static final _getTitle = jniLookup<
@@ -142,7 +144,7 @@
   /// This will get the title of the document.  This will return null if no title exists.
   ///@return The title of the document.
   jni.JString getTitle() {
-    return const jni.JStringType().fromRef(_getTitle(reference).object);
+    return const jni.JStringType().fromRef(_getTitle(reference.pointer).object);
   }
 
   static final _setTitle = jniLookup<
@@ -160,7 +162,7 @@
   void setTitle(
     jni.JString title,
   ) {
-    return _setTitle(reference, title.reference).check();
+    return _setTitle(reference.pointer, title.reference.pointer).check();
   }
 
   static final _getAuthor = jniLookup<
@@ -175,7 +177,8 @@
   /// This will get the author of the document.  This will return null if no author exists.
   ///@return The author of the document.
   jni.JString getAuthor() {
-    return const jni.JStringType().fromRef(_getAuthor(reference).object);
+    return const jni.JStringType()
+        .fromRef(_getAuthor(reference.pointer).object);
   }
 
   static final _setAuthor = jniLookup<
@@ -193,7 +196,7 @@
   void setAuthor(
     jni.JString author,
   ) {
-    return _setAuthor(reference, author.reference).check();
+    return _setAuthor(reference.pointer, author.reference.pointer).check();
   }
 
   static final _getSubject = jniLookup<
@@ -208,7 +211,8 @@
   /// This will get the subject of the document.  This will return null if no subject exists.
   ///@return The subject of the document.
   jni.JString getSubject() {
-    return const jni.JStringType().fromRef(_getSubject(reference).object);
+    return const jni.JStringType()
+        .fromRef(_getSubject(reference.pointer).object);
   }
 
   static final _setSubject = jniLookup<
@@ -226,7 +230,7 @@
   void setSubject(
     jni.JString subject,
   ) {
-    return _setSubject(reference, subject.reference).check();
+    return _setSubject(reference.pointer, subject.reference.pointer).check();
   }
 
   static final _getKeywords = jniLookup<
@@ -241,7 +245,8 @@
   /// This will get the keywords of the document.  This will return null if no keywords exists.
   ///@return The keywords of the document.
   jni.JString getKeywords() {
-    return const jni.JStringType().fromRef(_getKeywords(reference).object);
+    return const jni.JStringType()
+        .fromRef(_getKeywords(reference.pointer).object);
   }
 
   static final _setKeywords = jniLookup<
@@ -259,7 +264,7 @@
   void setKeywords(
     jni.JString keywords,
   ) {
-    return _setKeywords(reference, keywords.reference).check();
+    return _setKeywords(reference.pointer, keywords.reference.pointer).check();
   }
 
   static final _getCreator = jniLookup<
@@ -274,7 +279,8 @@
   /// This will get the creator of the document.  This will return null if no creator exists.
   ///@return The creator of the document.
   jni.JString getCreator() {
-    return const jni.JStringType().fromRef(_getCreator(reference).object);
+    return const jni.JStringType()
+        .fromRef(_getCreator(reference.pointer).object);
   }
 
   static final _setCreator = jniLookup<
@@ -292,7 +298,7 @@
   void setCreator(
     jni.JString creator,
   ) {
-    return _setCreator(reference, creator.reference).check();
+    return _setCreator(reference.pointer, creator.reference.pointer).check();
   }
 
   static final _getProducer = jniLookup<
@@ -307,7 +313,8 @@
   /// This will get the producer of the document.  This will return null if no producer exists.
   ///@return The producer of the document.
   jni.JString getProducer() {
-    return const jni.JStringType().fromRef(_getProducer(reference).object);
+    return const jni.JStringType()
+        .fromRef(_getProducer(reference.pointer).object);
   }
 
   static final _setProducer = jniLookup<
@@ -325,7 +332,7 @@
   void setProducer(
     jni.JString producer,
   ) {
-    return _setProducer(reference, producer.reference).check();
+    return _setProducer(reference.pointer, producer.reference.pointer).check();
   }
 
   static final _getCreationDate = jniLookup<
@@ -340,7 +347,8 @@
   /// This will get the creation date of the document.  This will return null if no creation date exists.
   ///@return The creation date of the document.
   jni.JObject getCreationDate() {
-    return const jni.JObjectType().fromRef(_getCreationDate(reference).object);
+    return const jni.JObjectType()
+        .fromRef(_getCreationDate(reference.pointer).object);
   }
 
   static final _setCreationDate = jniLookup<
@@ -359,7 +367,7 @@
   void setCreationDate(
     jni.JObject date,
   ) {
-    return _setCreationDate(reference, date.reference).check();
+    return _setCreationDate(reference.pointer, date.reference.pointer).check();
   }
 
   static final _getModificationDate = jniLookup<
@@ -375,7 +383,7 @@
   ///@return The modification date of the document.
   jni.JObject getModificationDate() {
     return const jni.JObjectType()
-        .fromRef(_getModificationDate(reference).object);
+        .fromRef(_getModificationDate(reference.pointer).object);
   }
 
   static final _setModificationDate = jniLookup<
@@ -394,7 +402,8 @@
   void setModificationDate(
     jni.JObject date,
   ) {
-    return _setModificationDate(reference, date.reference).check();
+    return _setModificationDate(reference.pointer, date.reference.pointer)
+        .check();
   }
 
   static final _getTrapped = jniLookup<
@@ -410,7 +419,8 @@
   /// This will return null if one is not found.
   ///@return The trapped value for the document.
   jni.JString getTrapped() {
-    return const jni.JStringType().fromRef(_getTrapped(reference).object);
+    return const jni.JStringType()
+        .fromRef(_getTrapped(reference.pointer).object);
   }
 
   static final _getMetadataKeys = jniLookup<
@@ -427,7 +437,7 @@
   ///@since Apache PDFBox 1.3.0
   jni.JSet<jni.JString> getMetadataKeys() {
     return const jni.JSetType(jni.JStringType())
-        .fromRef(_getMetadataKeys(reference).object);
+        .fromRef(_getMetadataKeys(reference.pointer).object);
   }
 
   static final _getCustomMetadataValue = jniLookup<
@@ -450,7 +460,8 @@
     jni.JString fieldName,
   ) {
     return const jni.JStringType().fromRef(
-        _getCustomMetadataValue(reference, fieldName.reference).object);
+        _getCustomMetadataValue(reference.pointer, fieldName.reference.pointer)
+            .object);
   }
 
   static final _setCustomMetadataValue = jniLookup<
@@ -471,8 +482,8 @@
     jni.JString fieldName,
     jni.JString fieldValue,
   ) {
-    return _setCustomMetadataValue(
-            reference, fieldName.reference, fieldValue.reference)
+    return _setCustomMetadataValue(reference.pointer,
+            fieldName.reference.pointer, fieldValue.reference.pointer)
         .check();
   }
 
@@ -493,7 +504,7 @@
   void setTrapped(
     jni.JString value,
   ) {
-    return _setTrapped(reference, value.reference).check();
+    return _setTrapped(reference.pointer, value.reference.pointer).check();
   }
 }
 
diff --git a/pkgs/jnigen/example/pdfbox_plugin/lib/src/third_party/org/apache/pdfbox/text/PDFTextStripper.dart b/pkgs/jnigen/example/pdfbox_plugin/lib/src/third_party/org/apache/pdfbox/text/PDFTextStripper.dart
index fcdfda2..1fc593f 100644
--- a/pkgs/jnigen/example/pdfbox_plugin/lib/src/third_party/org/apache/pdfbox/text/PDFTextStripper.dart
+++ b/pkgs/jnigen/example/pdfbox_plugin/lib/src/third_party/org/apache/pdfbox/text/PDFTextStripper.dart
@@ -76,8 +76,8 @@
   /// The returned object must be released after use, by calling the [release] method.
   ///
   /// The platform's line separator.
-  jni.JString get LINE_SEPARATOR =>
-      const jni.JStringType().fromRef(_get_LINE_SEPARATOR(reference).object);
+  jni.JString get LINE_SEPARATOR => const jni.JStringType()
+      .fromRef(_get_LINE_SEPARATOR(reference.pointer).object);
 
   static final _get_charactersByArticle = jniLookup<
           ffi.NativeFunction<
@@ -113,7 +113,7 @@
   ///
   /// Most PDFs won't have any beads, so charactersByArticle will contain a single entry.
   jni.JObject get charactersByArticle => const jni.JObjectType()
-      .fromRef(_get_charactersByArticle(reference).object);
+      .fromRef(_get_charactersByArticle(reference.pointer).object);
 
   /// from: protected java.util.ArrayList<java.util.List<org.apache.pdfbox.text.TextPosition>> charactersByArticle
   /// The returned object must be released after use, by calling the [release] method.
@@ -131,7 +131,8 @@
   ///
   /// Most PDFs won't have any beads, so charactersByArticle will contain a single entry.
   set charactersByArticle(jni.JObject value) =>
-      _set_charactersByArticle(reference, value.reference).check();
+      _set_charactersByArticle(reference.pointer, value.reference.pointer)
+          .check();
 
   static final _get_document = jniLookup<
           ffi.NativeFunction<
@@ -153,12 +154,12 @@
   /// from: protected org.apache.pdfbox.pdmodel.PDDocument document
   /// The returned object must be released after use, by calling the [release] method.
   pddocument_.PDDocument get document => const pddocument_.$PDDocumentType()
-      .fromRef(_get_document(reference).object);
+      .fromRef(_get_document(reference.pointer).object);
 
   /// from: protected org.apache.pdfbox.pdmodel.PDDocument document
   /// The returned object must be released after use, by calling the [release] method.
   set document(pddocument_.PDDocument value) =>
-      _set_document(reference, value.reference).check();
+      _set_document(reference.pointer, value.reference.pointer).check();
 
   static final _get_output = jniLookup<
           ffi.NativeFunction<
@@ -180,12 +181,12 @@
   /// from: protected java.io.Writer output
   /// The returned object must be released after use, by calling the [release] method.
   jni.JObject get output =>
-      const jni.JObjectType().fromRef(_get_output(reference).object);
+      const jni.JObjectType().fromRef(_get_output(reference.pointer).object);
 
   /// from: protected java.io.Writer output
   /// The returned object must be released after use, by calling the [release] method.
   set output(jni.JObject value) =>
-      _set_output(reference, value.reference).check();
+      _set_output(reference.pointer, value.reference.pointer).check();
 
   static final _new0 = jniLookup<ffi.NativeFunction<jni.JniResult Function()>>(
           "PDFTextStripper__new0")
@@ -225,7 +226,7 @@
     pddocument_.PDDocument doc,
   ) {
     return const jni.JStringType()
-        .fromRef(_getText(reference, doc.reference).object);
+        .fromRef(_getText(reference.pointer, doc.reference.pointer).object);
   }
 
   static final _writeText = jniLookup<
@@ -248,7 +249,9 @@
     pddocument_.PDDocument doc,
     jni.JObject outputStream,
   ) {
-    return _writeText(reference, doc.reference, outputStream.reference).check();
+    return _writeText(reference.pointer, doc.reference.pointer,
+            outputStream.reference.pointer)
+        .check();
   }
 
   static final _processPages = jniLookup<
@@ -267,7 +270,7 @@
   void processPages(
     jni.JObject pages,
   ) {
-    return _processPages(reference, pages.reference).check();
+    return _processPages(reference.pointer, pages.reference.pointer).check();
   }
 
   static final _startDocument = jniLookup<
@@ -286,7 +289,8 @@
   void startDocument(
     pddocument_.PDDocument document,
   ) {
-    return _startDocument(reference, document.reference).check();
+    return _startDocument(reference.pointer, document.reference.pointer)
+        .check();
   }
 
   static final _endDocument = jniLookup<
@@ -306,7 +310,7 @@
   void endDocument(
     pddocument_.PDDocument document,
   ) {
-    return _endDocument(reference, document.reference).check();
+    return _endDocument(reference.pointer, document.reference.pointer).check();
   }
 
   static final _processPage = jniLookup<
@@ -325,7 +329,7 @@
   void processPage(
     jni.JObject page,
   ) {
-    return _processPage(reference, page.reference).check();
+    return _processPage(reference.pointer, page.reference.pointer).check();
   }
 
   static final _startArticle = jniLookup<
@@ -341,7 +345,7 @@
   /// may provide additional information.
   ///@throws IOException If there is any error writing to the stream.
   void startArticle() {
-    return _startArticle(reference).check();
+    return _startArticle(reference.pointer).check();
   }
 
   static final _startArticle1 = jniLookup<
@@ -359,7 +363,7 @@
   void startArticle1(
     bool isLTR,
   ) {
-    return _startArticle1(reference, isLTR ? 1 : 0).check();
+    return _startArticle1(reference.pointer, isLTR ? 1 : 0).check();
   }
 
   static final _endArticle = jniLookup<
@@ -373,7 +377,7 @@
   /// End an article. Default implementation is to do nothing. Subclasses may provide additional information.
   ///@throws IOException If there is any error writing to the stream.
   void endArticle() {
-    return _endArticle(reference).check();
+    return _endArticle(reference.pointer).check();
   }
 
   static final _startPage = jniLookup<
@@ -392,7 +396,7 @@
   void startPage(
     jni.JObject page,
   ) {
-    return _startPage(reference, page.reference).check();
+    return _startPage(reference.pointer, page.reference.pointer).check();
   }
 
   static final _endPage = jniLookup<
@@ -411,7 +415,7 @@
   void endPage(
     jni.JObject page,
   ) {
-    return _endPage(reference, page.reference).check();
+    return _endPage(reference.pointer, page.reference.pointer).check();
   }
 
   static final _writePage = jniLookup<
@@ -427,7 +431,7 @@
   /// enabled.
   ///@throws IOException If there is an error writing the text.
   void writePage() {
-    return _writePage(reference).check();
+    return _writePage(reference.pointer).check();
   }
 
   static final _writeLineSeparator = jniLookup<
@@ -441,7 +445,7 @@
   /// Write the line separator value to the output stream.
   ///@throws IOException If there is a problem writing out the line separator to the document.
   void writeLineSeparator() {
-    return _writeLineSeparator(reference).check();
+    return _writeLineSeparator(reference.pointer).check();
   }
 
   static final _writeWordSeparator = jniLookup<
@@ -455,7 +459,7 @@
   /// Write the word separator value to the output stream.
   ///@throws IOException If there is a problem writing out the word separator to the document.
   void writeWordSeparator() {
-    return _writeWordSeparator(reference).check();
+    return _writeWordSeparator(reference.pointer).check();
   }
 
   static final _writeCharacters = jniLookup<
@@ -474,7 +478,7 @@
   void writeCharacters(
     jni.JObject text,
   ) {
-    return _writeCharacters(reference, text.reference).check();
+    return _writeCharacters(reference.pointer, text.reference.pointer).check();
   }
 
   static final _writeString = jniLookup<
@@ -498,7 +502,8 @@
     jni.JString text,
     jni.JList<jni.JObject> textPositions,
   ) {
-    return _writeString(reference, text.reference, textPositions.reference)
+    return _writeString(reference.pointer, text.reference.pointer,
+            textPositions.reference.pointer)
         .check();
   }
 
@@ -518,7 +523,7 @@
   void writeString1(
     jni.JString text,
   ) {
-    return _writeString1(reference, text.reference).check();
+    return _writeString1(reference.pointer, text.reference.pointer).check();
   }
 
   static final _processTextPosition = jniLookup<
@@ -538,7 +543,8 @@
   void processTextPosition(
     jni.JObject text,
   ) {
-    return _processTextPosition(reference, text.reference).check();
+    return _processTextPosition(reference.pointer, text.reference.pointer)
+        .check();
   }
 
   static final _getStartPage = jniLookup<
@@ -554,7 +560,7 @@
   /// be extracted. The default value is 1.
   ///@return Value of property startPage.
   int getStartPage() {
-    return _getStartPage(reference).integer;
+    return _getStartPage(reference.pointer).integer;
   }
 
   static final _setStartPage = jniLookup<
@@ -570,7 +576,7 @@
   void setStartPage(
     int startPageValue,
   ) {
-    return _setStartPage(reference, startPageValue).check();
+    return _setStartPage(reference.pointer, startPageValue).check();
   }
 
   static final _getEndPage = jniLookup<
@@ -586,7 +592,7 @@
   /// Integer.MAX_VALUE such that all pages of the pdf will be extracted.
   ///@return Value of property endPage.
   int getEndPage() {
-    return _getEndPage(reference).integer;
+    return _getEndPage(reference.pointer).integer;
   }
 
   static final _setEndPage = jniLookup<
@@ -602,7 +608,7 @@
   void setEndPage(
     int endPageValue,
   ) {
-    return _setEndPage(reference, endPageValue).check();
+    return _setEndPage(reference.pointer, endPageValue).check();
   }
 
   static final _setLineSeparator = jniLookup<
@@ -621,7 +627,8 @@
   void setLineSeparator(
     jni.JString separator,
   ) {
-    return _setLineSeparator(reference, separator.reference).check();
+    return _setLineSeparator(reference.pointer, separator.reference.pointer)
+        .check();
   }
 
   static final _getLineSeparator = jniLookup<
@@ -636,7 +643,8 @@
   /// This will get the line separator.
   ///@return The desired line separator string.
   jni.JString getLineSeparator() {
-    return const jni.JStringType().fromRef(_getLineSeparator(reference).object);
+    return const jni.JStringType()
+        .fromRef(_getLineSeparator(reference.pointer).object);
   }
 
   static final _getWordSeparator = jniLookup<
@@ -651,7 +659,8 @@
   /// This will get the word separator.
   ///@return The desired word separator string.
   jni.JString getWordSeparator() {
-    return const jni.JStringType().fromRef(_getWordSeparator(reference).object);
+    return const jni.JStringType()
+        .fromRef(_getWordSeparator(reference.pointer).object);
   }
 
   static final _setWordSeparator = jniLookup<
@@ -672,7 +681,8 @@
   void setWordSeparator(
     jni.JString separator,
   ) {
-    return _setWordSeparator(reference, separator.reference).check();
+    return _setWordSeparator(reference.pointer, separator.reference.pointer)
+        .check();
   }
 
   static final _getSuppressDuplicateOverlappingText = jniLookup<
@@ -685,7 +695,7 @@
   ///
   /// @return Returns the suppressDuplicateOverlappingText.
   bool getSuppressDuplicateOverlappingText() {
-    return _getSuppressDuplicateOverlappingText(reference).boolean;
+    return _getSuppressDuplicateOverlappingText(reference.pointer).boolean;
   }
 
   static final _getCurrentPageNo = jniLookup<
@@ -699,7 +709,7 @@
   /// Get the current page number that is being processed.
   ///@return A 1 based number representing the current page.
   int getCurrentPageNo() {
-    return _getCurrentPageNo(reference).integer;
+    return _getCurrentPageNo(reference.pointer).integer;
   }
 
   static final _getOutput = jniLookup<
@@ -714,7 +724,8 @@
   /// The output stream that is being written to.
   ///@return The stream that output is being written to.
   jni.JObject getOutput() {
-    return const jni.JObjectType().fromRef(_getOutput(reference).object);
+    return const jni.JObjectType()
+        .fromRef(_getOutput(reference.pointer).object);
   }
 
   static final _getCharactersByArticle = jniLookup<
@@ -731,7 +742,7 @@
   ///@return A double List of TextPositions for all text strings on the page.
   jni.JList<jni.JList<jni.JObject>> getCharactersByArticle() {
     return const jni.JListType(jni.JListType(jni.JObjectType()))
-        .fromRef(_getCharactersByArticle(reference).object);
+        .fromRef(_getCharactersByArticle(reference.pointer).object);
   }
 
   static final _setSuppressDuplicateOverlappingText = jniLookup<
@@ -750,7 +761,7 @@
     bool suppressDuplicateOverlappingTextValue,
   ) {
     return _setSuppressDuplicateOverlappingText(
-            reference, suppressDuplicateOverlappingTextValue ? 1 : 0)
+            reference.pointer, suppressDuplicateOverlappingTextValue ? 1 : 0)
         .check();
   }
 
@@ -765,7 +776,7 @@
   /// This will tell if the text stripper should separate by beads.
   ///@return If the text will be grouped by beads.
   bool getSeparateByBeads() {
-    return _getSeparateByBeads(reference).boolean;
+    return _getSeparateByBeads(reference.pointer).boolean;
   }
 
   static final _setShouldSeparateByBeads = jniLookup<
@@ -781,7 +792,8 @@
   void setShouldSeparateByBeads(
     bool aShouldSeparateByBeads,
   ) {
-    return _setShouldSeparateByBeads(reference, aShouldSeparateByBeads ? 1 : 0)
+    return _setShouldSeparateByBeads(
+            reference.pointer, aShouldSeparateByBeads ? 1 : 0)
         .check();
   }
 
@@ -797,7 +809,8 @@
   /// Get the bookmark where text extraction should end, inclusive. Default is null.
   ///@return The ending bookmark.
   jni.JObject getEndBookmark() {
-    return const jni.JObjectType().fromRef(_getEndBookmark(reference).object);
+    return const jni.JObjectType()
+        .fromRef(_getEndBookmark(reference.pointer).object);
   }
 
   static final _setEndBookmark = jniLookup<
@@ -815,7 +828,8 @@
   void setEndBookmark(
     jni.JObject aEndBookmark,
   ) {
-    return _setEndBookmark(reference, aEndBookmark.reference).check();
+    return _setEndBookmark(reference.pointer, aEndBookmark.reference.pointer)
+        .check();
   }
 
   static final _getStartBookmark = jniLookup<
@@ -830,7 +844,8 @@
   /// Get the bookmark where text extraction should start, inclusive. Default is null.
   ///@return The starting bookmark.
   jni.JObject getStartBookmark() {
-    return const jni.JObjectType().fromRef(_getStartBookmark(reference).object);
+    return const jni.JObjectType()
+        .fromRef(_getStartBookmark(reference.pointer).object);
   }
 
   static final _setStartBookmark = jniLookup<
@@ -848,7 +863,9 @@
   void setStartBookmark(
     jni.JObject aStartBookmark,
   ) {
-    return _setStartBookmark(reference, aStartBookmark.reference).check();
+    return _setStartBookmark(
+            reference.pointer, aStartBookmark.reference.pointer)
+        .check();
   }
 
   static final _getAddMoreFormatting = jniLookup<
@@ -862,7 +879,7 @@
   /// This will tell if the text stripper should add some more text formatting.
   ///@return true if some more text formatting will be added
   bool getAddMoreFormatting() {
-    return _getAddMoreFormatting(reference).boolean;
+    return _getAddMoreFormatting(reference.pointer).boolean;
   }
 
   static final _setAddMoreFormatting = jniLookup<
@@ -878,7 +895,8 @@
   void setAddMoreFormatting(
     bool newAddMoreFormatting,
   ) {
-    return _setAddMoreFormatting(reference, newAddMoreFormatting ? 1 : 0)
+    return _setAddMoreFormatting(
+            reference.pointer, newAddMoreFormatting ? 1 : 0)
         .check();
   }
 
@@ -893,7 +911,7 @@
   /// This will tell if the text stripper should sort the text tokens before writing to the stream.
   ///@return true If the text tokens will be sorted before being written.
   bool getSortByPosition() {
-    return _getSortByPosition(reference).boolean;
+    return _getSortByPosition(reference.pointer).boolean;
   }
 
   static final _setSortByPosition = jniLookup<
@@ -915,7 +933,8 @@
   void setSortByPosition(
     bool newSortByPosition,
   ) {
-    return _setSortByPosition(reference, newSortByPosition ? 1 : 0).check();
+    return _setSortByPosition(reference.pointer, newSortByPosition ? 1 : 0)
+        .check();
   }
 
   static final _getSpacingTolerance = jniLookup<
@@ -930,7 +949,7 @@
   /// added. Note that the default value for this has been determined from trial and error.
   ///@return The current tolerance / scaling factor
   double getSpacingTolerance() {
-    return _getSpacingTolerance(reference).float;
+    return _getSpacingTolerance(reference.pointer).float;
   }
 
   static final _setSpacingTolerance = jniLookup<
@@ -948,7 +967,8 @@
   void setSpacingTolerance(
     double spacingToleranceValue,
   ) {
-    return _setSpacingTolerance(reference, spacingToleranceValue).check();
+    return _setSpacingTolerance(reference.pointer, spacingToleranceValue)
+        .check();
   }
 
   static final _getAverageCharTolerance = jniLookup<
@@ -963,7 +983,7 @@
   /// be added. Note that the default value for this has been determined from trial and error.
   ///@return The current tolerance / scaling factor
   double getAverageCharTolerance() {
-    return _getAverageCharTolerance(reference).float;
+    return _getAverageCharTolerance(reference.pointer).float;
   }
 
   static final _setAverageCharTolerance = jniLookup<
@@ -981,7 +1001,8 @@
   void setAverageCharTolerance(
     double averageCharToleranceValue,
   ) {
-    return _setAverageCharTolerance(reference, averageCharToleranceValue)
+    return _setAverageCharTolerance(
+            reference.pointer, averageCharToleranceValue)
         .check();
   }
 
@@ -997,7 +1018,7 @@
   /// indented from the previous line start beyond which the current line start is considered to be a paragraph start.
   ///@return the number of whitespace character widths to use when detecting paragraph indents.
   double getIndentThreshold() {
-    return _getIndentThreshold(reference).float;
+    return _getIndentThreshold(reference.pointer).float;
   }
 
   static final _setIndentThreshold = jniLookup<
@@ -1015,7 +1036,7 @@
   void setIndentThreshold(
     double indentThresholdValue,
   ) {
-    return _setIndentThreshold(reference, indentThresholdValue).check();
+    return _setIndentThreshold(reference.pointer, indentThresholdValue).check();
   }
 
   static final _getDropThreshold = jniLookup<
@@ -1030,7 +1051,7 @@
   /// start is considered to be a paragraph start.
   ///@return the character height multiple for max allowed whitespace between lines in the same paragraph.
   double getDropThreshold() {
-    return _getDropThreshold(reference).float;
+    return _getDropThreshold(reference.pointer).float;
   }
 
   static final _setDropThreshold = jniLookup<
@@ -1048,7 +1069,7 @@
   void setDropThreshold(
     double dropThresholdValue,
   ) {
-    return _setDropThreshold(reference, dropThresholdValue).check();
+    return _setDropThreshold(reference.pointer, dropThresholdValue).check();
   }
 
   static final _getParagraphStart = jniLookup<
@@ -1064,7 +1085,7 @@
   ///@return the paragraph start string
   jni.JString getParagraphStart() {
     return const jni.JStringType()
-        .fromRef(_getParagraphStart(reference).object);
+        .fromRef(_getParagraphStart(reference.pointer).object);
   }
 
   static final _setParagraphStart = jniLookup<
@@ -1082,7 +1103,7 @@
   void setParagraphStart(
     jni.JString s,
   ) {
-    return _setParagraphStart(reference, s.reference).check();
+    return _setParagraphStart(reference.pointer, s.reference.pointer).check();
   }
 
   static final _getParagraphEnd = jniLookup<
@@ -1097,7 +1118,8 @@
   /// Returns the string which will be used at the end of a paragraph.
   ///@return the paragraph end string
   jni.JString getParagraphEnd() {
-    return const jni.JStringType().fromRef(_getParagraphEnd(reference).object);
+    return const jni.JStringType()
+        .fromRef(_getParagraphEnd(reference.pointer).object);
   }
 
   static final _setParagraphEnd = jniLookup<
@@ -1115,7 +1137,7 @@
   void setParagraphEnd(
     jni.JString s,
   ) {
-    return _setParagraphEnd(reference, s.reference).check();
+    return _setParagraphEnd(reference.pointer, s.reference.pointer).check();
   }
 
   static final _getPageStart = jniLookup<
@@ -1130,7 +1152,8 @@
   /// Returns the string which will be used at the beginning of a page.
   ///@return the page start string
   jni.JString getPageStart() {
-    return const jni.JStringType().fromRef(_getPageStart(reference).object);
+    return const jni.JStringType()
+        .fromRef(_getPageStart(reference.pointer).object);
   }
 
   static final _setPageStart = jniLookup<
@@ -1148,7 +1171,8 @@
   void setPageStart(
     jni.JString pageStartValue,
   ) {
-    return _setPageStart(reference, pageStartValue.reference).check();
+    return _setPageStart(reference.pointer, pageStartValue.reference.pointer)
+        .check();
   }
 
   static final _getPageEnd = jniLookup<
@@ -1163,7 +1187,8 @@
   /// Returns the string which will be used at the end of a page.
   ///@return the page end string
   jni.JString getPageEnd() {
-    return const jni.JStringType().fromRef(_getPageEnd(reference).object);
+    return const jni.JStringType()
+        .fromRef(_getPageEnd(reference.pointer).object);
   }
 
   static final _setPageEnd = jniLookup<
@@ -1181,7 +1206,8 @@
   void setPageEnd(
     jni.JString pageEndValue,
   ) {
-    return _setPageEnd(reference, pageEndValue.reference).check();
+    return _setPageEnd(reference.pointer, pageEndValue.reference.pointer)
+        .check();
   }
 
   static final _getArticleStart = jniLookup<
@@ -1196,7 +1222,8 @@
   /// Returns the string which will be used at the beginning of an article.
   ///@return the article start string
   jni.JString getArticleStart() {
-    return const jni.JStringType().fromRef(_getArticleStart(reference).object);
+    return const jni.JStringType()
+        .fromRef(_getArticleStart(reference.pointer).object);
   }
 
   static final _setArticleStart = jniLookup<
@@ -1214,7 +1241,9 @@
   void setArticleStart(
     jni.JString articleStartValue,
   ) {
-    return _setArticleStart(reference, articleStartValue.reference).check();
+    return _setArticleStart(
+            reference.pointer, articleStartValue.reference.pointer)
+        .check();
   }
 
   static final _getArticleEnd = jniLookup<
@@ -1229,7 +1258,8 @@
   /// Returns the string which will be used at the end of an article.
   ///@return the article end string
   jni.JString getArticleEnd() {
-    return const jni.JStringType().fromRef(_getArticleEnd(reference).object);
+    return const jni.JStringType()
+        .fromRef(_getArticleEnd(reference.pointer).object);
   }
 
   static final _setArticleEnd = jniLookup<
@@ -1247,7 +1277,8 @@
   void setArticleEnd(
     jni.JString articleEndValue,
   ) {
-    return _setArticleEnd(reference, articleEndValue.reference).check();
+    return _setArticleEnd(reference.pointer, articleEndValue.reference.pointer)
+        .check();
   }
 
   static final _writeParagraphSeparator = jniLookup<
@@ -1261,7 +1292,7 @@
   /// writes the paragraph separator string to the output.
   ///@throws IOException if something went wrong
   void writeParagraphSeparator() {
-    return _writeParagraphSeparator(reference).check();
+    return _writeParagraphSeparator(reference.pointer).check();
   }
 
   static final _writeParagraphStart = jniLookup<
@@ -1275,7 +1306,7 @@
   /// Write something (if defined) at the start of a paragraph.
   ///@throws IOException if something went wrong
   void writeParagraphStart() {
-    return _writeParagraphStart(reference).check();
+    return _writeParagraphStart(reference.pointer).check();
   }
 
   static final _writeParagraphEnd = jniLookup<
@@ -1289,7 +1320,7 @@
   /// Write something (if defined) at the end of a paragraph.
   ///@throws IOException if something went wrong
   void writeParagraphEnd() {
-    return _writeParagraphEnd(reference).check();
+    return _writeParagraphEnd(reference.pointer).check();
   }
 
   static final _writePageStart = jniLookup<
@@ -1303,7 +1334,7 @@
   /// Write something (if defined) at the start of a page.
   ///@throws IOException if something went wrong
   void writePageStart() {
-    return _writePageStart(reference).check();
+    return _writePageStart(reference.pointer).check();
   }
 
   static final _writePageEnd = jniLookup<
@@ -1317,7 +1348,7 @@
   /// Write something (if defined) at the end of a page.
   ///@throws IOException if something went wrong
   void writePageEnd() {
-    return _writePageEnd(reference).check();
+    return _writePageEnd(reference.pointer).check();
   }
 
   static final _setListItemPatterns = jniLookup<
@@ -1336,7 +1367,8 @@
   void setListItemPatterns(
     jni.JList<jni.JObject> patterns,
   ) {
-    return _setListItemPatterns(reference, patterns.reference).check();
+    return _setListItemPatterns(reference.pointer, patterns.reference.pointer)
+        .check();
   }
 
   static final _getListItemPatterns = jniLookup<
@@ -1366,7 +1398,7 @@
   ///@return a list of Pattern objects.
   jni.JList<jni.JObject> getListItemPatterns() {
     return const jni.JListType(jni.JObjectType())
-        .fromRef(_getListItemPatterns(reference).object);
+        .fromRef(_getListItemPatterns(reference.pointer).object);
   }
 
   static final _matchPattern = jniLookup<
@@ -1394,8 +1426,9 @@
     jni.JString string,
     jni.JList<jni.JObject> patterns,
   ) {
-    return const jni.JObjectType()
-        .fromRef(_matchPattern(string.reference, patterns.reference).object);
+    return const jni.JObjectType().fromRef(
+        _matchPattern(string.reference.pointer, patterns.reference.pointer)
+            .object);
   }
 }
 
diff --git a/pkgs/jnigen/lib/src/bindings/dart_generator.dart b/pkgs/jnigen/lib/src/bindings/dart_generator.dart
index fb76f15..843f684 100644
--- a/pkgs/jnigen/lib/src/bindings/dart_generator.dart
+++ b/pkgs/jnigen/lib/src/bindings/dart_generator.dart
@@ -35,11 +35,11 @@
 
 // Misc.
 const _protectedExtension = 'ProtectedJniExtensions';
-const _classRef = '_class.reference';
+const _classRef = '_class.reference.pointer';
 const _env = '$_jni.Jni.env';
 const _accessors = '$_jni.Jni.accessors';
 const _lookup = 'jniLookup';
-const _selfPointer = 'reference';
+const _selfPointer = 'reference.pointer';
 
 // Docs.
 const _releaseInstruction =
@@ -1307,7 +1307,7 @@
     final \$c = $_jObject.fromRef($_protectedExtension.newPortContinuation(\$p));
     $callExpr;
     final \$o = $_jPointer.fromAddress(await \$p.first);
-    final \$k = $returnTypeClass.getClass().reference;
+    final \$k = $returnTypeClass.getClass().reference.pointer;
     if (!$_jni.Jni.env.IsInstanceOf(\$o, \$k)) {
       throw "Failed";
     }
@@ -1385,9 +1385,9 @@
 
 /// Method parameter used in calling the native method.
 ///
-/// For example `foo.reference` in:
+/// For example `foo.reference.pointer` in:
 /// ```dart
-/// void bar(Foo foo) => _bar(foo.reference);
+/// void bar(Foo foo) => _bar(foo.reference.pointer);
 /// ```
 class _ParamCall extends Visitor<Param, String> {
   final bool isCBased;
@@ -1702,7 +1702,7 @@
 /// `toPointer` detaches the object from the [NativeFinalizer] and Java
 /// will clean up the global reference afterwards.
 ///
-/// For example `$r.toJInteger().toPointer()` when the return
+/// For example `$r.toJInteger().reference.toPointer()` when the return
 /// type is `integer`.
 class _InterfaceReturnBox extends TypeVisitor<String> {
   const _InterfaceReturnBox();
@@ -1712,7 +1712,7 @@
     // Casting is done to create a new global reference. The user might
     // use the original reference elsewhere and so the original object
     // should not be [setAsReleased].
-    return '(\$r as $_jObject).castTo(const ${_jObject}Type()).toPointer()';
+    return '(\$r as $_jObject).castTo(const ${_jObject}Type()).reference.toPointer()';
   }
 
   @override
@@ -1720,6 +1720,6 @@
     if (node.name == 'void') {
       return '$_jni.nullptr';
     }
-    return '$_jni.J${node.boxedName}(\$r).toPointer()';
+    return '$_jni.J${node.boxedName}(\$r).reference.toPointer()';
   }
 }
diff --git a/pkgs/jnigen/test/jackson_core_test/third_party/c_based/dart_bindings/com/fasterxml/jackson/core/JsonFactory.dart b/pkgs/jnigen/test/jackson_core_test/third_party/c_based/dart_bindings/com/fasterxml/jackson/core/JsonFactory.dart
index 6d5ff7a..5edb7b3 100644
--- a/pkgs/jnigen/test/jackson_core_test/third_party/c_based/dart_bindings/com/fasterxml/jackson/core/JsonFactory.dart
+++ b/pkgs/jnigen/test/jackson_core_test/third_party/c_based/dart_bindings/com/fasterxml/jackson/core/JsonFactory.dart
@@ -80,7 +80,7 @@
     jni.JString name,
   ) {
     return const $JsonFactory_FeatureType()
-        .fromRef(_valueOf(name.reference).object);
+        .fromRef(_valueOf(name.reference.pointer).object);
   }
 
   static final _collectDefaults =
@@ -105,7 +105,7 @@
 
   /// from: public boolean enabledByDefault()
   bool enabledByDefault() {
-    return _enabledByDefault(reference).boolean;
+    return _enabledByDefault(reference.pointer).boolean;
   }
 
   static final _enabledIn = jniLookup<
@@ -118,7 +118,7 @@
   bool enabledIn(
     int flags,
   ) {
-    return _enabledIn(reference, flags).boolean;
+    return _enabledIn(reference.pointer, flags).boolean;
   }
 
   static final _getMask = jniLookup<
@@ -129,7 +129,7 @@
 
   /// from: public int getMask()
   int getMask() {
-    return _getMask(reference).integer;
+    return _getMask(reference.pointer).integer;
   }
 }
 
@@ -276,7 +276,7 @@
   factory JsonFactory.new1(
     jni.JObject oc,
   ) {
-    return JsonFactory.fromRef(_new1(oc.reference).object);
+    return JsonFactory.fromRef(_new1(oc.reference.pointer).object);
   }
 
   static final _new2 = jniLookup<
@@ -298,7 +298,8 @@
     JsonFactory src,
     jni.JObject codec,
   ) {
-    return JsonFactory.fromRef(_new2(src.reference, codec.reference).object);
+    return JsonFactory.fromRef(
+        _new2(src.reference.pointer, codec.reference.pointer).object);
   }
 
   static final _new3 = jniLookup<
@@ -316,7 +317,7 @@
   factory JsonFactory.new3(
     jni.JObject b,
   ) {
-    return JsonFactory.fromRef(_new3(b.reference).object);
+    return JsonFactory.fromRef(_new3(b.reference.pointer).object);
   }
 
   static final _new4 = jniLookup<
@@ -337,7 +338,8 @@
     jni.JObject b,
     bool bogus,
   ) {
-    return JsonFactory.fromRef(_new4(b.reference, bogus ? 1 : 0).object);
+    return JsonFactory.fromRef(
+        _new4(b.reference.pointer, bogus ? 1 : 0).object);
   }
 
   static final _rebuild = jniLookup<
@@ -354,7 +356,7 @@
   ///@return Builder instance to use
   ///@since 2.10
   jni.JObject rebuild() {
-    return const jni.JObjectType().fromRef(_rebuild(reference).object);
+    return const jni.JObjectType().fromRef(_rebuild(reference.pointer).object);
   }
 
   static final _builder =
@@ -399,7 +401,7 @@
   ///@return Copy of this factory instance
   ///@since 2.1
   JsonFactory copy() {
-    return const $JsonFactoryType().fromRef(_copy(reference).object);
+    return const $JsonFactoryType().fromRef(_copy(reference.pointer).object);
   }
 
   static final _readResolve = jniLookup<
@@ -418,7 +420,8 @@
   /// Note: must be overridden by sub-classes as well.
   ///@return Newly constructed instance
   jni.JObject readResolve() {
-    return const jni.JObjectType().fromRef(_readResolve(reference).object);
+    return const jni.JObjectType()
+        .fromRef(_readResolve(reference.pointer).object);
   }
 
   static final _requiresPropertyOrdering = jniLookup<
@@ -444,7 +447,7 @@
   ///   requires Object properties to be ordered.
   ///@since 2.3
   bool requiresPropertyOrdering() {
-    return _requiresPropertyOrdering(reference).boolean;
+    return _requiresPropertyOrdering(reference.pointer).boolean;
   }
 
   static final _canHandleBinaryNatively = jniLookup<
@@ -467,7 +470,7 @@
   ///    supports native binary content
   ///@since 2.3
   bool canHandleBinaryNatively() {
-    return _canHandleBinaryNatively(reference).boolean;
+    return _canHandleBinaryNatively(reference.pointer).boolean;
   }
 
   static final _canUseCharArrays = jniLookup<
@@ -490,7 +493,7 @@
   ///   accessed using parser method {@code getTextCharacters()}.
   ///@since 2.4
   bool canUseCharArrays() {
-    return _canUseCharArrays(reference).boolean;
+    return _canUseCharArrays(reference.pointer).boolean;
   }
 
   static final _canParseAsync = jniLookup<
@@ -509,7 +512,7 @@
   ///    not (and consequently whether {@code createNonBlockingXxx()} method(s) work)
   ///@since 2.9
   bool canParseAsync() {
-    return _canParseAsync(reference).boolean;
+    return _canParseAsync(reference.pointer).boolean;
   }
 
   static final _getFormatReadFeatureType = jniLookup<
@@ -522,7 +525,7 @@
   /// The returned object must be released after use, by calling the [release] method.
   jni.JObject getFormatReadFeatureType() {
     return const jni.JObjectType()
-        .fromRef(_getFormatReadFeatureType(reference).object);
+        .fromRef(_getFormatReadFeatureType(reference.pointer).object);
   }
 
   static final _getFormatWriteFeatureType = jniLookup<
@@ -535,7 +538,7 @@
   /// The returned object must be released after use, by calling the [release] method.
   jni.JObject getFormatWriteFeatureType() {
     return const jni.JObjectType()
-        .fromRef(_getFormatWriteFeatureType(reference).object);
+        .fromRef(_getFormatWriteFeatureType(reference.pointer).object);
   }
 
   static final _canUseSchema = jniLookup<
@@ -560,7 +563,7 @@
   bool canUseSchema(
     jni.JObject schema,
   ) {
-    return _canUseSchema(reference, schema.reference).boolean;
+    return _canUseSchema(reference.pointer, schema.reference.pointer).boolean;
   }
 
   static final _getFormatName = jniLookup<
@@ -579,7 +582,8 @@
   /// implementation will return null for all sub-classes
   ///@return Name of the format handled by parsers, generators this factory creates
   jni.JString getFormatName() {
-    return const jni.JStringType().fromRef(_getFormatName(reference).object);
+    return const jni.JStringType()
+        .fromRef(_getFormatName(reference.pointer).object);
   }
 
   static final _hasFormat = jniLookup<
@@ -596,7 +600,7 @@
     jni.JObject acc,
   ) {
     return const jni.JObjectType()
-        .fromRef(_hasFormat(reference, acc.reference).object);
+        .fromRef(_hasFormat(reference.pointer, acc.reference.pointer).object);
   }
 
   static final _requiresCustomCodec = jniLookup<
@@ -617,7 +621,7 @@
   ///   ObjectCodec is enough
   ///@since 2.1
   bool requiresCustomCodec() {
-    return _requiresCustomCodec(reference).boolean;
+    return _requiresCustomCodec(reference.pointer).boolean;
   }
 
   static final _hasJSONFormat = jniLookup<
@@ -633,8 +637,8 @@
   jni.JObject hasJSONFormat(
     jni.JObject acc,
   ) {
-    return const jni.JObjectType()
-        .fromRef(_hasJSONFormat(reference, acc.reference).object);
+    return const jni.JObjectType().fromRef(
+        _hasJSONFormat(reference.pointer, acc.reference.pointer).object);
   }
 
   static final _version = jniLookup<
@@ -646,7 +650,7 @@
   /// from: public com.fasterxml.jackson.core.Version version()
   /// The returned object must be released after use, by calling the [release] method.
   jni.JObject version() {
-    return const jni.JObjectType().fromRef(_version(reference).object);
+    return const jni.JObjectType().fromRef(_version(reference.pointer).object);
   }
 
   static final _configure = jniLookup<
@@ -670,8 +674,9 @@
     JsonFactory_Feature f,
     bool state,
   ) {
-    return const $JsonFactoryType()
-        .fromRef(_configure(reference, f.reference, state ? 1 : 0).object);
+    return const $JsonFactoryType().fromRef(
+        _configure(reference.pointer, f.reference.pointer, state ? 1 : 0)
+            .object);
   }
 
   static final _enable = jniLookup<
@@ -694,7 +699,7 @@
     JsonFactory_Feature f,
   ) {
     return const $JsonFactoryType()
-        .fromRef(_enable(reference, f.reference).object);
+        .fromRef(_enable(reference.pointer, f.reference.pointer).object);
   }
 
   static final _disable = jniLookup<
@@ -717,7 +722,7 @@
     JsonFactory_Feature f,
   ) {
     return const $JsonFactoryType()
-        .fromRef(_disable(reference, f.reference).object);
+        .fromRef(_disable(reference.pointer, f.reference.pointer).object);
   }
 
   static final _isEnabled = jniLookup<
@@ -736,7 +741,7 @@
   bool isEnabled(
     JsonFactory_Feature f,
   ) {
-    return _isEnabled(reference, f.reference).boolean;
+    return _isEnabled(reference.pointer, f.reference.pointer).boolean;
   }
 
   static final _getParserFeatures = jniLookup<
@@ -747,7 +752,7 @@
 
   /// from: public final int getParserFeatures()
   int getParserFeatures() {
-    return _getParserFeatures(reference).integer;
+    return _getParserFeatures(reference.pointer).integer;
   }
 
   static final _getGeneratorFeatures = jniLookup<
@@ -758,7 +763,7 @@
 
   /// from: public final int getGeneratorFeatures()
   int getGeneratorFeatures() {
-    return _getGeneratorFeatures(reference).integer;
+    return _getGeneratorFeatures(reference.pointer).integer;
   }
 
   static final _getFormatParserFeatures = jniLookup<
@@ -769,7 +774,7 @@
 
   /// from: public int getFormatParserFeatures()
   int getFormatParserFeatures() {
-    return _getFormatParserFeatures(reference).integer;
+    return _getFormatParserFeatures(reference.pointer).integer;
   }
 
   static final _getFormatGeneratorFeatures = jniLookup<
@@ -780,7 +785,7 @@
 
   /// from: public int getFormatGeneratorFeatures()
   int getFormatGeneratorFeatures() {
-    return _getFormatGeneratorFeatures(reference).integer;
+    return _getFormatGeneratorFeatures(reference.pointer).integer;
   }
 
   static final _configure1 = jniLookup<
@@ -803,8 +808,9 @@
     jsonparser_.JsonParser_Feature f,
     bool state,
   ) {
-    return const $JsonFactoryType()
-        .fromRef(_configure1(reference, f.reference, state ? 1 : 0).object);
+    return const $JsonFactoryType().fromRef(
+        _configure1(reference.pointer, f.reference.pointer, state ? 1 : 0)
+            .object);
   }
 
   static final _enable1 = jniLookup<
@@ -826,7 +832,7 @@
     jsonparser_.JsonParser_Feature f,
   ) {
     return const $JsonFactoryType()
-        .fromRef(_enable1(reference, f.reference).object);
+        .fromRef(_enable1(reference.pointer, f.reference.pointer).object);
   }
 
   static final _disable1 = jniLookup<
@@ -848,7 +854,7 @@
     jsonparser_.JsonParser_Feature f,
   ) {
     return const $JsonFactoryType()
-        .fromRef(_disable1(reference, f.reference).object);
+        .fromRef(_disable1(reference.pointer, f.reference.pointer).object);
   }
 
   static final _isEnabled1 = jniLookup<
@@ -867,7 +873,7 @@
   bool isEnabled1(
     jsonparser_.JsonParser_Feature f,
   ) {
-    return _isEnabled1(reference, f.reference).boolean;
+    return _isEnabled1(reference.pointer, f.reference.pointer).boolean;
   }
 
   static final _isEnabled2 = jniLookup<
@@ -887,7 +893,7 @@
   bool isEnabled2(
     jni.JObject f,
   ) {
-    return _isEnabled2(reference, f.reference).boolean;
+    return _isEnabled2(reference.pointer, f.reference.pointer).boolean;
   }
 
   static final _getInputDecorator = jniLookup<
@@ -904,7 +910,7 @@
   ///@return InputDecorator configured, if any
   jni.JObject getInputDecorator() {
     return const jni.JObjectType()
-        .fromRef(_getInputDecorator(reference).object);
+        .fromRef(_getInputDecorator(reference.pointer).object);
   }
 
   static final _setInputDecorator = jniLookup<
@@ -925,8 +931,8 @@
   JsonFactory setInputDecorator(
     jni.JObject d,
   ) {
-    return const $JsonFactoryType()
-        .fromRef(_setInputDecorator(reference, d.reference).object);
+    return const $JsonFactoryType().fromRef(
+        _setInputDecorator(reference.pointer, d.reference.pointer).object);
   }
 
   static final _configure2 = jniLookup<
@@ -949,8 +955,9 @@
     jni.JObject f,
     bool state,
   ) {
-    return const $JsonFactoryType()
-        .fromRef(_configure2(reference, f.reference, state ? 1 : 0).object);
+    return const $JsonFactoryType().fromRef(
+        _configure2(reference.pointer, f.reference.pointer, state ? 1 : 0)
+            .object);
   }
 
   static final _enable2 = jniLookup<
@@ -972,7 +979,7 @@
     jni.JObject f,
   ) {
     return const $JsonFactoryType()
-        .fromRef(_enable2(reference, f.reference).object);
+        .fromRef(_enable2(reference.pointer, f.reference.pointer).object);
   }
 
   static final _disable2 = jniLookup<
@@ -994,7 +1001,7 @@
     jni.JObject f,
   ) {
     return const $JsonFactoryType()
-        .fromRef(_disable2(reference, f.reference).object);
+        .fromRef(_disable2(reference.pointer, f.reference.pointer).object);
   }
 
   static final _isEnabled3 = jniLookup<
@@ -1013,7 +1020,7 @@
   bool isEnabled3(
     jni.JObject f,
   ) {
-    return _isEnabled3(reference, f.reference).boolean;
+    return _isEnabled3(reference.pointer, f.reference.pointer).boolean;
   }
 
   static final _isEnabled4 = jniLookup<
@@ -1033,7 +1040,7 @@
   bool isEnabled4(
     jni.JObject f,
   ) {
-    return _isEnabled4(reference, f.reference).boolean;
+    return _isEnabled4(reference.pointer, f.reference.pointer).boolean;
   }
 
   static final _getCharacterEscapes = jniLookup<
@@ -1050,7 +1057,7 @@
   ///@return Configured {@code CharacterEscapes}, if any; {@code null} if none
   jni.JObject getCharacterEscapes() {
     return const jni.JObjectType()
-        .fromRef(_getCharacterEscapes(reference).object);
+        .fromRef(_getCharacterEscapes(reference.pointer).object);
   }
 
   static final _setCharacterEscapes = jniLookup<
@@ -1071,8 +1078,8 @@
   JsonFactory setCharacterEscapes(
     jni.JObject esc,
   ) {
-    return const $JsonFactoryType()
-        .fromRef(_setCharacterEscapes(reference, esc.reference).object);
+    return const $JsonFactoryType().fromRef(
+        _setCharacterEscapes(reference.pointer, esc.reference.pointer).object);
   }
 
   static final _getOutputDecorator = jniLookup<
@@ -1090,7 +1097,7 @@
   ///    {@code null} if none.
   jni.JObject getOutputDecorator() {
     return const jni.JObjectType()
-        .fromRef(_getOutputDecorator(reference).object);
+        .fromRef(_getOutputDecorator(reference.pointer).object);
   }
 
   static final _setOutputDecorator = jniLookup<
@@ -1111,8 +1118,8 @@
   JsonFactory setOutputDecorator(
     jni.JObject d,
   ) {
-    return const $JsonFactoryType()
-        .fromRef(_setOutputDecorator(reference, d.reference).object);
+    return const $JsonFactoryType().fromRef(
+        _setOutputDecorator(reference.pointer, d.reference.pointer).object);
   }
 
   static final _setRootValueSeparator = jniLookup<
@@ -1134,8 +1141,9 @@
   JsonFactory setRootValueSeparator(
     jni.JString sep,
   ) {
-    return const $JsonFactoryType()
-        .fromRef(_setRootValueSeparator(reference, sep.reference).object);
+    return const $JsonFactoryType().fromRef(
+        _setRootValueSeparator(reference.pointer, sep.reference.pointer)
+            .object);
   }
 
   static final _getRootValueSeparator = jniLookup<
@@ -1150,7 +1158,7 @@
   /// @return Root value separator configured, if any
   jni.JString getRootValueSeparator() {
     return const jni.JStringType()
-        .fromRef(_getRootValueSeparator(reference).object);
+        .fromRef(_getRootValueSeparator(reference.pointer).object);
   }
 
   static final _setCodec = jniLookup<
@@ -1175,7 +1183,7 @@
     jni.JObject oc,
   ) {
     return const $JsonFactoryType()
-        .fromRef(_setCodec(reference, oc.reference).object);
+        .fromRef(_setCodec(reference.pointer, oc.reference.pointer).object);
   }
 
   static final _getCodec = jniLookup<
@@ -1187,7 +1195,7 @@
   /// from: public com.fasterxml.jackson.core.ObjectCodec getCodec()
   /// The returned object must be released after use, by calling the [release] method.
   jni.JObject getCodec() {
-    return const jni.JObjectType().fromRef(_getCodec(reference).object);
+    return const jni.JObjectType().fromRef(_getCodec(reference.pointer).object);
   }
 
   static final _createParser = jniLookup<
@@ -1221,7 +1229,7 @@
     jni.JObject f,
   ) {
     return const jsonparser_.$JsonParserType()
-        .fromRef(_createParser(reference, f.reference).object);
+        .fromRef(_createParser(reference.pointer, f.reference.pointer).object);
   }
 
   static final _createParser1 = jniLookup<
@@ -1252,8 +1260,8 @@
   jsonparser_.JsonParser createParser1(
     jni.JObject url,
   ) {
-    return const jsonparser_.$JsonParserType()
-        .fromRef(_createParser1(reference, url.reference).object);
+    return const jsonparser_.$JsonParserType().fromRef(
+        _createParser1(reference.pointer, url.reference.pointer).object);
   }
 
   static final _createParser2 = jniLookup<
@@ -1287,8 +1295,8 @@
   jsonparser_.JsonParser createParser2(
     jni.JObject in0,
   ) {
-    return const jsonparser_.$JsonParserType()
-        .fromRef(_createParser2(reference, in0.reference).object);
+    return const jsonparser_.$JsonParserType().fromRef(
+        _createParser2(reference.pointer, in0.reference.pointer).object);
   }
 
   static final _createParser3 = jniLookup<
@@ -1316,7 +1324,7 @@
     jni.JObject r,
   ) {
     return const jsonparser_.$JsonParserType()
-        .fromRef(_createParser3(reference, r.reference).object);
+        .fromRef(_createParser3(reference.pointer, r.reference.pointer).object);
   }
 
   static final _createParser4 = jniLookup<
@@ -1336,8 +1344,8 @@
   jsonparser_.JsonParser createParser4(
     jni.JArray<jni.jbyte> data,
   ) {
-    return const jsonparser_.$JsonParserType()
-        .fromRef(_createParser4(reference, data.reference).object);
+    return const jsonparser_.$JsonParserType().fromRef(
+        _createParser4(reference.pointer, data.reference.pointer).object);
   }
 
   static final _createParser5 = jniLookup<
@@ -1365,8 +1373,9 @@
     int offset,
     int len,
   ) {
-    return const jsonparser_.$JsonParserType()
-        .fromRef(_createParser5(reference, data.reference, offset, len).object);
+    return const jsonparser_.$JsonParserType().fromRef(
+        _createParser5(reference.pointer, data.reference.pointer, offset, len)
+            .object);
   }
 
   static final _createParser6 = jniLookup<
@@ -1386,8 +1395,8 @@
   jsonparser_.JsonParser createParser6(
     jni.JString content,
   ) {
-    return const jsonparser_.$JsonParserType()
-        .fromRef(_createParser6(reference, content.reference).object);
+    return const jsonparser_.$JsonParserType().fromRef(
+        _createParser6(reference.pointer, content.reference.pointer).object);
   }
 
   static final _createParser7 = jniLookup<
@@ -1407,8 +1416,8 @@
   jsonparser_.JsonParser createParser7(
     jni.JArray<jni.jchar> content,
   ) {
-    return const jsonparser_.$JsonParserType()
-        .fromRef(_createParser7(reference, content.reference).object);
+    return const jsonparser_.$JsonParserType().fromRef(
+        _createParser7(reference.pointer, content.reference.pointer).object);
   }
 
   static final _createParser8 = jniLookup<
@@ -1432,8 +1441,9 @@
     int offset,
     int len,
   ) {
-    return const jsonparser_.$JsonParserType().fromRef(
-        _createParser8(reference, content.reference, offset, len).object);
+    return const jsonparser_.$JsonParserType().fromRef(_createParser8(
+            reference.pointer, content.reference.pointer, offset, len)
+        .object);
   }
 
   static final _createParser9 = jniLookup<
@@ -1456,8 +1466,8 @@
   jsonparser_.JsonParser createParser9(
     jni.JObject in0,
   ) {
-    return const jsonparser_.$JsonParserType()
-        .fromRef(_createParser9(reference, in0.reference).object);
+    return const jsonparser_.$JsonParserType().fromRef(
+        _createParser9(reference.pointer, in0.reference.pointer).object);
   }
 
   static final _createNonBlockingByteArrayParser = jniLookup<
@@ -1484,7 +1494,7 @@
   ///@since 2.9
   jsonparser_.JsonParser createNonBlockingByteArrayParser() {
     return const jsonparser_.$JsonParserType()
-        .fromRef(_createNonBlockingByteArrayParser(reference).object);
+        .fromRef(_createNonBlockingByteArrayParser(reference.pointer).object);
   }
 
   static final _createGenerator = jniLookup<
@@ -1522,8 +1532,9 @@
     jni.JObject out,
     jni.JObject enc,
   ) {
-    return const jni.JObjectType().fromRef(
-        _createGenerator(reference, out.reference, enc.reference).object);
+    return const jni.JObjectType().fromRef(_createGenerator(
+            reference.pointer, out.reference.pointer, enc.reference.pointer)
+        .object);
   }
 
   static final _createGenerator1 = jniLookup<
@@ -1545,8 +1556,8 @@
   jni.JObject createGenerator1(
     jni.JObject out,
   ) {
-    return const jni.JObjectType()
-        .fromRef(_createGenerator1(reference, out.reference).object);
+    return const jni.JObjectType().fromRef(
+        _createGenerator1(reference.pointer, out.reference.pointer).object);
   }
 
   static final _createGenerator2 = jniLookup<
@@ -1574,8 +1585,8 @@
   jni.JObject createGenerator2(
     jni.JObject w,
   ) {
-    return const jni.JObjectType()
-        .fromRef(_createGenerator2(reference, w.reference).object);
+    return const jni.JObjectType().fromRef(
+        _createGenerator2(reference.pointer, w.reference.pointer).object);
   }
 
   static final _createGenerator3 = jniLookup<
@@ -1607,8 +1618,9 @@
     jni.JObject f,
     jni.JObject enc,
   ) {
-    return const jni.JObjectType().fromRef(
-        _createGenerator3(reference, f.reference, enc.reference).object);
+    return const jni.JObjectType().fromRef(_createGenerator3(
+            reference.pointer, f.reference.pointer, enc.reference.pointer)
+        .object);
   }
 
   static final _createGenerator4 = jniLookup<
@@ -1631,8 +1643,9 @@
     jni.JObject out,
     jni.JObject enc,
   ) {
-    return const jni.JObjectType().fromRef(
-        _createGenerator4(reference, out.reference, enc.reference).object);
+    return const jni.JObjectType().fromRef(_createGenerator4(
+            reference.pointer, out.reference.pointer, enc.reference.pointer)
+        .object);
   }
 
   static final _createGenerator5 = jniLookup<
@@ -1654,8 +1667,8 @@
   jni.JObject createGenerator5(
     jni.JObject out,
   ) {
-    return const jni.JObjectType()
-        .fromRef(_createGenerator5(reference, out.reference).object);
+    return const jni.JObjectType().fromRef(
+        _createGenerator5(reference.pointer, out.reference.pointer).object);
   }
 
   static final _createJsonParser = jniLookup<
@@ -1690,8 +1703,8 @@
   jsonparser_.JsonParser createJsonParser(
     jni.JObject f,
   ) {
-    return const jsonparser_.$JsonParserType()
-        .fromRef(_createJsonParser(reference, f.reference).object);
+    return const jsonparser_.$JsonParserType().fromRef(
+        _createJsonParser(reference.pointer, f.reference.pointer).object);
   }
 
   static final _createJsonParser1 = jniLookup<
@@ -1725,8 +1738,8 @@
   jsonparser_.JsonParser createJsonParser1(
     jni.JObject url,
   ) {
-    return const jsonparser_.$JsonParserType()
-        .fromRef(_createJsonParser1(reference, url.reference).object);
+    return const jsonparser_.$JsonParserType().fromRef(
+        _createJsonParser1(reference.pointer, url.reference.pointer).object);
   }
 
   static final _createJsonParser2 = jniLookup<
@@ -1763,8 +1776,8 @@
   jsonparser_.JsonParser createJsonParser2(
     jni.JObject in0,
   ) {
-    return const jsonparser_.$JsonParserType()
-        .fromRef(_createJsonParser2(reference, in0.reference).object);
+    return const jsonparser_.$JsonParserType().fromRef(
+        _createJsonParser2(reference.pointer, in0.reference.pointer).object);
   }
 
   static final _createJsonParser3 = jniLookup<
@@ -1794,8 +1807,8 @@
   jsonparser_.JsonParser createJsonParser3(
     jni.JObject r,
   ) {
-    return const jsonparser_.$JsonParserType()
-        .fromRef(_createJsonParser3(reference, r.reference).object);
+    return const jsonparser_.$JsonParserType().fromRef(
+        _createJsonParser3(reference.pointer, r.reference.pointer).object);
   }
 
   static final _createJsonParser4 = jniLookup<
@@ -1818,8 +1831,8 @@
   jsonparser_.JsonParser createJsonParser4(
     jni.JArray<jni.jbyte> data,
   ) {
-    return const jsonparser_.$JsonParserType()
-        .fromRef(_createJsonParser4(reference, data.reference).object);
+    return const jsonparser_.$JsonParserType().fromRef(
+        _createJsonParser4(reference.pointer, data.reference.pointer).object);
   }
 
   static final _createJsonParser5 = jniLookup<
@@ -1850,8 +1863,9 @@
     int offset,
     int len,
   ) {
-    return const jsonparser_.$JsonParserType().fromRef(
-        _createJsonParser5(reference, data.reference, offset, len).object);
+    return const jsonparser_.$JsonParserType().fromRef(_createJsonParser5(
+            reference.pointer, data.reference.pointer, offset, len)
+        .object);
   }
 
   static final _createJsonParser6 = jniLookup<
@@ -1875,8 +1889,9 @@
   jsonparser_.JsonParser createJsonParser6(
     jni.JString content,
   ) {
-    return const jsonparser_.$JsonParserType()
-        .fromRef(_createJsonParser6(reference, content.reference).object);
+    return const jsonparser_.$JsonParserType().fromRef(
+        _createJsonParser6(reference.pointer, content.reference.pointer)
+            .object);
   }
 
   static final _createJsonGenerator = jniLookup<
@@ -1916,8 +1931,9 @@
     jni.JObject out,
     jni.JObject enc,
   ) {
-    return const jni.JObjectType().fromRef(
-        _createJsonGenerator(reference, out.reference, enc.reference).object);
+    return const jni.JObjectType().fromRef(_createJsonGenerator(
+            reference.pointer, out.reference.pointer, enc.reference.pointer)
+        .object);
   }
 
   static final _createJsonGenerator1 = jniLookup<
@@ -1947,8 +1963,8 @@
   jni.JObject createJsonGenerator1(
     jni.JObject out,
   ) {
-    return const jni.JObjectType()
-        .fromRef(_createJsonGenerator1(reference, out.reference).object);
+    return const jni.JObjectType().fromRef(
+        _createJsonGenerator1(reference.pointer, out.reference.pointer).object);
   }
 
   static final _createJsonGenerator2 = jniLookup<
@@ -1973,8 +1989,8 @@
   jni.JObject createJsonGenerator2(
     jni.JObject out,
   ) {
-    return const jni.JObjectType()
-        .fromRef(_createJsonGenerator2(reference, out.reference).object);
+    return const jni.JObjectType().fromRef(
+        _createJsonGenerator2(reference.pointer, out.reference.pointer).object);
   }
 }
 
diff --git a/pkgs/jnigen/test/jackson_core_test/third_party/c_based/dart_bindings/com/fasterxml/jackson/core/JsonParser.dart b/pkgs/jnigen/test/jackson_core_test/third_party/c_based/dart_bindings/com/fasterxml/jackson/core/JsonParser.dart
index ea47c4c..1459632 100644
--- a/pkgs/jnigen/test/jackson_core_test/third_party/c_based/dart_bindings/com/fasterxml/jackson/core/JsonParser.dart
+++ b/pkgs/jnigen/test/jackson_core_test/third_party/c_based/dart_bindings/com/fasterxml/jackson/core/JsonParser.dart
@@ -79,7 +79,7 @@
     jni.JString name,
   ) {
     return const $JsonParser_FeatureType()
-        .fromRef(_valueOf(name.reference).object);
+        .fromRef(_valueOf(name.reference.pointer).object);
   }
 
   static final _collectDefaults =
@@ -104,7 +104,7 @@
 
   /// from: public boolean enabledByDefault()
   bool enabledByDefault() {
-    return _enabledByDefault(reference).boolean;
+    return _enabledByDefault(reference.pointer).boolean;
   }
 
   static final _enabledIn = jniLookup<
@@ -117,7 +117,7 @@
   bool enabledIn(
     int flags,
   ) {
-    return _enabledIn(reference, flags).boolean;
+    return _enabledIn(reference.pointer, flags).boolean;
   }
 
   static final _getMask = jniLookup<
@@ -128,7 +128,7 @@
 
   /// from: public int getMask()
   int getMask() {
-    return _getMask(reference).integer;
+    return _getMask(reference.pointer).integer;
   }
 }
 
@@ -196,7 +196,7 @@
     jni.JString name,
   ) {
     return const $JsonParser_NumberTypeType()
-        .fromRef(_valueOf(name.reference).object);
+        .fromRef(_valueOf(name.reference.pointer).object);
   }
 }
 
@@ -295,7 +295,7 @@
   /// method (and its variants).
   ///@return Codec assigned to this parser, if any; {@code null} if none
   jni.JObject getCodec() {
-    return const jni.JObjectType().fromRef(_getCodec(reference).object);
+    return const jni.JObjectType().fromRef(_getCodec(reference.pointer).object);
   }
 
   static final _setCodec = jniLookup<
@@ -315,7 +315,7 @@
   void setCodec(
     jni.JObject oc,
   ) {
-    return _setCodec(reference, oc.reference).check();
+    return _setCodec(reference.pointer, oc.reference.pointer).check();
   }
 
   static final _getInputSource = jniLookup<
@@ -342,7 +342,8 @@
   /// "last effort", i.e. only used if no other mechanism is applicable.
   ///@return Input source this parser was configured with
   jni.JObject getInputSource() {
-    return const jni.JObjectType().fromRef(_getInputSource(reference).object);
+    return const jni.JObjectType()
+        .fromRef(_getInputSource(reference.pointer).object);
   }
 
   static final _setRequestPayloadOnError = jniLookup<
@@ -362,7 +363,9 @@
   void setRequestPayloadOnError(
     jni.JObject payload,
   ) {
-    return _setRequestPayloadOnError(reference, payload.reference).check();
+    return _setRequestPayloadOnError(
+            reference.pointer, payload.reference.pointer)
+        .check();
   }
 
   static final _setRequestPayloadOnError1 = jniLookup<
@@ -384,8 +387,8 @@
     jni.JArray<jni.jbyte> payload,
     jni.JString charset,
   ) {
-    return _setRequestPayloadOnError1(
-            reference, payload.reference, charset.reference)
+    return _setRequestPayloadOnError1(reference.pointer,
+            payload.reference.pointer, charset.reference.pointer)
         .check();
   }
 
@@ -406,7 +409,9 @@
   void setRequestPayloadOnError2(
     jni.JString payload,
   ) {
-    return _setRequestPayloadOnError2(reference, payload.reference).check();
+    return _setRequestPayloadOnError2(
+            reference.pointer, payload.reference.pointer)
+        .check();
   }
 
   static final _setSchema = jniLookup<
@@ -432,7 +437,7 @@
   void setSchema(
     jni.JObject schema,
   ) {
-    return _setSchema(reference, schema.reference).check();
+    return _setSchema(reference.pointer, schema.reference.pointer).check();
   }
 
   static final _getSchema = jniLookup<
@@ -449,7 +454,8 @@
   ///@return Schema in use by this parser, if any; {@code null} if none
   ///@since 2.1
   jni.JObject getSchema() {
-    return const jni.JObjectType().fromRef(_getSchema(reference).object);
+    return const jni.JObjectType()
+        .fromRef(_getSchema(reference.pointer).object);
   }
 
   static final _canUseSchema = jniLookup<
@@ -469,7 +475,7 @@
   bool canUseSchema(
     jni.JObject schema,
   ) {
-    return _canUseSchema(reference, schema.reference).boolean;
+    return _canUseSchema(reference.pointer, schema.reference.pointer).boolean;
   }
 
   static final _requiresCustomCodec = jniLookup<
@@ -489,7 +495,7 @@
   ///   ObjectCodec is enough
   ///@since 2.1
   bool requiresCustomCodec() {
-    return _requiresCustomCodec(reference).boolean;
+    return _requiresCustomCodec(reference.pointer).boolean;
   }
 
   static final _canParseAsync = jniLookup<
@@ -512,7 +518,7 @@
   ///@return True if this is a non-blocking ("asynchronous") parser
   ///@since 2.9
   bool canParseAsync() {
-    return _canParseAsync(reference).boolean;
+    return _canParseAsync(reference.pointer).boolean;
   }
 
   static final _getNonBlockingInputFeeder = jniLookup<
@@ -531,7 +537,7 @@
   ///@since 2.9
   jni.JObject getNonBlockingInputFeeder() {
     return const jni.JObjectType()
-        .fromRef(_getNonBlockingInputFeeder(reference).object);
+        .fromRef(_getNonBlockingInputFeeder(reference.pointer).object);
   }
 
   static final _getReadCapabilities = jniLookup<
@@ -549,7 +555,7 @@
   ///@since 2.12
   jni.JObject getReadCapabilities() {
     return const jni.JObjectType()
-        .fromRef(_getReadCapabilities(reference).object);
+        .fromRef(_getReadCapabilities(reference.pointer).object);
   }
 
   static final _version = jniLookup<
@@ -566,7 +572,7 @@
   ///@return Version of this generator (derived from version declared for
   ///   {@code jackson-core} jar that contains the class
   jni.JObject version() {
-    return const jni.JObjectType().fromRef(_version(reference).object);
+    return const jni.JObjectType().fromRef(_version(reference.pointer).object);
   }
 
   static final _close = jniLookup<
@@ -592,7 +598,7 @@
   /// stream or reader it does own them.
   ///@throws IOException if there is either an underlying I/O problem
   void close() {
-    return _close(reference).check();
+    return _close(reference.pointer).check();
   }
 
   static final _isClosed = jniLookup<
@@ -611,7 +617,7 @@
   /// end of input.
   ///@return {@code True} if this parser instance has been closed
   bool isClosed() {
-    return _isClosed(reference).boolean;
+    return _isClosed(reference.pointer).boolean;
   }
 
   static final _getParsingContext = jniLookup<
@@ -634,7 +640,7 @@
   ///@return Stream input context (JsonStreamContext) associated with this parser
   jni.JObject getParsingContext() {
     return const jni.JObjectType()
-        .fromRef(_getParsingContext(reference).object);
+        .fromRef(_getParsingContext(reference.pointer).object);
   }
 
   static final _currentLocation = jniLookup<
@@ -659,7 +665,8 @@
   ///@return Location of the last processed input unit (byte or character)
   ///@since 2.13
   jni.JObject currentLocation() {
-    return const jni.JObjectType().fromRef(_currentLocation(reference).object);
+    return const jni.JObjectType()
+        .fromRef(_currentLocation(reference.pointer).object);
   }
 
   static final _currentTokenLocation = jniLookup<
@@ -685,7 +692,7 @@
   ///@since 2.13 (will eventually replace \#getTokenLocation)
   jni.JObject currentTokenLocation() {
     return const jni.JObjectType()
-        .fromRef(_currentTokenLocation(reference).object);
+        .fromRef(_currentTokenLocation(reference.pointer).object);
   }
 
   static final _getCurrentLocation = jniLookup<
@@ -702,7 +709,7 @@
   ///@return Location of the last processed input unit (byte or character)
   jni.JObject getCurrentLocation() {
     return const jni.JObjectType()
-        .fromRef(_getCurrentLocation(reference).object);
+        .fromRef(_getCurrentLocation(reference.pointer).object);
   }
 
   static final _getTokenLocation = jniLookup<
@@ -718,7 +725,8 @@
   /// Jackson 2.x versions (and removed from Jackson 3.0).
   ///@return Starting location of the token parser currently points to
   jni.JObject getTokenLocation() {
-    return const jni.JObjectType().fromRef(_getTokenLocation(reference).object);
+    return const jni.JObjectType()
+        .fromRef(_getTokenLocation(reference.pointer).object);
   }
 
   static final _currentValue = jniLookup<
@@ -742,7 +750,8 @@
   ///@return "Current value" associated with the current input context (state) of this parser
   ///@since 2.13 (added as replacement for older \#getCurrentValue()
   jni.JObject currentValue() {
-    return const jni.JObjectType().fromRef(_currentValue(reference).object);
+    return const jni.JObjectType()
+        .fromRef(_currentValue(reference.pointer).object);
   }
 
   static final _assignCurrentValue = jniLookup<
@@ -764,7 +773,7 @@
   void assignCurrentValue(
     jni.JObject v,
   ) {
-    return _assignCurrentValue(reference, v.reference).check();
+    return _assignCurrentValue(reference.pointer, v.reference.pointer).check();
   }
 
   static final _getCurrentValue = jniLookup<
@@ -780,7 +789,8 @@
   /// Jackson 2.x versions (and removed from Jackson 3.0).
   ///@return Location of the last processed input unit (byte or character)
   jni.JObject getCurrentValue() {
-    return const jni.JObjectType().fromRef(_getCurrentValue(reference).object);
+    return const jni.JObjectType()
+        .fromRef(_getCurrentValue(reference.pointer).object);
   }
 
   static final _setCurrentValue = jniLookup<
@@ -799,7 +809,7 @@
   void setCurrentValue(
     jni.JObject v,
   ) {
-    return _setCurrentValue(reference, v.reference).check();
+    return _setCurrentValue(reference.pointer, v.reference.pointer).check();
   }
 
   static final _releaseBuffered = jniLookup<
@@ -826,7 +836,7 @@
   int releaseBuffered(
     jni.JObject out,
   ) {
-    return _releaseBuffered(reference, out.reference).integer;
+    return _releaseBuffered(reference.pointer, out.reference.pointer).integer;
   }
 
   static final _releaseBuffered1 = jniLookup<
@@ -854,7 +864,7 @@
   int releaseBuffered1(
     jni.JObject w,
   ) {
-    return _releaseBuffered1(reference, w.reference).integer;
+    return _releaseBuffered1(reference.pointer, w.reference.pointer).integer;
   }
 
   static final _enable = jniLookup<
@@ -876,7 +886,7 @@
     JsonParser_Feature f,
   ) {
     return const $JsonParserType()
-        .fromRef(_enable(reference, f.reference).object);
+        .fromRef(_enable(reference.pointer, f.reference.pointer).object);
   }
 
   static final _disable = jniLookup<
@@ -898,7 +908,7 @@
     JsonParser_Feature f,
   ) {
     return const $JsonParserType()
-        .fromRef(_disable(reference, f.reference).object);
+        .fromRef(_disable(reference.pointer, f.reference.pointer).object);
   }
 
   static final _configure = jniLookup<
@@ -921,8 +931,9 @@
     JsonParser_Feature f,
     bool state,
   ) {
-    return const $JsonParserType()
-        .fromRef(_configure(reference, f.reference, state ? 1 : 0).object);
+    return const $JsonParserType().fromRef(
+        _configure(reference.pointer, f.reference.pointer, state ? 1 : 0)
+            .object);
   }
 
   static final _isEnabled = jniLookup<
@@ -941,7 +952,7 @@
   bool isEnabled(
     JsonParser_Feature f,
   ) {
-    return _isEnabled(reference, f.reference).boolean;
+    return _isEnabled(reference.pointer, f.reference.pointer).boolean;
   }
 
   static final _isEnabled1 = jniLookup<
@@ -961,7 +972,7 @@
   bool isEnabled1(
     jni.JObject f,
   ) {
-    return _isEnabled1(reference, f.reference).boolean;
+    return _isEnabled1(reference.pointer, f.reference.pointer).boolean;
   }
 
   static final _getFeatureMask = jniLookup<
@@ -976,7 +987,7 @@
   ///@return Bit mask that defines current states of all standard Features.
   ///@since 2.3
   int getFeatureMask() {
-    return _getFeatureMask(reference).integer;
+    return _getFeatureMask(reference.pointer).integer;
   }
 
   static final _setFeatureMask = jniLookup<
@@ -997,7 +1008,7 @@
     int mask,
   ) {
     return const $JsonParserType()
-        .fromRef(_setFeatureMask(reference, mask).object);
+        .fromRef(_setFeatureMask(reference.pointer, mask).object);
   }
 
   static final _overrideStdFeatures = jniLookup<
@@ -1026,7 +1037,7 @@
     int mask,
   ) {
     return const $JsonParserType()
-        .fromRef(_overrideStdFeatures(reference, values, mask).object);
+        .fromRef(_overrideStdFeatures(reference.pointer, values, mask).object);
   }
 
   static final _getFormatFeatures = jniLookup<
@@ -1042,7 +1053,7 @@
   ///@return Bit mask that defines current states of all standard FormatFeatures.
   ///@since 2.6
   int getFormatFeatures() {
-    return _getFormatFeatures(reference).integer;
+    return _getFormatFeatures(reference.pointer).integer;
   }
 
   static final _overrideFormatFeatures = jniLookup<
@@ -1068,8 +1079,8 @@
     int values,
     int mask,
   ) {
-    return const $JsonParserType()
-        .fromRef(_overrideFormatFeatures(reference, values, mask).object);
+    return const $JsonParserType().fromRef(
+        _overrideFormatFeatures(reference.pointer, values, mask).object);
   }
 
   static final _nextToken = jniLookup<
@@ -1091,7 +1102,7 @@
   ///   JsonParseException for decoding problems
   jsontoken_.JsonToken nextToken() {
     return const jsontoken_.$JsonTokenType()
-        .fromRef(_nextToken(reference).object);
+        .fromRef(_nextToken(reference.pointer).object);
   }
 
   static final _nextValue = jniLookup<
@@ -1121,7 +1132,7 @@
   ///   JsonParseException for decoding problems
   jsontoken_.JsonToken nextValue() {
     return const jsontoken_.$JsonTokenType()
-        .fromRef(_nextValue(reference).object);
+        .fromRef(_nextValue(reference.pointer).object);
   }
 
   static final _nextFieldName = jniLookup<
@@ -1152,7 +1163,7 @@
   bool nextFieldName(
     jni.JObject str,
   ) {
-    return _nextFieldName(reference, str.reference).boolean;
+    return _nextFieldName(reference.pointer, str.reference.pointer).boolean;
   }
 
   static final _nextFieldName1 = jniLookup<
@@ -1173,7 +1184,8 @@
   ///   JsonParseException for decoding problems
   ///@since 2.5
   jni.JString nextFieldName1() {
-    return const jni.JStringType().fromRef(_nextFieldName1(reference).object);
+    return const jni.JStringType()
+        .fromRef(_nextFieldName1(reference.pointer).object);
   }
 
   static final _nextTextValue = jniLookup<
@@ -1199,7 +1211,8 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   jni.JString nextTextValue() {
-    return const jni.JStringType().fromRef(_nextTextValue(reference).object);
+    return const jni.JStringType()
+        .fromRef(_nextTextValue(reference.pointer).object);
   }
 
   static final _nextIntValue = jniLookup<
@@ -1230,7 +1243,7 @@
   int nextIntValue(
     int defaultValue,
   ) {
-    return _nextIntValue(reference, defaultValue).integer;
+    return _nextIntValue(reference.pointer, defaultValue).integer;
   }
 
   static final _nextLongValue = jniLookup<
@@ -1261,7 +1274,7 @@
   int nextLongValue(
     int defaultValue,
   ) {
-    return _nextLongValue(reference, defaultValue).long;
+    return _nextLongValue(reference.pointer, defaultValue).long;
   }
 
   static final _nextBooleanValue = jniLookup<
@@ -1291,7 +1304,7 @@
   ///   JsonParseException for decoding problems
   jni.JBoolean nextBooleanValue() {
     return const jni.JBooleanType()
-        .fromRef(_nextBooleanValue(reference).object);
+        .fromRef(_nextBooleanValue(reference.pointer).object);
   }
 
   static final _skipChildren = jniLookup<
@@ -1319,7 +1332,8 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   JsonParser skipChildren() {
-    return const $JsonParserType().fromRef(_skipChildren(reference).object);
+    return const $JsonParserType()
+        .fromRef(_skipChildren(reference.pointer).object);
   }
 
   static final _finishToken = jniLookup<
@@ -1344,7 +1358,7 @@
   ///   JsonParseException for decoding problems
   ///@since 2.8
   void finishToken() {
-    return _finishToken(reference).check();
+    return _finishToken(reference.pointer).check();
   }
 
   static final _currentToken = jniLookup<
@@ -1367,7 +1381,7 @@
   ///@since 2.8
   jsontoken_.JsonToken currentToken() {
     return const jsontoken_.$JsonTokenType()
-        .fromRef(_currentToken(reference).object);
+        .fromRef(_currentToken(reference.pointer).object);
   }
 
   static final _currentTokenId = jniLookup<
@@ -1388,7 +1402,7 @@
   ///@since 2.8
   ///@return {@code int} matching one of constants from JsonTokenId.
   int currentTokenId() {
-    return _currentTokenId(reference).integer;
+    return _currentTokenId(reference.pointer).integer;
   }
 
   static final _getCurrentToken = jniLookup<
@@ -1406,7 +1420,7 @@
   ///   if any: null before any tokens have been read, and
   jsontoken_.JsonToken getCurrentToken() {
     return const jsontoken_.$JsonTokenType()
-        .fromRef(_getCurrentToken(reference).object);
+        .fromRef(_getCurrentToken(reference.pointer).object);
   }
 
   static final _getCurrentTokenId = jniLookup<
@@ -1421,7 +1435,7 @@
   ///@return {@code int} matching one of constants from JsonTokenId.
   ///@deprecated Since 2.12 use \#currentTokenId instead
   int getCurrentTokenId() {
-    return _getCurrentTokenId(reference).integer;
+    return _getCurrentTokenId(reference.pointer).integer;
   }
 
   static final _hasCurrentToken = jniLookup<
@@ -1441,7 +1455,7 @@
   ///   and returned null from \#nextToken, or the token
   ///   has been consumed)
   bool hasCurrentToken() {
-    return _hasCurrentToken(reference).boolean;
+    return _hasCurrentToken(reference.pointer).boolean;
   }
 
   static final _hasTokenId = jniLookup<
@@ -1467,7 +1481,7 @@
   bool hasTokenId(
     int id,
   ) {
-    return _hasTokenId(reference, id).boolean;
+    return _hasTokenId(reference.pointer, id).boolean;
   }
 
   static final _hasToken = jniLookup<
@@ -1495,7 +1509,7 @@
   bool hasToken(
     jsontoken_.JsonToken t,
   ) {
-    return _hasToken(reference, t.reference).boolean;
+    return _hasToken(reference.pointer, t.reference.pointer).boolean;
   }
 
   static final _isExpectedStartArrayToken = jniLookup<
@@ -1523,7 +1537,7 @@
   ///   start-array marker (such JsonToken\#START_ARRAY);
   ///   {@code false} if not
   bool isExpectedStartArrayToken() {
-    return _isExpectedStartArrayToken(reference).boolean;
+    return _isExpectedStartArrayToken(reference.pointer).boolean;
   }
 
   static final _isExpectedStartObjectToken = jniLookup<
@@ -1541,7 +1555,7 @@
   ///   {@code false} if not
   ///@since 2.5
   bool isExpectedStartObjectToken() {
-    return _isExpectedStartObjectToken(reference).boolean;
+    return _isExpectedStartObjectToken(reference.pointer).boolean;
   }
 
   static final _isExpectedNumberIntToken = jniLookup<
@@ -1562,7 +1576,7 @@
   ///   {@code false} if not
   ///@since 2.12
   bool isExpectedNumberIntToken() {
-    return _isExpectedNumberIntToken(reference).boolean;
+    return _isExpectedNumberIntToken(reference.pointer).boolean;
   }
 
   static final _isNaN = jniLookup<
@@ -1586,7 +1600,7 @@
   ///   JsonParseException for decoding problems
   ///@since 2.9
   bool isNaN() {
-    return _isNaN(reference).boolean;
+    return _isNaN(reference.pointer).boolean;
   }
 
   static final _clearCurrentToken = jniLookup<
@@ -1608,7 +1622,7 @@
   /// it has to be able to consume last token used for binding (so that
   /// it will not be used again).
   void clearCurrentToken() {
-    return _clearCurrentToken(reference).check();
+    return _clearCurrentToken(reference.pointer).check();
   }
 
   static final _getLastClearedToken = jniLookup<
@@ -1628,7 +1642,7 @@
   ///@return Last cleared token, if any; {@code null} otherwise
   jsontoken_.JsonToken getLastClearedToken() {
     return const jsontoken_.$JsonTokenType()
-        .fromRef(_getLastClearedToken(reference).object);
+        .fromRef(_getLastClearedToken(reference.pointer).object);
   }
 
   static final _overrideCurrentName = jniLookup<
@@ -1652,7 +1666,8 @@
   void overrideCurrentName(
     jni.JString name,
   ) {
-    return _overrideCurrentName(reference, name.reference).check();
+    return _overrideCurrentName(reference.pointer, name.reference.pointer)
+        .check();
   }
 
   static final _getCurrentName = jniLookup<
@@ -1669,7 +1684,8 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   jni.JString getCurrentName() {
-    return const jni.JStringType().fromRef(_getCurrentName(reference).object);
+    return const jni.JStringType()
+        .fromRef(_getCurrentName(reference.pointer).object);
   }
 
   static final _currentName = jniLookup<
@@ -1691,7 +1707,8 @@
   ///   JsonParseException for decoding problems
   ///@since 2.10
   jni.JString currentName() {
-    return const jni.JStringType().fromRef(_currentName(reference).object);
+    return const jni.JStringType()
+        .fromRef(_currentName(reference.pointer).object);
   }
 
   static final _getText = jniLookup<
@@ -1712,7 +1729,7 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   jni.JString getText() {
-    return const jni.JStringType().fromRef(_getText(reference).object);
+    return const jni.JStringType().fromRef(_getText(reference.pointer).object);
   }
 
   static final _getText1 = jniLookup<
@@ -1743,7 +1760,7 @@
   int getText1(
     jni.JObject writer,
   ) {
-    return _getText1(reference, writer.reference).integer;
+    return _getText1(reference.pointer, writer.reference.pointer).integer;
   }
 
   static final _getTextCharacters = jniLookup<
@@ -1784,7 +1801,7 @@
   ///   JsonParseException for decoding problems
   jni.JArray<jni.jchar> getTextCharacters() {
     return const jni.JArrayType(jni.jcharType())
-        .fromRef(_getTextCharacters(reference).object);
+        .fromRef(_getTextCharacters(reference.pointer).object);
   }
 
   static final _getTextLength = jniLookup<
@@ -1803,7 +1820,7 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   int getTextLength() {
-    return _getTextLength(reference).integer;
+    return _getTextLength(reference.pointer).integer;
   }
 
   static final _getTextOffset = jniLookup<
@@ -1822,7 +1839,7 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   int getTextOffset() {
-    return _getTextOffset(reference).integer;
+    return _getTextOffset(reference.pointer).integer;
   }
 
   static final _hasTextCharacters = jniLookup<
@@ -1848,7 +1865,7 @@
   ///   be efficiently returned via \#getTextCharacters; false
   ///   means that it may or may not exist
   bool hasTextCharacters() {
-    return _hasTextCharacters(reference).boolean;
+    return _hasTextCharacters(reference.pointer).boolean;
   }
 
   static final _getNumberValue = jniLookup<
@@ -1871,7 +1888,8 @@
   ///    (invalid format for numbers); plain IOException if underlying
   ///    content read fails (possible if values are extracted lazily)
   jni.JNumber getNumberValue() {
-    return const jni.JNumberType().fromRef(_getNumberValue(reference).object);
+    return const jni.JNumberType()
+        .fromRef(_getNumberValue(reference.pointer).object);
   }
 
   static final _getNumberValueExact = jniLookup<
@@ -1899,7 +1917,7 @@
   ///@since 2.12
   jni.JNumber getNumberValueExact() {
     return const jni.JNumberType()
-        .fromRef(_getNumberValueExact(reference).object);
+        .fromRef(_getNumberValueExact(reference.pointer).object);
   }
 
   static final _getNumberType = jniLookup<
@@ -1920,7 +1938,7 @@
   ///   JsonParseException for decoding problems
   JsonParser_NumberType getNumberType() {
     return const $JsonParser_NumberTypeType()
-        .fromRef(_getNumberType(reference).object);
+        .fromRef(_getNumberType(reference.pointer).object);
   }
 
   static final _getByteValue = jniLookup<
@@ -1953,7 +1971,7 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   int getByteValue() {
-    return _getByteValue(reference).byte;
+    return _getByteValue(reference.pointer).byte;
   }
 
   static final _getShortValue = jniLookup<
@@ -1980,7 +1998,7 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   int getShortValue() {
-    return _getShortValue(reference).short;
+    return _getShortValue(reference.pointer).short;
   }
 
   static final _getIntValue = jniLookup<
@@ -2007,7 +2025,7 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   int getIntValue() {
-    return _getIntValue(reference).integer;
+    return _getIntValue(reference.pointer).integer;
   }
 
   static final _getLongValue = jniLookup<
@@ -2034,7 +2052,7 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   int getLongValue() {
-    return _getLongValue(reference).long;
+    return _getLongValue(reference.pointer).long;
   }
 
   static final _getBigIntegerValue = jniLookup<
@@ -2059,7 +2077,7 @@
   ///   JsonParseException for decoding problems
   jni.JObject getBigIntegerValue() {
     return const jni.JObjectType()
-        .fromRef(_getBigIntegerValue(reference).object);
+        .fromRef(_getBigIntegerValue(reference.pointer).object);
   }
 
   static final _getFloatValue = jniLookup<
@@ -2086,7 +2104,7 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   double getFloatValue() {
-    return _getFloatValue(reference).float;
+    return _getFloatValue(reference.pointer).float;
   }
 
   static final _getDoubleValue = jniLookup<
@@ -2113,7 +2131,7 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   double getDoubleValue() {
-    return _getDoubleValue(reference).doubleFloat;
+    return _getDoubleValue(reference.pointer).doubleFloat;
   }
 
   static final _getDecimalValue = jniLookup<
@@ -2134,7 +2152,8 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   jni.JObject getDecimalValue() {
-    return const jni.JObjectType().fromRef(_getDecimalValue(reference).object);
+    return const jni.JObjectType()
+        .fromRef(_getDecimalValue(reference.pointer).object);
   }
 
   static final _getBooleanValue = jniLookup<
@@ -2157,7 +2176,7 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   bool getBooleanValue() {
-    return _getBooleanValue(reference).boolean;
+    return _getBooleanValue(reference.pointer).boolean;
   }
 
   static final _getEmbeddedObject = jniLookup<
@@ -2185,7 +2204,7 @@
   ///   JsonParseException for decoding problems
   jni.JObject getEmbeddedObject() {
     return const jni.JObjectType()
-        .fromRef(_getEmbeddedObject(reference).object);
+        .fromRef(_getEmbeddedObject(reference.pointer).object);
   }
 
   static final _getBinaryValue = jniLookup<
@@ -2222,8 +2241,8 @@
   jni.JArray<jni.jbyte> getBinaryValue(
     jni.JObject bv,
   ) {
-    return const jni.JArrayType(jni.jbyteType())
-        .fromRef(_getBinaryValue(reference, bv.reference).object);
+    return const jni.JArrayType(jni.jbyteType()).fromRef(
+        _getBinaryValue(reference.pointer, bv.reference.pointer).object);
   }
 
   static final _getBinaryValue1 = jniLookup<
@@ -2243,7 +2262,7 @@
   ///   JsonParseException for decoding problems
   jni.JArray<jni.jbyte> getBinaryValue1() {
     return const jni.JArrayType(jni.jbyteType())
-        .fromRef(_getBinaryValue1(reference).object);
+        .fromRef(_getBinaryValue1(reference.pointer).object);
   }
 
   static final _readBinaryValue = jniLookup<
@@ -2270,7 +2289,7 @@
   int readBinaryValue(
     jni.JObject out,
   ) {
-    return _readBinaryValue(reference, out.reference).integer;
+    return _readBinaryValue(reference.pointer, out.reference.pointer).integer;
   }
 
   static final _readBinaryValue1 = jniLookup<
@@ -2297,7 +2316,9 @@
     jni.JObject bv,
     jni.JObject out,
   ) {
-    return _readBinaryValue1(reference, bv.reference, out.reference).integer;
+    return _readBinaryValue1(
+            reference.pointer, bv.reference.pointer, out.reference.pointer)
+        .integer;
   }
 
   static final _getValueAsInt = jniLookup<
@@ -2322,7 +2343,7 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   int getValueAsInt() {
-    return _getValueAsInt(reference).integer;
+    return _getValueAsInt(reference.pointer).integer;
   }
 
   static final _getValueAsInt1 = jniLookup<
@@ -2349,7 +2370,7 @@
   int getValueAsInt1(
     int def,
   ) {
-    return _getValueAsInt1(reference, def).integer;
+    return _getValueAsInt1(reference.pointer, def).integer;
   }
 
   static final _getValueAsLong = jniLookup<
@@ -2374,7 +2395,7 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   int getValueAsLong() {
-    return _getValueAsLong(reference).long;
+    return _getValueAsLong(reference.pointer).long;
   }
 
   static final _getValueAsLong1 = jniLookup<
@@ -2401,7 +2422,7 @@
   int getValueAsLong1(
     int def,
   ) {
-    return _getValueAsLong1(reference, def).long;
+    return _getValueAsLong1(reference.pointer, def).long;
   }
 
   static final _getValueAsDouble = jniLookup<
@@ -2426,7 +2447,7 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   double getValueAsDouble() {
-    return _getValueAsDouble(reference).doubleFloat;
+    return _getValueAsDouble(reference.pointer).doubleFloat;
   }
 
   static final _getValueAsDouble1 = jniLookup<
@@ -2453,7 +2474,7 @@
   double getValueAsDouble1(
     double def,
   ) {
-    return _getValueAsDouble1(reference, def).doubleFloat;
+    return _getValueAsDouble1(reference.pointer, def).doubleFloat;
   }
 
   static final _getValueAsBoolean = jniLookup<
@@ -2478,7 +2499,7 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   bool getValueAsBoolean() {
-    return _getValueAsBoolean(reference).boolean;
+    return _getValueAsBoolean(reference.pointer).boolean;
   }
 
   static final _getValueAsBoolean1 = jniLookup<
@@ -2505,7 +2526,7 @@
   bool getValueAsBoolean1(
     bool def,
   ) {
-    return _getValueAsBoolean1(reference, def ? 1 : 0).boolean;
+    return _getValueAsBoolean1(reference.pointer, def ? 1 : 0).boolean;
   }
 
   static final _getValueAsString = jniLookup<
@@ -2529,7 +2550,8 @@
   ///   JsonParseException for decoding problems
   ///@since 2.1
   jni.JString getValueAsString() {
-    return const jni.JStringType().fromRef(_getValueAsString(reference).object);
+    return const jni.JStringType()
+        .fromRef(_getValueAsString(reference.pointer).object);
   }
 
   static final _getValueAsString1 = jniLookup<
@@ -2558,8 +2580,8 @@
   jni.JString getValueAsString1(
     jni.JString def,
   ) {
-    return const jni.JStringType()
-        .fromRef(_getValueAsString1(reference, def.reference).object);
+    return const jni.JStringType().fromRef(
+        _getValueAsString1(reference.pointer, def.reference.pointer).object);
   }
 
   static final _canReadObjectId = jniLookup<
@@ -2582,7 +2604,7 @@
   ///    {@code false} if not
   ///@since 2.3
   bool canReadObjectId() {
-    return _canReadObjectId(reference).boolean;
+    return _canReadObjectId(reference.pointer).boolean;
   }
 
   static final _canReadTypeId = jniLookup<
@@ -2605,7 +2627,7 @@
   ///    {@code false} if not
   ///@since 2.3
   bool canReadTypeId() {
-    return _canReadTypeId(reference).boolean;
+    return _canReadTypeId(reference.pointer).boolean;
   }
 
   static final _getObjectId = jniLookup<
@@ -2631,7 +2653,8 @@
   ///   JsonParseException for decoding problems
   ///@since 2.3
   jni.JObject getObjectId() {
-    return const jni.JObjectType().fromRef(_getObjectId(reference).object);
+    return const jni.JObjectType()
+        .fromRef(_getObjectId(reference.pointer).object);
   }
 
   static final _getTypeId = jniLookup<
@@ -2657,7 +2680,8 @@
   ///   JsonParseException for decoding problems
   ///@since 2.3
   jni.JObject getTypeId() {
-    return const jni.JObjectType().fromRef(_getTypeId(reference).object);
+    return const jni.JObjectType()
+        .fromRef(_getTypeId(reference.pointer).object);
   }
 
   static final _readValueAs = jniLookup<
@@ -2700,7 +2724,8 @@
     jni.JObject valueType, {
     required jni.JObjType<$T> T,
   }) {
-    return T.fromRef(_readValueAs(reference, valueType.reference).object);
+    return T.fromRef(
+        _readValueAs(reference.pointer, valueType.reference.pointer).object);
   }
 
   static final _readValueAs1 = jniLookup<
@@ -2740,7 +2765,9 @@
     jni.JObject valueTypeRef, {
     required jni.JObjType<$T> T,
   }) {
-    return T.fromRef(_readValueAs1(reference, valueTypeRef.reference).object);
+    return T.fromRef(
+        _readValueAs1(reference.pointer, valueTypeRef.reference.pointer)
+            .object);
   }
 
   static final _readValuesAs = jniLookup<
@@ -2766,8 +2793,8 @@
     jni.JObject valueType, {
     required jni.JObjType<$T> T,
   }) {
-    return jni.JIteratorType(T)
-        .fromRef(_readValuesAs(reference, valueType.reference).object);
+    return jni.JIteratorType(T).fromRef(
+        _readValuesAs(reference.pointer, valueType.reference.pointer).object);
   }
 
   static final _readValuesAs1 = jniLookup<
@@ -2793,8 +2820,9 @@
     jni.JObject valueTypeRef, {
     required jni.JObjType<$T> T,
   }) {
-    return jni.JIteratorType(T)
-        .fromRef(_readValuesAs1(reference, valueTypeRef.reference).object);
+    return jni.JIteratorType(T).fromRef(
+        _readValuesAs1(reference.pointer, valueTypeRef.reference.pointer)
+            .object);
   }
 
   static final _readValueAsTree = jniLookup<
@@ -2818,7 +2846,7 @@
   $T readValueAsTree<$T extends jni.JObject>({
     required jni.JObjType<$T> T,
   }) {
-    return T.fromRef(_readValueAsTree(reference).object);
+    return T.fromRef(_readValueAsTree(reference.pointer).object);
   }
 }
 
diff --git a/pkgs/jnigen/test/jackson_core_test/third_party/c_based/dart_bindings/com/fasterxml/jackson/core/JsonToken.dart b/pkgs/jnigen/test/jackson_core_test/third_party/c_based/dart_bindings/com/fasterxml/jackson/core/JsonToken.dart
index 2d036c5..0546890 100644
--- a/pkgs/jnigen/test/jackson_core_test/third_party/c_based/dart_bindings/com/fasterxml/jackson/core/JsonToken.dart
+++ b/pkgs/jnigen/test/jackson_core_test/third_party/c_based/dart_bindings/com/fasterxml/jackson/core/JsonToken.dart
@@ -77,7 +77,8 @@
   static JsonToken valueOf(
     jni.JString name,
   ) {
-    return const $JsonTokenType().fromRef(_valueOf(name.reference).object);
+    return const $JsonTokenType()
+        .fromRef(_valueOf(name.reference.pointer).object);
   }
 
   static final _id = jniLookup<
@@ -87,7 +88,7 @@
 
   /// from: public final int id()
   int id() {
-    return _id(reference).integer;
+    return _id(reference.pointer).integer;
   }
 
   static final _asString = jniLookup<
@@ -99,7 +100,7 @@
   /// from: public final java.lang.String asString()
   /// The returned object must be released after use, by calling the [release] method.
   jni.JString asString() {
-    return const jni.JStringType().fromRef(_asString(reference).object);
+    return const jni.JStringType().fromRef(_asString(reference.pointer).object);
   }
 
   static final _asCharArray = jniLookup<
@@ -112,7 +113,7 @@
   /// The returned object must be released after use, by calling the [release] method.
   jni.JArray<jni.jchar> asCharArray() {
     return const jni.JArrayType(jni.jcharType())
-        .fromRef(_asCharArray(reference).object);
+        .fromRef(_asCharArray(reference.pointer).object);
   }
 
   static final _asByteArray = jniLookup<
@@ -125,7 +126,7 @@
   /// The returned object must be released after use, by calling the [release] method.
   jni.JArray<jni.jbyte> asByteArray() {
     return const jni.JArrayType(jni.jbyteType())
-        .fromRef(_asByteArray(reference).object);
+        .fromRef(_asByteArray(reference.pointer).object);
   }
 
   static final _isNumeric = jniLookup<
@@ -139,7 +140,7 @@
   /// @return {@code True} if this token is {@code VALUE_NUMBER_INT} or {@code VALUE_NUMBER_FLOAT},
   ///   {@code false} otherwise
   bool isNumeric() {
-    return _isNumeric(reference).boolean;
+    return _isNumeric(reference.pointer).boolean;
   }
 
   static final _isStructStart = jniLookup<
@@ -158,7 +159,7 @@
   ///   {@code false} otherwise
   ///@since 2.3
   bool isStructStart() {
-    return _isStructStart(reference).boolean;
+    return _isStructStart(reference.pointer).boolean;
   }
 
   static final _isStructEnd = jniLookup<
@@ -177,7 +178,7 @@
   ///   {@code false} otherwise
   ///@since 2.3
   bool isStructEnd() {
-    return _isStructEnd(reference).boolean;
+    return _isStructEnd(reference.pointer).boolean;
   }
 
   static final _isScalarValue = jniLookup<
@@ -195,7 +196,7 @@
   ///@return {@code True} if this token is a scalar value token (one of
   ///   {@code VALUE_xxx} tokens), {@code false} otherwise
   bool isScalarValue() {
-    return _isScalarValue(reference).boolean;
+    return _isScalarValue(reference.pointer).boolean;
   }
 
   static final _isBoolean = jniLookup<
@@ -209,7 +210,7 @@
   /// @return {@code True} if this token is {@code VALUE_TRUE} or {@code VALUE_FALSE},
   ///   {@code false} otherwise
   bool isBoolean() {
-    return _isBoolean(reference).boolean;
+    return _isBoolean(reference.pointer).boolean;
   }
 }
 
diff --git a/pkgs/jnigen/test/jackson_core_test/third_party/dart_only/dart_bindings/com/fasterxml/jackson/core/JsonFactory.dart b/pkgs/jnigen/test/jackson_core_test/third_party/dart_only/dart_bindings/com/fasterxml/jackson/core/JsonFactory.dart
index e1f2bbe..f8d55f1 100644
--- a/pkgs/jnigen/test/jackson_core_test/third_party/dart_only/dart_bindings/com/fasterxml/jackson/core/JsonFactory.dart
+++ b/pkgs/jnigen/test/jackson_core_test/third_party/dart_only/dart_bindings/com/fasterxml/jackson/core/JsonFactory.dart
@@ -59,7 +59,7 @@
   /// The type which includes information such as the signature of this class.
   static const type = $JsonFactory_FeatureType();
   static final _id_values = jni.Jni.accessors.getStaticMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"values",
       r"()[Lcom/fasterxml/jackson/core/JsonFactory$Feature;");
 
@@ -67,12 +67,12 @@
   /// The returned object must be released after use, by calling the [release] method.
   static jni.JArray<JsonFactory_Feature> values() {
     return const jni.JArrayType($JsonFactory_FeatureType()).fromRef(
-        jni.Jni.accessors.callStaticMethodWithArgs(_class.reference, _id_values,
-            jni.JniCallType.objectType, []).object);
+        jni.Jni.accessors.callStaticMethodWithArgs(_class.reference.pointer,
+            _id_values, jni.JniCallType.objectType, []).object);
   }
 
   static final _id_valueOf = jni.Jni.accessors.getStaticMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"valueOf",
       r"(Ljava/lang/String;)Lcom/fasterxml/jackson/core/JsonFactory$Feature;");
 
@@ -82,12 +82,12 @@
     jni.JString name,
   ) {
     return const $JsonFactory_FeatureType().fromRef(jni.Jni.accessors
-        .callStaticMethodWithArgs(_class.reference, _id_valueOf,
-            jni.JniCallType.objectType, [name.reference]).object);
+        .callStaticMethodWithArgs(_class.reference.pointer, _id_valueOf,
+            jni.JniCallType.objectType, [name.reference.pointer]).object);
   }
 
-  static final _id_collectDefaults = jni.Jni.accessors
-      .getStaticMethodIDOf(_class.reference, r"collectDefaults", r"()I");
+  static final _id_collectDefaults = jni.Jni.accessors.getStaticMethodIDOf(
+      _class.reference.pointer, r"collectDefaults", r"()I");
 
   /// from: static public int collectDefaults()
   ///
@@ -95,37 +95,40 @@
   /// are enabled by default.
   ///@return Bit field of features enabled by default
   static int collectDefaults() {
-    return jni.Jni.accessors.callStaticMethodWithArgs(_class.reference,
+    return jni.Jni.accessors.callStaticMethodWithArgs(_class.reference.pointer,
         _id_collectDefaults, jni.JniCallType.intType, []).integer;
   }
 
   static final _id_enabledByDefault = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"enabledByDefault", r"()Z");
+      .getMethodIDOf(_class.reference.pointer, r"enabledByDefault", r"()Z");
 
   /// from: public boolean enabledByDefault()
   bool enabledByDefault() {
-    return jni.Jni.accessors.callMethodWithArgs(reference, _id_enabledByDefault,
-        jni.JniCallType.booleanType, []).boolean;
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
+        _id_enabledByDefault, jni.JniCallType.booleanType, []).boolean;
   }
 
-  static final _id_enabledIn =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"enabledIn", r"(I)Z");
+  static final _id_enabledIn = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"enabledIn", r"(I)Z");
 
   /// from: public boolean enabledIn(int flags)
   bool enabledIn(
     int flags,
   ) {
-    return jni.Jni.accessors.callMethodWithArgs(reference, _id_enabledIn,
-        jni.JniCallType.booleanType, [jni.JValueInt(flags)]).boolean;
+    return jni.Jni.accessors.callMethodWithArgs(
+        reference.pointer,
+        _id_enabledIn,
+        jni.JniCallType.booleanType,
+        [jni.JValueInt(flags)]).boolean;
   }
 
-  static final _id_getMask =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"getMask", r"()I");
+  static final _id_getMask = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"getMask", r"()I");
 
   /// from: public int getMask()
   int getMask() {
     return jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_getMask, jni.JniCallType.intType, []).integer;
+        reference.pointer, _id_getMask, jni.JniCallType.intType, []).integer;
   }
 }
 
@@ -188,7 +191,7 @@
   /// The type which includes information such as the signature of this class.
   static const type = $JsonFactoryType();
   static final _id_FORMAT_NAME_JSON = jni.Jni.accessors.getStaticFieldIDOf(
-    _class.reference,
+    _class.reference.pointer,
     r"FORMAT_NAME_JSON",
     r"Ljava/lang/String;",
   );
@@ -198,15 +201,15 @@
   ///
   /// Name used to identify JSON format
   /// (and returned by \#getFormatName()
-  static jni.JString get FORMAT_NAME_JSON => const jni.JStringType().fromRef(jni
-      .Jni.accessors
-      .getStaticField(
-          _class.reference, _id_FORMAT_NAME_JSON, jni.JniCallType.objectType)
-      .object);
+  static jni.JString get FORMAT_NAME_JSON =>
+      const jni.JStringType().fromRef(jni.Jni.accessors
+          .getStaticField(_class.reference.pointer, _id_FORMAT_NAME_JSON,
+              jni.JniCallType.objectType)
+          .object);
 
   static final _id_DEFAULT_FACTORY_FEATURE_FLAGS =
       jni.Jni.accessors.getStaticFieldIDOf(
-    _class.reference,
+    _class.reference.pointer,
     r"DEFAULT_FACTORY_FEATURE_FLAGS",
     r"I",
   );
@@ -215,13 +218,13 @@
   ///
   /// Bitfield (set of flags) of all factory features that are enabled by default.
   static int get DEFAULT_FACTORY_FEATURE_FLAGS => jni.Jni.accessors
-      .getStaticField(_class.reference, _id_DEFAULT_FACTORY_FEATURE_FLAGS,
-          jni.JniCallType.intType)
+      .getStaticField(_class.reference.pointer,
+          _id_DEFAULT_FACTORY_FEATURE_FLAGS, jni.JniCallType.intType)
       .integer;
 
   static final _id_DEFAULT_PARSER_FEATURE_FLAGS =
       jni.Jni.accessors.getStaticFieldIDOf(
-    _class.reference,
+    _class.reference.pointer,
     r"DEFAULT_PARSER_FEATURE_FLAGS",
     r"I",
   );
@@ -231,13 +234,13 @@
   /// Bitfield (set of flags) of all parser features that are enabled
   /// by default.
   static int get DEFAULT_PARSER_FEATURE_FLAGS => jni.Jni.accessors
-      .getStaticField(_class.reference, _id_DEFAULT_PARSER_FEATURE_FLAGS,
-          jni.JniCallType.intType)
+      .getStaticField(_class.reference.pointer,
+          _id_DEFAULT_PARSER_FEATURE_FLAGS, jni.JniCallType.intType)
       .integer;
 
   static final _id_DEFAULT_GENERATOR_FEATURE_FLAGS =
       jni.Jni.accessors.getStaticFieldIDOf(
-    _class.reference,
+    _class.reference.pointer,
     r"DEFAULT_GENERATOR_FEATURE_FLAGS",
     r"I",
   );
@@ -247,13 +250,13 @@
   /// Bitfield (set of flags) of all generator features that are enabled
   /// by default.
   static int get DEFAULT_GENERATOR_FEATURE_FLAGS => jni.Jni.accessors
-      .getStaticField(_class.reference, _id_DEFAULT_GENERATOR_FEATURE_FLAGS,
-          jni.JniCallType.intType)
+      .getStaticField(_class.reference.pointer,
+          _id_DEFAULT_GENERATOR_FEATURE_FLAGS, jni.JniCallType.intType)
       .integer;
 
   static final _id_DEFAULT_ROOT_VALUE_SEPARATOR =
       jni.Jni.accessors.getStaticFieldIDOf(
-    _class.reference,
+    _class.reference.pointer,
     r"DEFAULT_ROOT_VALUE_SEPARATOR",
     r"Lcom/fasterxml/jackson/core/SerializableString;",
   );
@@ -262,12 +265,12 @@
   /// The returned object must be released after use, by calling the [release] method.
   static jni.JObject get DEFAULT_ROOT_VALUE_SEPARATOR =>
       const jni.JObjectType().fromRef(jni.Jni.accessors
-          .getStaticField(_class.reference, _id_DEFAULT_ROOT_VALUE_SEPARATOR,
-              jni.JniCallType.objectType)
+          .getStaticField(_class.reference.pointer,
+              _id_DEFAULT_ROOT_VALUE_SEPARATOR, jni.JniCallType.objectType)
           .object);
 
-  static final _id_new0 =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"()V");
+  static final _id_new0 = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"<init>", r"()V");
 
   /// from: public void <init>()
   /// The returned object must be released after use, by calling the [release] method.
@@ -282,23 +285,25 @@
   /// factory instance.
   factory JsonFactory() {
     return JsonFactory.fromRef(jni.Jni.accessors
-        .newObjectWithArgs(_class.reference, _id_new0, []).object);
+        .newObjectWithArgs(_class.reference.pointer, _id_new0, []).object);
   }
 
-  static final _id_new1 = jni.Jni.accessors.getMethodIDOf(_class.reference,
-      r"<init>", r"(Lcom/fasterxml/jackson/core/ObjectCodec;)V");
+  static final _id_new1 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference.pointer,
+      r"<init>",
+      r"(Lcom/fasterxml/jackson/core/ObjectCodec;)V");
 
   /// from: public void <init>(com.fasterxml.jackson.core.ObjectCodec oc)
   /// The returned object must be released after use, by calling the [release] method.
   factory JsonFactory.new1(
     jni.JObject oc,
   ) {
-    return JsonFactory.fromRef(jni.Jni.accessors
-        .newObjectWithArgs(_class.reference, _id_new1, [oc.reference]).object);
+    return JsonFactory.fromRef(jni.Jni.accessors.newObjectWithArgs(
+        _class.reference.pointer, _id_new1, [oc.reference.pointer]).object);
   }
 
   static final _id_new2 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"<init>",
       r"(Lcom/fasterxml/jackson/core/JsonFactory;Lcom/fasterxml/jackson/core/ObjectCodec;)V");
 
@@ -314,11 +319,15 @@
     jni.JObject codec,
   ) {
     return JsonFactory.fromRef(jni.Jni.accessors.newObjectWithArgs(
-        _class.reference, _id_new2, [src.reference, codec.reference]).object);
+        _class.reference.pointer,
+        _id_new2,
+        [src.reference.pointer, codec.reference.pointer]).object);
   }
 
-  static final _id_new3 = jni.Jni.accessors.getMethodIDOf(_class.reference,
-      r"<init>", r"(Lcom/fasterxml/jackson/core/JsonFactoryBuilder;)V");
+  static final _id_new3 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference.pointer,
+      r"<init>",
+      r"(Lcom/fasterxml/jackson/core/JsonFactoryBuilder;)V");
 
   /// from: public void <init>(com.fasterxml.jackson.core.JsonFactoryBuilder b)
   /// The returned object must be released after use, by calling the [release] method.
@@ -329,12 +338,14 @@
   factory JsonFactory.new3(
     jni.JObject b,
   ) {
-    return JsonFactory.fromRef(jni.Jni.accessors
-        .newObjectWithArgs(_class.reference, _id_new3, [b.reference]).object);
+    return JsonFactory.fromRef(jni.Jni.accessors.newObjectWithArgs(
+        _class.reference.pointer, _id_new3, [b.reference.pointer]).object);
   }
 
-  static final _id_new4 = jni.Jni.accessors.getMethodIDOf(_class.reference,
-      r"<init>", r"(Lcom/fasterxml/jackson/core/TSFBuilder;Z)V");
+  static final _id_new4 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference.pointer,
+      r"<init>",
+      r"(Lcom/fasterxml/jackson/core/TSFBuilder;Z)V");
 
   /// from: protected void <init>(com.fasterxml.jackson.core.TSFBuilder<?,?> b, boolean bogus)
   /// The returned object must be released after use, by calling the [release] method.
@@ -349,11 +360,15 @@
     bool bogus,
   ) {
     return JsonFactory.fromRef(jni.Jni.accessors.newObjectWithArgs(
-        _class.reference, _id_new4, [b.reference, bogus ? 1 : 0]).object);
+        _class.reference.pointer,
+        _id_new4,
+        [b.reference.pointer, bogus ? 1 : 0]).object);
   }
 
-  static final _id_rebuild = jni.Jni.accessors.getMethodIDOf(_class.reference,
-      r"rebuild", r"()Lcom/fasterxml/jackson/core/TSFBuilder;");
+  static final _id_rebuild = jni.Jni.accessors.getMethodIDOf(
+      _class.reference.pointer,
+      r"rebuild",
+      r"()Lcom/fasterxml/jackson/core/TSFBuilder;");
 
   /// from: public com.fasterxml.jackson.core.TSFBuilder<?,?> rebuild()
   /// The returned object must be released after use, by calling the [release] method.
@@ -364,11 +379,11 @@
   ///@since 2.10
   jni.JObject rebuild() {
     return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_rebuild, jni.JniCallType.objectType, []).object);
+        reference.pointer, _id_rebuild, jni.JniCallType.objectType, []).object);
   }
 
   static final _id_builder = jni.Jni.accessors.getStaticMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"builder",
       r"()Lcom/fasterxml/jackson/core/TSFBuilder;");
 
@@ -385,12 +400,14 @@
   ///@return Builder instance to use
   static jni.JObject builder() {
     return const jni.JObjectType().fromRef(jni.Jni.accessors
-        .callStaticMethodWithArgs(_class.reference, _id_builder,
+        .callStaticMethodWithArgs(_class.reference.pointer, _id_builder,
             jni.JniCallType.objectType, []).object);
   }
 
   static final _id_copy = jni.Jni.accessors.getMethodIDOf(
-      _class.reference, r"copy", r"()Lcom/fasterxml/jackson/core/JsonFactory;");
+      _class.reference.pointer,
+      r"copy",
+      r"()Lcom/fasterxml/jackson/core/JsonFactory;");
 
   /// from: public com.fasterxml.jackson.core.JsonFactory copy()
   /// The returned object must be released after use, by calling the [release] method.
@@ -409,12 +426,12 @@
   ///@since 2.1
   JsonFactory copy() {
     return const $JsonFactoryType().fromRef(jni.Jni.accessors
-        .callMethodWithArgs(
-            reference, _id_copy, jni.JniCallType.objectType, []).object);
+        .callMethodWithArgs(reference.pointer, _id_copy,
+            jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_readResolve = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"readResolve", r"()Ljava/lang/Object;");
+  static final _id_readResolve = jni.Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"readResolve", r"()Ljava/lang/Object;");
 
   /// from: protected java.lang.Object readResolve()
   /// The returned object must be released after use, by calling the [release] method.
@@ -427,11 +444,13 @@
   ///@return Newly constructed instance
   jni.JObject readResolve() {
     return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_readResolve, jni.JniCallType.objectType, []).object);
+        reference.pointer,
+        _id_readResolve,
+        jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_requiresPropertyOrdering = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"requiresPropertyOrdering", r"()Z");
+  static final _id_requiresPropertyOrdering = jni.Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"requiresPropertyOrdering", r"()Z");
 
   /// from: public boolean requiresPropertyOrdering()
   ///
@@ -450,12 +469,12 @@
   ///   requires Object properties to be ordered.
   ///@since 2.3
   bool requiresPropertyOrdering() {
-    return jni.Jni.accessors.callMethodWithArgs(reference,
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
         _id_requiresPropertyOrdering, jni.JniCallType.booleanType, []).boolean;
   }
 
-  static final _id_canHandleBinaryNatively = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"canHandleBinaryNatively", r"()Z");
+  static final _id_canHandleBinaryNatively = jni.Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"canHandleBinaryNatively", r"()Z");
 
   /// from: public boolean canHandleBinaryNatively()
   ///
@@ -471,12 +490,12 @@
   ///    supports native binary content
   ///@since 2.3
   bool canHandleBinaryNatively() {
-    return jni.Jni.accessors.callMethodWithArgs(reference,
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
         _id_canHandleBinaryNatively, jni.JniCallType.booleanType, []).boolean;
   }
 
   static final _id_canUseCharArrays = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"canUseCharArrays", r"()Z");
+      .getMethodIDOf(_class.reference.pointer, r"canUseCharArrays", r"()Z");
 
   /// from: public boolean canUseCharArrays()
   ///
@@ -492,12 +511,12 @@
   ///   accessed using parser method {@code getTextCharacters()}.
   ///@since 2.4
   bool canUseCharArrays() {
-    return jni.Jni.accessors.callMethodWithArgs(reference, _id_canUseCharArrays,
-        jni.JniCallType.booleanType, []).boolean;
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
+        _id_canUseCharArrays, jni.JniCallType.booleanType, []).boolean;
   }
 
   static final _id_canParseAsync = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"canParseAsync", r"()Z");
+      .getMethodIDOf(_class.reference.pointer, r"canParseAsync", r"()Z");
 
   /// from: public boolean canParseAsync()
   ///
@@ -509,36 +528,40 @@
   ///    not (and consequently whether {@code createNonBlockingXxx()} method(s) work)
   ///@since 2.9
   bool canParseAsync() {
-    return jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_canParseAsync, jni.JniCallType.booleanType, []).boolean;
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
+        _id_canParseAsync, jni.JniCallType.booleanType, []).boolean;
   }
 
   static final _id_getFormatReadFeatureType = jni.Jni.accessors.getMethodIDOf(
-      _class.reference, r"getFormatReadFeatureType", r"()Ljava/lang/Class;");
+      _class.reference.pointer,
+      r"getFormatReadFeatureType",
+      r"()Ljava/lang/Class;");
 
   /// from: public java.lang.Class<? extends com.fasterxml.jackson.core.FormatFeature> getFormatReadFeatureType()
   /// The returned object must be released after use, by calling the [release] method.
   jni.JObject getFormatReadFeatureType() {
     return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_getFormatReadFeatureType,
         jni.JniCallType.objectType, []).object);
   }
 
   static final _id_getFormatWriteFeatureType = jni.Jni.accessors.getMethodIDOf(
-      _class.reference, r"getFormatWriteFeatureType", r"()Ljava/lang/Class;");
+      _class.reference.pointer,
+      r"getFormatWriteFeatureType",
+      r"()Ljava/lang/Class;");
 
   /// from: public java.lang.Class<? extends com.fasterxml.jackson.core.FormatFeature> getFormatWriteFeatureType()
   /// The returned object must be released after use, by calling the [release] method.
   jni.JObject getFormatWriteFeatureType() {
     return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_getFormatWriteFeatureType,
         jni.JniCallType.objectType, []).object);
   }
 
   static final _id_canUseSchema = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"canUseSchema",
       r"(Lcom/fasterxml/jackson/core/FormatSchema;)Z");
 
@@ -556,12 +579,15 @@
   bool canUseSchema(
     jni.JObject schema,
   ) {
-    return jni.Jni.accessors.callMethodWithArgs(reference, _id_canUseSchema,
-        jni.JniCallType.booleanType, [schema.reference]).boolean;
+    return jni.Jni.accessors.callMethodWithArgs(
+        reference.pointer,
+        _id_canUseSchema,
+        jni.JniCallType.booleanType,
+        [schema.reference.pointer]).boolean;
   }
 
   static final _id_getFormatName = jni.Jni.accessors.getMethodIDOf(
-      _class.reference, r"getFormatName", r"()Ljava/lang/String;");
+      _class.reference.pointer, r"getFormatName", r"()Ljava/lang/String;");
 
   /// from: public java.lang.String getFormatName()
   /// The returned object must be released after use, by calling the [release] method.
@@ -574,11 +600,13 @@
   ///@return Name of the format handled by parsers, generators this factory creates
   jni.JString getFormatName() {
     return const jni.JStringType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_getFormatName, jni.JniCallType.objectType, []).object);
+        reference.pointer,
+        _id_getFormatName,
+        jni.JniCallType.objectType, []).object);
   }
 
   static final _id_hasFormat = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"hasFormat",
       r"(Lcom/fasterxml/jackson/core/format/InputAccessor;)Lcom/fasterxml/jackson/core/format/MatchStrength;");
 
@@ -588,14 +616,14 @@
     jni.JObject acc,
   ) {
     return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_hasFormat,
         jni.JniCallType.objectType,
-        [acc.reference]).object);
+        [acc.reference.pointer]).object);
   }
 
   static final _id_requiresCustomCodec = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"requiresCustomCodec", r"()Z");
+      .getMethodIDOf(_class.reference.pointer, r"requiresCustomCodec", r"()Z");
 
   /// from: public boolean requiresCustomCodec()
   ///
@@ -609,12 +637,12 @@
   ///   ObjectCodec is enough
   ///@since 2.1
   bool requiresCustomCodec() {
-    return jni.Jni.accessors.callMethodWithArgs(reference,
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
         _id_requiresCustomCodec, jni.JniCallType.booleanType, []).boolean;
   }
 
   static final _id_hasJSONFormat = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"hasJSONFormat",
       r"(Lcom/fasterxml/jackson/core/format/InputAccessor;)Lcom/fasterxml/jackson/core/format/MatchStrength;");
 
@@ -624,24 +652,26 @@
     jni.JObject acc,
   ) {
     return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_hasJSONFormat,
         jni.JniCallType.objectType,
-        [acc.reference]).object);
+        [acc.reference.pointer]).object);
   }
 
   static final _id_version = jni.Jni.accessors.getMethodIDOf(
-      _class.reference, r"version", r"()Lcom/fasterxml/jackson/core/Version;");
+      _class.reference.pointer,
+      r"version",
+      r"()Lcom/fasterxml/jackson/core/Version;");
 
   /// from: public com.fasterxml.jackson.core.Version version()
   /// The returned object must be released after use, by calling the [release] method.
   jni.JObject version() {
     return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_version, jni.JniCallType.objectType, []).object);
+        reference.pointer, _id_version, jni.JniCallType.objectType, []).object);
   }
 
   static final _id_configure = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"configure",
       r"(Lcom/fasterxml/jackson/core/JsonFactory$Feature;Z)Lcom/fasterxml/jackson/core/JsonFactory;");
 
@@ -659,12 +689,15 @@
     bool state,
   ) {
     return const $JsonFactoryType().fromRef(jni.Jni.accessors
-        .callMethodWithArgs(reference, _id_configure,
-            jni.JniCallType.objectType, [f.reference, state ? 1 : 0]).object);
+        .callMethodWithArgs(
+            reference.pointer,
+            _id_configure,
+            jni.JniCallType.objectType,
+            [f.reference.pointer, state ? 1 : 0]).object);
   }
 
   static final _id_enable = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"enable",
       r"(Lcom/fasterxml/jackson/core/JsonFactory$Feature;)Lcom/fasterxml/jackson/core/JsonFactory;");
 
@@ -680,12 +713,12 @@
     JsonFactory_Feature f,
   ) {
     return const $JsonFactoryType().fromRef(jni.Jni.accessors
-        .callMethodWithArgs(reference, _id_enable, jni.JniCallType.objectType,
-            [f.reference]).object);
+        .callMethodWithArgs(reference.pointer, _id_enable,
+            jni.JniCallType.objectType, [f.reference.pointer]).object);
   }
 
   static final _id_disable = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"disable",
       r"(Lcom/fasterxml/jackson/core/JsonFactory$Feature;)Lcom/fasterxml/jackson/core/JsonFactory;");
 
@@ -701,12 +734,14 @@
     JsonFactory_Feature f,
   ) {
     return const $JsonFactoryType().fromRef(jni.Jni.accessors
-        .callMethodWithArgs(reference, _id_disable, jni.JniCallType.objectType,
-            [f.reference]).object);
+        .callMethodWithArgs(reference.pointer, _id_disable,
+            jni.JniCallType.objectType, [f.reference.pointer]).object);
   }
 
-  static final _id_isEnabled = jni.Jni.accessors.getMethodIDOf(_class.reference,
-      r"isEnabled", r"(Lcom/fasterxml/jackson/core/JsonFactory$Feature;)Z");
+  static final _id_isEnabled = jni.Jni.accessors.getMethodIDOf(
+      _class.reference.pointer,
+      r"isEnabled",
+      r"(Lcom/fasterxml/jackson/core/JsonFactory$Feature;)Z");
 
   /// from: public final boolean isEnabled(com.fasterxml.jackson.core.JsonFactory.Feature f)
   ///
@@ -716,48 +751,51 @@
   bool isEnabled(
     JsonFactory_Feature f,
   ) {
-    return jni.Jni.accessors.callMethodWithArgs(reference, _id_isEnabled,
-        jni.JniCallType.booleanType, [f.reference]).boolean;
+    return jni.Jni.accessors.callMethodWithArgs(
+        reference.pointer,
+        _id_isEnabled,
+        jni.JniCallType.booleanType,
+        [f.reference.pointer]).boolean;
   }
 
   static final _id_getParserFeatures = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"getParserFeatures", r"()I");
+      .getMethodIDOf(_class.reference.pointer, r"getParserFeatures", r"()I");
 
   /// from: public final int getParserFeatures()
   int getParserFeatures() {
-    return jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_getParserFeatures, jni.JniCallType.intType, []).integer;
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
+        _id_getParserFeatures, jni.JniCallType.intType, []).integer;
   }
 
   static final _id_getGeneratorFeatures = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"getGeneratorFeatures", r"()I");
+      .getMethodIDOf(_class.reference.pointer, r"getGeneratorFeatures", r"()I");
 
   /// from: public final int getGeneratorFeatures()
   int getGeneratorFeatures() {
-    return jni.Jni.accessors.callMethodWithArgs(reference,
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
         _id_getGeneratorFeatures, jni.JniCallType.intType, []).integer;
   }
 
-  static final _id_getFormatParserFeatures = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"getFormatParserFeatures", r"()I");
+  static final _id_getFormatParserFeatures = jni.Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"getFormatParserFeatures", r"()I");
 
   /// from: public int getFormatParserFeatures()
   int getFormatParserFeatures() {
-    return jni.Jni.accessors.callMethodWithArgs(reference,
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
         _id_getFormatParserFeatures, jni.JniCallType.intType, []).integer;
   }
 
-  static final _id_getFormatGeneratorFeatures = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"getFormatGeneratorFeatures", r"()I");
+  static final _id_getFormatGeneratorFeatures = jni.Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"getFormatGeneratorFeatures", r"()I");
 
   /// from: public int getFormatGeneratorFeatures()
   int getFormatGeneratorFeatures() {
-    return jni.Jni.accessors.callMethodWithArgs(reference,
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
         _id_getFormatGeneratorFeatures, jni.JniCallType.intType, []).integer;
   }
 
   static final _id_configure1 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"configure",
       r"(Lcom/fasterxml/jackson/core/JsonParser$Feature;Z)Lcom/fasterxml/jackson/core/JsonFactory;");
 
@@ -774,12 +812,15 @@
     bool state,
   ) {
     return const $JsonFactoryType().fromRef(jni.Jni.accessors
-        .callMethodWithArgs(reference, _id_configure1,
-            jni.JniCallType.objectType, [f.reference, state ? 1 : 0]).object);
+        .callMethodWithArgs(
+            reference.pointer,
+            _id_configure1,
+            jni.JniCallType.objectType,
+            [f.reference.pointer, state ? 1 : 0]).object);
   }
 
   static final _id_enable1 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"enable",
       r"(Lcom/fasterxml/jackson/core/JsonParser$Feature;)Lcom/fasterxml/jackson/core/JsonFactory;");
 
@@ -794,12 +835,12 @@
     jsonparser_.JsonParser_Feature f,
   ) {
     return const $JsonFactoryType().fromRef(jni.Jni.accessors
-        .callMethodWithArgs(reference, _id_enable1, jni.JniCallType.objectType,
-            [f.reference]).object);
+        .callMethodWithArgs(reference.pointer, _id_enable1,
+            jni.JniCallType.objectType, [f.reference.pointer]).object);
   }
 
   static final _id_disable1 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"disable",
       r"(Lcom/fasterxml/jackson/core/JsonParser$Feature;)Lcom/fasterxml/jackson/core/JsonFactory;");
 
@@ -814,12 +855,12 @@
     jsonparser_.JsonParser_Feature f,
   ) {
     return const $JsonFactoryType().fromRef(jni.Jni.accessors
-        .callMethodWithArgs(reference, _id_disable1, jni.JniCallType.objectType,
-            [f.reference]).object);
+        .callMethodWithArgs(reference.pointer, _id_disable1,
+            jni.JniCallType.objectType, [f.reference.pointer]).object);
   }
 
   static final _id_isEnabled1 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"isEnabled",
       r"(Lcom/fasterxml/jackson/core/JsonParser$Feature;)Z");
 
@@ -831,12 +872,15 @@
   bool isEnabled1(
     jsonparser_.JsonParser_Feature f,
   ) {
-    return jni.Jni.accessors.callMethodWithArgs(reference, _id_isEnabled1,
-        jni.JniCallType.booleanType, [f.reference]).boolean;
+    return jni.Jni.accessors.callMethodWithArgs(
+        reference.pointer,
+        _id_isEnabled1,
+        jni.JniCallType.booleanType,
+        [f.reference.pointer]).boolean;
   }
 
   static final _id_isEnabled2 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"isEnabled",
       r"(Lcom/fasterxml/jackson/core/StreamReadFeature;)Z");
 
@@ -849,12 +893,15 @@
   bool isEnabled2(
     jni.JObject f,
   ) {
-    return jni.Jni.accessors.callMethodWithArgs(reference, _id_isEnabled2,
-        jni.JniCallType.booleanType, [f.reference]).boolean;
+    return jni.Jni.accessors.callMethodWithArgs(
+        reference.pointer,
+        _id_isEnabled2,
+        jni.JniCallType.booleanType,
+        [f.reference.pointer]).boolean;
   }
 
   static final _id_getInputDecorator = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"getInputDecorator",
       r"()Lcom/fasterxml/jackson/core/io/InputDecorator;");
 
@@ -866,13 +913,13 @@
   ///@return InputDecorator configured, if any
   jni.JObject getInputDecorator() {
     return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_getInputDecorator,
         jni.JniCallType.objectType, []).object);
   }
 
   static final _id_setInputDecorator = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"setInputDecorator",
       r"(Lcom/fasterxml/jackson/core/io/InputDecorator;)Lcom/fasterxml/jackson/core/JsonFactory;");
 
@@ -887,12 +934,12 @@
     jni.JObject d,
   ) {
     return const $JsonFactoryType().fromRef(jni.Jni.accessors
-        .callMethodWithArgs(reference, _id_setInputDecorator,
-            jni.JniCallType.objectType, [d.reference]).object);
+        .callMethodWithArgs(reference.pointer, _id_setInputDecorator,
+            jni.JniCallType.objectType, [d.reference.pointer]).object);
   }
 
   static final _id_configure2 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"configure",
       r"(Lcom/fasterxml/jackson/core/JsonGenerator$Feature;Z)Lcom/fasterxml/jackson/core/JsonFactory;");
 
@@ -909,12 +956,15 @@
     bool state,
   ) {
     return const $JsonFactoryType().fromRef(jni.Jni.accessors
-        .callMethodWithArgs(reference, _id_configure2,
-            jni.JniCallType.objectType, [f.reference, state ? 1 : 0]).object);
+        .callMethodWithArgs(
+            reference.pointer,
+            _id_configure2,
+            jni.JniCallType.objectType,
+            [f.reference.pointer, state ? 1 : 0]).object);
   }
 
   static final _id_enable2 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"enable",
       r"(Lcom/fasterxml/jackson/core/JsonGenerator$Feature;)Lcom/fasterxml/jackson/core/JsonFactory;");
 
@@ -929,12 +979,12 @@
     jni.JObject f,
   ) {
     return const $JsonFactoryType().fromRef(jni.Jni.accessors
-        .callMethodWithArgs(reference, _id_enable2, jni.JniCallType.objectType,
-            [f.reference]).object);
+        .callMethodWithArgs(reference.pointer, _id_enable2,
+            jni.JniCallType.objectType, [f.reference.pointer]).object);
   }
 
   static final _id_disable2 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"disable",
       r"(Lcom/fasterxml/jackson/core/JsonGenerator$Feature;)Lcom/fasterxml/jackson/core/JsonFactory;");
 
@@ -949,12 +999,12 @@
     jni.JObject f,
   ) {
     return const $JsonFactoryType().fromRef(jni.Jni.accessors
-        .callMethodWithArgs(reference, _id_disable2, jni.JniCallType.objectType,
-            [f.reference]).object);
+        .callMethodWithArgs(reference.pointer, _id_disable2,
+            jni.JniCallType.objectType, [f.reference.pointer]).object);
   }
 
   static final _id_isEnabled3 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"isEnabled",
       r"(Lcom/fasterxml/jackson/core/JsonGenerator$Feature;)Z");
 
@@ -966,12 +1016,15 @@
   bool isEnabled3(
     jni.JObject f,
   ) {
-    return jni.Jni.accessors.callMethodWithArgs(reference, _id_isEnabled3,
-        jni.JniCallType.booleanType, [f.reference]).boolean;
+    return jni.Jni.accessors.callMethodWithArgs(
+        reference.pointer,
+        _id_isEnabled3,
+        jni.JniCallType.booleanType,
+        [f.reference.pointer]).boolean;
   }
 
   static final _id_isEnabled4 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"isEnabled",
       r"(Lcom/fasterxml/jackson/core/StreamWriteFeature;)Z");
 
@@ -984,12 +1037,15 @@
   bool isEnabled4(
     jni.JObject f,
   ) {
-    return jni.Jni.accessors.callMethodWithArgs(reference, _id_isEnabled4,
-        jni.JniCallType.booleanType, [f.reference]).boolean;
+    return jni.Jni.accessors.callMethodWithArgs(
+        reference.pointer,
+        _id_isEnabled4,
+        jni.JniCallType.booleanType,
+        [f.reference.pointer]).boolean;
   }
 
   static final _id_getCharacterEscapes = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"getCharacterEscapes",
       r"()Lcom/fasterxml/jackson/core/io/CharacterEscapes;");
 
@@ -1001,13 +1057,13 @@
   ///@return Configured {@code CharacterEscapes}, if any; {@code null} if none
   jni.JObject getCharacterEscapes() {
     return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_getCharacterEscapes,
         jni.JniCallType.objectType, []).object);
   }
 
   static final _id_setCharacterEscapes = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"setCharacterEscapes",
       r"(Lcom/fasterxml/jackson/core/io/CharacterEscapes;)Lcom/fasterxml/jackson/core/JsonFactory;");
 
@@ -1022,12 +1078,12 @@
     jni.JObject esc,
   ) {
     return const $JsonFactoryType().fromRef(jni.Jni.accessors
-        .callMethodWithArgs(reference, _id_setCharacterEscapes,
-            jni.JniCallType.objectType, [esc.reference]).object);
+        .callMethodWithArgs(reference.pointer, _id_setCharacterEscapes,
+            jni.JniCallType.objectType, [esc.reference.pointer]).object);
   }
 
   static final _id_getOutputDecorator = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"getOutputDecorator",
       r"()Lcom/fasterxml/jackson/core/io/OutputDecorator;");
 
@@ -1040,13 +1096,13 @@
   ///    {@code null} if none.
   jni.JObject getOutputDecorator() {
     return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_getOutputDecorator,
         jni.JniCallType.objectType, []).object);
   }
 
   static final _id_setOutputDecorator = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"setOutputDecorator",
       r"(Lcom/fasterxml/jackson/core/io/OutputDecorator;)Lcom/fasterxml/jackson/core/JsonFactory;");
 
@@ -1061,12 +1117,12 @@
     jni.JObject d,
   ) {
     return const $JsonFactoryType().fromRef(jni.Jni.accessors
-        .callMethodWithArgs(reference, _id_setOutputDecorator,
-            jni.JniCallType.objectType, [d.reference]).object);
+        .callMethodWithArgs(reference.pointer, _id_setOutputDecorator,
+            jni.JniCallType.objectType, [d.reference.pointer]).object);
   }
 
   static final _id_setRootValueSeparator = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"setRootValueSeparator",
       r"(Ljava/lang/String;)Lcom/fasterxml/jackson/core/JsonFactory;");
 
@@ -1082,12 +1138,14 @@
     jni.JString sep,
   ) {
     return const $JsonFactoryType().fromRef(jni.Jni.accessors
-        .callMethodWithArgs(reference, _id_setRootValueSeparator,
-            jni.JniCallType.objectType, [sep.reference]).object);
+        .callMethodWithArgs(reference.pointer, _id_setRootValueSeparator,
+            jni.JniCallType.objectType, [sep.reference.pointer]).object);
   }
 
   static final _id_getRootValueSeparator = jni.Jni.accessors.getMethodIDOf(
-      _class.reference, r"getRootValueSeparator", r"()Ljava/lang/String;");
+      _class.reference.pointer,
+      r"getRootValueSeparator",
+      r"()Ljava/lang/String;");
 
   /// from: public java.lang.String getRootValueSeparator()
   /// The returned object must be released after use, by calling the [release] method.
@@ -1095,13 +1153,13 @@
   /// @return Root value separator configured, if any
   jni.JString getRootValueSeparator() {
     return const jni.JStringType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_getRootValueSeparator,
         jni.JniCallType.objectType, []).object);
   }
 
   static final _id_setCodec = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"setCodec",
       r"(Lcom/fasterxml/jackson/core/ObjectCodec;)Lcom/fasterxml/jackson/core/JsonFactory;");
 
@@ -1119,22 +1177,26 @@
     jni.JObject oc,
   ) {
     return const $JsonFactoryType().fromRef(jni.Jni.accessors
-        .callMethodWithArgs(reference, _id_setCodec, jni.JniCallType.objectType,
-            [oc.reference]).object);
+        .callMethodWithArgs(reference.pointer, _id_setCodec,
+            jni.JniCallType.objectType, [oc.reference.pointer]).object);
   }
 
-  static final _id_getCodec = jni.Jni.accessors.getMethodIDOf(_class.reference,
-      r"getCodec", r"()Lcom/fasterxml/jackson/core/ObjectCodec;");
+  static final _id_getCodec = jni.Jni.accessors.getMethodIDOf(
+      _class.reference.pointer,
+      r"getCodec",
+      r"()Lcom/fasterxml/jackson/core/ObjectCodec;");
 
   /// from: public com.fasterxml.jackson.core.ObjectCodec getCodec()
   /// The returned object must be released after use, by calling the [release] method.
   jni.JObject getCodec() {
     return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_getCodec, jni.JniCallType.objectType, []).object);
+        reference.pointer,
+        _id_getCodec,
+        jni.JniCallType.objectType, []).object);
   }
 
   static final _id_createParser = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"createParser",
       r"(Ljava/io/File;)Lcom/fasterxml/jackson/core/JsonParser;");
 
@@ -1161,12 +1223,12 @@
     jni.JObject f,
   ) {
     return const jsonparser_.$JsonParserType().fromRef(jni.Jni.accessors
-        .callMethodWithArgs(reference, _id_createParser,
-            jni.JniCallType.objectType, [f.reference]).object);
+        .callMethodWithArgs(reference.pointer, _id_createParser,
+            jni.JniCallType.objectType, [f.reference.pointer]).object);
   }
 
   static final _id_createParser1 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"createParser",
       r"(Ljava/net/URL;)Lcom/fasterxml/jackson/core/JsonParser;");
 
@@ -1191,12 +1253,12 @@
     jni.JObject url,
   ) {
     return const jsonparser_.$JsonParserType().fromRef(jni.Jni.accessors
-        .callMethodWithArgs(reference, _id_createParser1,
-            jni.JniCallType.objectType, [url.reference]).object);
+        .callMethodWithArgs(reference.pointer, _id_createParser1,
+            jni.JniCallType.objectType, [url.reference.pointer]).object);
   }
 
   static final _id_createParser2 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"createParser",
       r"(Ljava/io/InputStream;)Lcom/fasterxml/jackson/core/JsonParser;");
 
@@ -1224,12 +1286,12 @@
     jni.JObject in0,
   ) {
     return const jsonparser_.$JsonParserType().fromRef(jni.Jni.accessors
-        .callMethodWithArgs(reference, _id_createParser2,
-            jni.JniCallType.objectType, [in0.reference]).object);
+        .callMethodWithArgs(reference.pointer, _id_createParser2,
+            jni.JniCallType.objectType, [in0.reference.pointer]).object);
   }
 
   static final _id_createParser3 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"createParser",
       r"(Ljava/io/Reader;)Lcom/fasterxml/jackson/core/JsonParser;");
 
@@ -1250,12 +1312,12 @@
     jni.JObject r,
   ) {
     return const jsonparser_.$JsonParserType().fromRef(jni.Jni.accessors
-        .callMethodWithArgs(reference, _id_createParser3,
-            jni.JniCallType.objectType, [r.reference]).object);
+        .callMethodWithArgs(reference.pointer, _id_createParser3,
+            jni.JniCallType.objectType, [r.reference.pointer]).object);
   }
 
   static final _id_createParser4 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"createParser",
       r"([B)Lcom/fasterxml/jackson/core/JsonParser;");
 
@@ -1269,12 +1331,12 @@
     jni.JArray<jni.jbyte> data,
   ) {
     return const jsonparser_.$JsonParserType().fromRef(jni.Jni.accessors
-        .callMethodWithArgs(reference, _id_createParser4,
-            jni.JniCallType.objectType, [data.reference]).object);
+        .callMethodWithArgs(reference.pointer, _id_createParser4,
+            jni.JniCallType.objectType, [data.reference.pointer]).object);
   }
 
   static final _id_createParser5 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"createParser",
       r"([BII)Lcom/fasterxml/jackson/core/JsonParser;");
 
@@ -1294,15 +1356,15 @@
   ) {
     return const jsonparser_.$JsonParserType().fromRef(jni.Jni.accessors
         .callMethodWithArgs(
-            reference, _id_createParser5, jni.JniCallType.objectType, [
-      data.reference,
+            reference.pointer, _id_createParser5, jni.JniCallType.objectType, [
+      data.reference.pointer,
       jni.JValueInt(offset),
       jni.JValueInt(len)
     ]).object);
   }
 
   static final _id_createParser6 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"createParser",
       r"(Ljava/lang/String;)Lcom/fasterxml/jackson/core/JsonParser;");
 
@@ -1316,12 +1378,12 @@
     jni.JString content,
   ) {
     return const jsonparser_.$JsonParserType().fromRef(jni.Jni.accessors
-        .callMethodWithArgs(reference, _id_createParser6,
-            jni.JniCallType.objectType, [content.reference]).object);
+        .callMethodWithArgs(reference.pointer, _id_createParser6,
+            jni.JniCallType.objectType, [content.reference.pointer]).object);
   }
 
   static final _id_createParser7 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"createParser",
       r"([C)Lcom/fasterxml/jackson/core/JsonParser;");
 
@@ -1335,12 +1397,12 @@
     jni.JArray<jni.jchar> content,
   ) {
     return const jsonparser_.$JsonParserType().fromRef(jni.Jni.accessors
-        .callMethodWithArgs(reference, _id_createParser7,
-            jni.JniCallType.objectType, [content.reference]).object);
+        .callMethodWithArgs(reference.pointer, _id_createParser7,
+            jni.JniCallType.objectType, [content.reference.pointer]).object);
   }
 
   static final _id_createParser8 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"createParser",
       r"([CII)Lcom/fasterxml/jackson/core/JsonParser;");
 
@@ -1356,15 +1418,15 @@
   ) {
     return const jsonparser_.$JsonParserType().fromRef(jni.Jni.accessors
         .callMethodWithArgs(
-            reference, _id_createParser8, jni.JniCallType.objectType, [
-      content.reference,
+            reference.pointer, _id_createParser8, jni.JniCallType.objectType, [
+      content.reference.pointer,
       jni.JValueInt(offset),
       jni.JValueInt(len)
     ]).object);
   }
 
   static final _id_createParser9 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"createParser",
       r"(Ljava/io/DataInput;)Lcom/fasterxml/jackson/core/JsonParser;");
 
@@ -1381,12 +1443,14 @@
     jni.JObject in0,
   ) {
     return const jsonparser_.$JsonParserType().fromRef(jni.Jni.accessors
-        .callMethodWithArgs(reference, _id_createParser9,
-            jni.JniCallType.objectType, [in0.reference]).object);
+        .callMethodWithArgs(reference.pointer, _id_createParser9,
+            jni.JniCallType.objectType, [in0.reference.pointer]).object);
   }
 
   static final _id_createNonBlockingByteArrayParser = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"createNonBlockingByteArrayParser",
+      .getMethodIDOf(
+          _class.reference.pointer,
+          r"createNonBlockingByteArrayParser",
           r"()Lcom/fasterxml/jackson/core/JsonParser;");
 
   /// from: public com.fasterxml.jackson.core.JsonParser createNonBlockingByteArrayParser()
@@ -1407,12 +1471,14 @@
   ///@since 2.9
   jsonparser_.JsonParser createNonBlockingByteArrayParser() {
     return const jsonparser_.$JsonParserType().fromRef(jni.Jni.accessors
-        .callMethodWithArgs(reference, _id_createNonBlockingByteArrayParser,
+        .callMethodWithArgs(
+            reference.pointer,
+            _id_createNonBlockingByteArrayParser,
             jni.JniCallType.objectType, []).object);
   }
 
   static final _id_createGenerator = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"createGenerator",
       r"(Ljava/io/OutputStream;Lcom/fasterxml/jackson/core/JsonEncoding;)Lcom/fasterxml/jackson/core/JsonGenerator;");
 
@@ -1442,14 +1508,14 @@
     jni.JObject enc,
   ) {
     return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_createGenerator,
         jni.JniCallType.objectType,
-        [out.reference, enc.reference]).object);
+        [out.reference.pointer, enc.reference.pointer]).object);
   }
 
   static final _id_createGenerator1 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"createGenerator",
       r"(Ljava/io/OutputStream;)Lcom/fasterxml/jackson/core/JsonGenerator;");
 
@@ -1465,14 +1531,14 @@
     jni.JObject out,
   ) {
     return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_createGenerator1,
         jni.JniCallType.objectType,
-        [out.reference]).object);
+        [out.reference.pointer]).object);
   }
 
   static final _id_createGenerator2 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"createGenerator",
       r"(Ljava/io/Writer;)Lcom/fasterxml/jackson/core/JsonGenerator;");
 
@@ -1494,14 +1560,14 @@
     jni.JObject w,
   ) {
     return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_createGenerator2,
         jni.JniCallType.objectType,
-        [w.reference]).object);
+        [w.reference.pointer]).object);
   }
 
   static final _id_createGenerator3 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"createGenerator",
       r"(Ljava/io/File;Lcom/fasterxml/jackson/core/JsonEncoding;)Lcom/fasterxml/jackson/core/JsonGenerator;");
 
@@ -1525,14 +1591,14 @@
     jni.JObject enc,
   ) {
     return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_createGenerator3,
         jni.JniCallType.objectType,
-        [f.reference, enc.reference]).object);
+        [f.reference.pointer, enc.reference.pointer]).object);
   }
 
   static final _id_createGenerator4 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"createGenerator",
       r"(Ljava/io/DataOutput;Lcom/fasterxml/jackson/core/JsonEncoding;)Lcom/fasterxml/jackson/core/JsonGenerator;");
 
@@ -1547,14 +1613,14 @@
     jni.JObject enc,
   ) {
     return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_createGenerator4,
         jni.JniCallType.objectType,
-        [out.reference, enc.reference]).object);
+        [out.reference.pointer, enc.reference.pointer]).object);
   }
 
   static final _id_createGenerator5 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"createGenerator",
       r"(Ljava/io/DataOutput;)Lcom/fasterxml/jackson/core/JsonGenerator;");
 
@@ -1570,14 +1636,14 @@
     jni.JObject out,
   ) {
     return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_createGenerator5,
         jni.JniCallType.objectType,
-        [out.reference]).object);
+        [out.reference.pointer]).object);
   }
 
   static final _id_createJsonParser = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"createJsonParser",
       r"(Ljava/io/File;)Lcom/fasterxml/jackson/core/JsonParser;");
 
@@ -1606,12 +1672,12 @@
     jni.JObject f,
   ) {
     return const jsonparser_.$JsonParserType().fromRef(jni.Jni.accessors
-        .callMethodWithArgs(reference, _id_createJsonParser,
-            jni.JniCallType.objectType, [f.reference]).object);
+        .callMethodWithArgs(reference.pointer, _id_createJsonParser,
+            jni.JniCallType.objectType, [f.reference.pointer]).object);
   }
 
   static final _id_createJsonParser1 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"createJsonParser",
       r"(Ljava/net/URL;)Lcom/fasterxml/jackson/core/JsonParser;");
 
@@ -1639,12 +1705,12 @@
     jni.JObject url,
   ) {
     return const jsonparser_.$JsonParserType().fromRef(jni.Jni.accessors
-        .callMethodWithArgs(reference, _id_createJsonParser1,
-            jni.JniCallType.objectType, [url.reference]).object);
+        .callMethodWithArgs(reference.pointer, _id_createJsonParser1,
+            jni.JniCallType.objectType, [url.reference.pointer]).object);
   }
 
   static final _id_createJsonParser2 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"createJsonParser",
       r"(Ljava/io/InputStream;)Lcom/fasterxml/jackson/core/JsonParser;");
 
@@ -1675,12 +1741,12 @@
     jni.JObject in0,
   ) {
     return const jsonparser_.$JsonParserType().fromRef(jni.Jni.accessors
-        .callMethodWithArgs(reference, _id_createJsonParser2,
-            jni.JniCallType.objectType, [in0.reference]).object);
+        .callMethodWithArgs(reference.pointer, _id_createJsonParser2,
+            jni.JniCallType.objectType, [in0.reference.pointer]).object);
   }
 
   static final _id_createJsonParser3 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"createJsonParser",
       r"(Ljava/io/Reader;)Lcom/fasterxml/jackson/core/JsonParser;");
 
@@ -1704,12 +1770,12 @@
     jni.JObject r,
   ) {
     return const jsonparser_.$JsonParserType().fromRef(jni.Jni.accessors
-        .callMethodWithArgs(reference, _id_createJsonParser3,
-            jni.JniCallType.objectType, [r.reference]).object);
+        .callMethodWithArgs(reference.pointer, _id_createJsonParser3,
+            jni.JniCallType.objectType, [r.reference.pointer]).object);
   }
 
   static final _id_createJsonParser4 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"createJsonParser",
       r"([B)Lcom/fasterxml/jackson/core/JsonParser;");
 
@@ -1726,12 +1792,12 @@
     jni.JArray<jni.jbyte> data,
   ) {
     return const jsonparser_.$JsonParserType().fromRef(jni.Jni.accessors
-        .callMethodWithArgs(reference, _id_createJsonParser4,
-            jni.JniCallType.objectType, [data.reference]).object);
+        .callMethodWithArgs(reference.pointer, _id_createJsonParser4,
+            jni.JniCallType.objectType, [data.reference.pointer]).object);
   }
 
   static final _id_createJsonParser5 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"createJsonParser",
       r"([BII)Lcom/fasterxml/jackson/core/JsonParser;");
 
@@ -1753,16 +1819,16 @@
     int len,
   ) {
     return const jsonparser_.$JsonParserType().fromRef(jni.Jni.accessors
-        .callMethodWithArgs(
-            reference, _id_createJsonParser5, jni.JniCallType.objectType, [
-      data.reference,
+        .callMethodWithArgs(reference.pointer, _id_createJsonParser5,
+            jni.JniCallType.objectType, [
+      data.reference.pointer,
       jni.JValueInt(offset),
       jni.JValueInt(len)
     ]).object);
   }
 
   static final _id_createJsonParser6 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"createJsonParser",
       r"(Ljava/lang/String;)Lcom/fasterxml/jackson/core/JsonParser;");
 
@@ -1780,12 +1846,12 @@
     jni.JString content,
   ) {
     return const jsonparser_.$JsonParserType().fromRef(jni.Jni.accessors
-        .callMethodWithArgs(reference, _id_createJsonParser6,
-            jni.JniCallType.objectType, [content.reference]).object);
+        .callMethodWithArgs(reference.pointer, _id_createJsonParser6,
+            jni.JniCallType.objectType, [content.reference.pointer]).object);
   }
 
   static final _id_createJsonGenerator = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"createJsonGenerator",
       r"(Ljava/io/OutputStream;Lcom/fasterxml/jackson/core/JsonEncoding;)Lcom/fasterxml/jackson/core/JsonGenerator;");
 
@@ -1817,14 +1883,14 @@
     jni.JObject enc,
   ) {
     return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_createJsonGenerator,
         jni.JniCallType.objectType,
-        [out.reference, enc.reference]).object);
+        [out.reference.pointer, enc.reference.pointer]).object);
   }
 
   static final _id_createJsonGenerator1 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"createJsonGenerator",
       r"(Ljava/io/Writer;)Lcom/fasterxml/jackson/core/JsonGenerator;");
 
@@ -1848,14 +1914,14 @@
     jni.JObject out,
   ) {
     return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_createJsonGenerator1,
         jni.JniCallType.objectType,
-        [out.reference]).object);
+        [out.reference.pointer]).object);
   }
 
   static final _id_createJsonGenerator2 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"createJsonGenerator",
       r"(Ljava/io/OutputStream;)Lcom/fasterxml/jackson/core/JsonGenerator;");
 
@@ -1874,10 +1940,10 @@
     jni.JObject out,
   ) {
     return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_createJsonGenerator2,
         jni.JniCallType.objectType,
-        [out.reference]).object);
+        [out.reference.pointer]).object);
   }
 }
 
diff --git a/pkgs/jnigen/test/jackson_core_test/third_party/dart_only/dart_bindings/com/fasterxml/jackson/core/JsonParser.dart b/pkgs/jnigen/test/jackson_core_test/third_party/dart_only/dart_bindings/com/fasterxml/jackson/core/JsonParser.dart
index ae8f7aa..c17de90 100644
--- a/pkgs/jnigen/test/jackson_core_test/third_party/dart_only/dart_bindings/com/fasterxml/jackson/core/JsonParser.dart
+++ b/pkgs/jnigen/test/jackson_core_test/third_party/dart_only/dart_bindings/com/fasterxml/jackson/core/JsonParser.dart
@@ -58,7 +58,7 @@
   /// The type which includes information such as the signature of this class.
   static const type = $JsonParser_FeatureType();
   static final _id_values = jni.Jni.accessors.getStaticMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"values",
       r"()[Lcom/fasterxml/jackson/core/JsonParser$Feature;");
 
@@ -66,12 +66,12 @@
   /// The returned object must be released after use, by calling the [release] method.
   static jni.JArray<JsonParser_Feature> values() {
     return const jni.JArrayType($JsonParser_FeatureType()).fromRef(
-        jni.Jni.accessors.callStaticMethodWithArgs(_class.reference, _id_values,
-            jni.JniCallType.objectType, []).object);
+        jni.Jni.accessors.callStaticMethodWithArgs(_class.reference.pointer,
+            _id_values, jni.JniCallType.objectType, []).object);
   }
 
   static final _id_valueOf = jni.Jni.accessors.getStaticMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"valueOf",
       r"(Ljava/lang/String;)Lcom/fasterxml/jackson/core/JsonParser$Feature;");
 
@@ -81,12 +81,12 @@
     jni.JString name,
   ) {
     return const $JsonParser_FeatureType().fromRef(jni.Jni.accessors
-        .callStaticMethodWithArgs(_class.reference, _id_valueOf,
-            jni.JniCallType.objectType, [name.reference]).object);
+        .callStaticMethodWithArgs(_class.reference.pointer, _id_valueOf,
+            jni.JniCallType.objectType, [name.reference.pointer]).object);
   }
 
-  static final _id_collectDefaults = jni.Jni.accessors
-      .getStaticMethodIDOf(_class.reference, r"collectDefaults", r"()I");
+  static final _id_collectDefaults = jni.Jni.accessors.getStaticMethodIDOf(
+      _class.reference.pointer, r"collectDefaults", r"()I");
 
   /// from: static public int collectDefaults()
   ///
@@ -94,37 +94,40 @@
   /// are enabled by default.
   ///@return Bit mask of all features that are enabled by default
   static int collectDefaults() {
-    return jni.Jni.accessors.callStaticMethodWithArgs(_class.reference,
+    return jni.Jni.accessors.callStaticMethodWithArgs(_class.reference.pointer,
         _id_collectDefaults, jni.JniCallType.intType, []).integer;
   }
 
   static final _id_enabledByDefault = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"enabledByDefault", r"()Z");
+      .getMethodIDOf(_class.reference.pointer, r"enabledByDefault", r"()Z");
 
   /// from: public boolean enabledByDefault()
   bool enabledByDefault() {
-    return jni.Jni.accessors.callMethodWithArgs(reference, _id_enabledByDefault,
-        jni.JniCallType.booleanType, []).boolean;
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
+        _id_enabledByDefault, jni.JniCallType.booleanType, []).boolean;
   }
 
-  static final _id_enabledIn =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"enabledIn", r"(I)Z");
+  static final _id_enabledIn = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"enabledIn", r"(I)Z");
 
   /// from: public boolean enabledIn(int flags)
   bool enabledIn(
     int flags,
   ) {
-    return jni.Jni.accessors.callMethodWithArgs(reference, _id_enabledIn,
-        jni.JniCallType.booleanType, [jni.JValueInt(flags)]).boolean;
+    return jni.Jni.accessors.callMethodWithArgs(
+        reference.pointer,
+        _id_enabledIn,
+        jni.JniCallType.booleanType,
+        [jni.JValueInt(flags)]).boolean;
   }
 
-  static final _id_getMask =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"getMask", r"()I");
+  static final _id_getMask = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"getMask", r"()I");
 
   /// from: public int getMask()
   int getMask() {
     return jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_getMask, jni.JniCallType.intType, []).integer;
+        reference.pointer, _id_getMask, jni.JniCallType.intType, []).integer;
   }
 }
 
@@ -172,7 +175,7 @@
   /// The type which includes information such as the signature of this class.
   static const type = $JsonParser_NumberTypeType();
   static final _id_values = jni.Jni.accessors.getStaticMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"values",
       r"()[Lcom/fasterxml/jackson/core/JsonParser$NumberType;");
 
@@ -180,12 +183,12 @@
   /// The returned object must be released after use, by calling the [release] method.
   static jni.JArray<JsonParser_NumberType> values() {
     return const jni.JArrayType($JsonParser_NumberTypeType()).fromRef(
-        jni.Jni.accessors.callStaticMethodWithArgs(_class.reference, _id_values,
-            jni.JniCallType.objectType, []).object);
+        jni.Jni.accessors.callStaticMethodWithArgs(_class.reference.pointer,
+            _id_values, jni.JniCallType.objectType, []).object);
   }
 
   static final _id_valueOf = jni.Jni.accessors.getStaticMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"valueOf",
       r"(Ljava/lang/String;)Lcom/fasterxml/jackson/core/JsonParser$NumberType;");
 
@@ -195,8 +198,8 @@
     jni.JString name,
   ) {
     return const $JsonParser_NumberTypeType().fromRef(jni.Jni.accessors
-        .callStaticMethodWithArgs(_class.reference, _id_valueOf,
-            jni.JniCallType.objectType, [name.reference]).object);
+        .callStaticMethodWithArgs(_class.reference.pointer, _id_valueOf,
+            jni.JniCallType.objectType, [name.reference.pointer]).object);
   }
 }
 
@@ -248,7 +251,7 @@
   static const type = $JsonParserType();
   static final _id_DEFAULT_READ_CAPABILITIES =
       jni.Jni.accessors.getStaticFieldIDOf(
-    _class.reference,
+    _class.reference.pointer,
     r"DEFAULT_READ_CAPABILITIES",
     r"Lcom/fasterxml/jackson/core/util/JacksonFeatureSet;",
   );
@@ -262,22 +265,22 @@
   ///@since 2.12
   static jni.JObject get DEFAULT_READ_CAPABILITIES =>
       const jni.JObjectType().fromRef(jni.Jni.accessors
-          .getStaticField(_class.reference, _id_DEFAULT_READ_CAPABILITIES,
-              jni.JniCallType.objectType)
+          .getStaticField(_class.reference.pointer,
+              _id_DEFAULT_READ_CAPABILITIES, jni.JniCallType.objectType)
           .object);
 
-  static final _id_new0 =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"()V");
+  static final _id_new0 = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"<init>", r"()V");
 
   /// from: protected void <init>()
   /// The returned object must be released after use, by calling the [release] method.
   factory JsonParser() {
     return JsonParser.fromRef(jni.Jni.accessors
-        .newObjectWithArgs(_class.reference, _id_new0, []).object);
+        .newObjectWithArgs(_class.reference.pointer, _id_new0, []).object);
   }
 
-  static final _id_new1 =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"(I)V");
+  static final _id_new1 = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"<init>", r"(I)V");
 
   /// from: protected void <init>(int features)
   /// The returned object must be released after use, by calling the [release] method.
@@ -285,11 +288,13 @@
     int features,
   ) {
     return JsonParser.fromRef(jni.Jni.accessors.newObjectWithArgs(
-        _class.reference, _id_new1, [jni.JValueInt(features)]).object);
+        _class.reference.pointer, _id_new1, [jni.JValueInt(features)]).object);
   }
 
-  static final _id_getCodec = jni.Jni.accessors.getMethodIDOf(_class.reference,
-      r"getCodec", r"()Lcom/fasterxml/jackson/core/ObjectCodec;");
+  static final _id_getCodec = jni.Jni.accessors.getMethodIDOf(
+      _class.reference.pointer,
+      r"getCodec",
+      r"()Lcom/fasterxml/jackson/core/ObjectCodec;");
 
   /// from: public abstract com.fasterxml.jackson.core.ObjectCodec getCodec()
   /// The returned object must be released after use, by calling the [release] method.
@@ -300,11 +305,15 @@
   ///@return Codec assigned to this parser, if any; {@code null} if none
   jni.JObject getCodec() {
     return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_getCodec, jni.JniCallType.objectType, []).object);
+        reference.pointer,
+        _id_getCodec,
+        jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_setCodec = jni.Jni.accessors.getMethodIDOf(_class.reference,
-      r"setCodec", r"(Lcom/fasterxml/jackson/core/ObjectCodec;)V");
+  static final _id_setCodec = jni.Jni.accessors.getMethodIDOf(
+      _class.reference.pointer,
+      r"setCodec",
+      r"(Lcom/fasterxml/jackson/core/ObjectCodec;)V");
 
   /// from: public abstract void setCodec(com.fasterxml.jackson.core.ObjectCodec oc)
   ///
@@ -315,12 +324,12 @@
   void setCodec(
     jni.JObject oc,
   ) {
-    return jni.Jni.accessors.callMethodWithArgs(reference, _id_setCodec,
-        jni.JniCallType.voidType, [oc.reference]).check();
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer, _id_setCodec,
+        jni.JniCallType.voidType, [oc.reference.pointer]).check();
   }
 
   static final _id_getInputSource = jni.Jni.accessors.getMethodIDOf(
-      _class.reference, r"getInputSource", r"()Ljava/lang/Object;");
+      _class.reference.pointer, r"getInputSource", r"()Ljava/lang/Object;");
 
   /// from: public java.lang.Object getInputSource()
   /// The returned object must be released after use, by calling the [release] method.
@@ -341,11 +350,13 @@
   ///@return Input source this parser was configured with
   jni.JObject getInputSource() {
     return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_getInputSource, jni.JniCallType.objectType, []).object);
+        reference.pointer,
+        _id_getInputSource,
+        jni.JniCallType.objectType, []).object);
   }
 
   static final _id_setRequestPayloadOnError = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"setRequestPayloadOnError",
       r"(Lcom/fasterxml/jackson/core/util/RequestPayload;)V");
 
@@ -358,14 +369,14 @@
     jni.JObject payload,
   ) {
     return jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_setRequestPayloadOnError,
         jni.JniCallType.voidType,
-        [payload.reference]).check();
+        [payload.reference.pointer]).check();
   }
 
   static final _id_setRequestPayloadOnError1 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"setRequestPayloadOnError",
       r"([BLjava/lang/String;)V");
 
@@ -380,14 +391,16 @@
     jni.JString charset,
   ) {
     return jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_setRequestPayloadOnError1,
         jni.JniCallType.voidType,
-        [payload.reference, charset.reference]).check();
+        [payload.reference.pointer, charset.reference.pointer]).check();
   }
 
   static final _id_setRequestPayloadOnError2 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference, r"setRequestPayloadOnError", r"(Ljava/lang/String;)V");
+      _class.reference.pointer,
+      r"setRequestPayloadOnError",
+      r"(Ljava/lang/String;)V");
 
   /// from: public void setRequestPayloadOnError(java.lang.String payload)
   ///
@@ -398,14 +411,16 @@
     jni.JString payload,
   ) {
     return jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_setRequestPayloadOnError2,
         jni.JniCallType.voidType,
-        [payload.reference]).check();
+        [payload.reference.pointer]).check();
   }
 
-  static final _id_setSchema = jni.Jni.accessors.getMethodIDOf(_class.reference,
-      r"setSchema", r"(Lcom/fasterxml/jackson/core/FormatSchema;)V");
+  static final _id_setSchema = jni.Jni.accessors.getMethodIDOf(
+      _class.reference.pointer,
+      r"setSchema",
+      r"(Lcom/fasterxml/jackson/core/FormatSchema;)V");
 
   /// from: public void setSchema(com.fasterxml.jackson.core.FormatSchema schema)
   ///
@@ -422,12 +437,17 @@
   void setSchema(
     jni.JObject schema,
   ) {
-    return jni.Jni.accessors.callMethodWithArgs(reference, _id_setSchema,
-        jni.JniCallType.voidType, [schema.reference]).check();
+    return jni.Jni.accessors.callMethodWithArgs(
+        reference.pointer,
+        _id_setSchema,
+        jni.JniCallType.voidType,
+        [schema.reference.pointer]).check();
   }
 
-  static final _id_getSchema = jni.Jni.accessors.getMethodIDOf(_class.reference,
-      r"getSchema", r"()Lcom/fasterxml/jackson/core/FormatSchema;");
+  static final _id_getSchema = jni.Jni.accessors.getMethodIDOf(
+      _class.reference.pointer,
+      r"getSchema",
+      r"()Lcom/fasterxml/jackson/core/FormatSchema;");
 
   /// from: public com.fasterxml.jackson.core.FormatSchema getSchema()
   /// The returned object must be released after use, by calling the [release] method.
@@ -438,11 +458,13 @@
   ///@since 2.1
   jni.JObject getSchema() {
     return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_getSchema, jni.JniCallType.objectType, []).object);
+        reference.pointer,
+        _id_getSchema,
+        jni.JniCallType.objectType, []).object);
   }
 
   static final _id_canUseSchema = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"canUseSchema",
       r"(Lcom/fasterxml/jackson/core/FormatSchema;)Z");
 
@@ -455,12 +477,15 @@
   bool canUseSchema(
     jni.JObject schema,
   ) {
-    return jni.Jni.accessors.callMethodWithArgs(reference, _id_canUseSchema,
-        jni.JniCallType.booleanType, [schema.reference]).boolean;
+    return jni.Jni.accessors.callMethodWithArgs(
+        reference.pointer,
+        _id_canUseSchema,
+        jni.JniCallType.booleanType,
+        [schema.reference.pointer]).boolean;
   }
 
   static final _id_requiresCustomCodec = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"requiresCustomCodec", r"()Z");
+      .getMethodIDOf(_class.reference.pointer, r"requiresCustomCodec", r"()Z");
 
   /// from: public boolean requiresCustomCodec()
   ///
@@ -473,12 +498,12 @@
   ///   ObjectCodec is enough
   ///@since 2.1
   bool requiresCustomCodec() {
-    return jni.Jni.accessors.callMethodWithArgs(reference,
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
         _id_requiresCustomCodec, jni.JniCallType.booleanType, []).boolean;
   }
 
   static final _id_canParseAsync = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"canParseAsync", r"()Z");
+      .getMethodIDOf(_class.reference.pointer, r"canParseAsync", r"()Z");
 
   /// from: public boolean canParseAsync()
   ///
@@ -494,12 +519,12 @@
   ///@return True if this is a non-blocking ("asynchronous") parser
   ///@since 2.9
   bool canParseAsync() {
-    return jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_canParseAsync, jni.JniCallType.booleanType, []).boolean;
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
+        _id_canParseAsync, jni.JniCallType.booleanType, []).boolean;
   }
 
   static final _id_getNonBlockingInputFeeder = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"getNonBlockingInputFeeder",
       r"()Lcom/fasterxml/jackson/core/async/NonBlockingInputFeeder;");
 
@@ -513,13 +538,13 @@
   ///@since 2.9
   jni.JObject getNonBlockingInputFeeder() {
     return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_getNonBlockingInputFeeder,
         jni.JniCallType.objectType, []).object);
   }
 
   static final _id_getReadCapabilities = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"getReadCapabilities",
       r"()Lcom/fasterxml/jackson/core/util/JacksonFeatureSet;");
 
@@ -532,13 +557,15 @@
   ///@since 2.12
   jni.JObject getReadCapabilities() {
     return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_getReadCapabilities,
         jni.JniCallType.objectType, []).object);
   }
 
   static final _id_version = jni.Jni.accessors.getMethodIDOf(
-      _class.reference, r"version", r"()Lcom/fasterxml/jackson/core/Version;");
+      _class.reference.pointer,
+      r"version",
+      r"()Lcom/fasterxml/jackson/core/Version;");
 
   /// from: public abstract com.fasterxml.jackson.core.Version version()
   /// The returned object must be released after use, by calling the [release] method.
@@ -549,11 +576,11 @@
   ///   {@code jackson-core} jar that contains the class
   jni.JObject version() {
     return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_version, jni.JniCallType.objectType, []).object);
+        reference.pointer, _id_version, jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_close =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"close", r"()V");
+  static final _id_close = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"close", r"()V");
 
   /// from: public abstract void close()
   ///
@@ -573,11 +600,11 @@
   ///@throws IOException if there is either an underlying I/O problem
   void close() {
     return jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_close, jni.JniCallType.voidType, []).check();
+        reference.pointer, _id_close, jni.JniCallType.voidType, []).check();
   }
 
-  static final _id_isClosed =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"isClosed", r"()Z");
+  static final _id_isClosed = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"isClosed", r"()Z");
 
   /// from: public abstract boolean isClosed()
   ///
@@ -589,12 +616,12 @@
   /// end of input.
   ///@return {@code True} if this parser instance has been closed
   bool isClosed() {
-    return jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_isClosed, jni.JniCallType.booleanType, []).boolean;
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer, _id_isClosed,
+        jni.JniCallType.booleanType, []).boolean;
   }
 
   static final _id_getParsingContext = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"getParsingContext",
       r"()Lcom/fasterxml/jackson/core/JsonStreamContext;");
 
@@ -612,13 +639,13 @@
   ///@return Stream input context (JsonStreamContext) associated with this parser
   jni.JObject getParsingContext() {
     return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_getParsingContext,
         jni.JniCallType.objectType, []).object);
   }
 
   static final _id_currentLocation = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"currentLocation",
       r"()Lcom/fasterxml/jackson/core/JsonLocation;");
 
@@ -639,11 +666,13 @@
   ///@since 2.13
   jni.JObject currentLocation() {
     return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_currentLocation, jni.JniCallType.objectType, []).object);
+        reference.pointer,
+        _id_currentLocation,
+        jni.JniCallType.objectType, []).object);
   }
 
   static final _id_currentTokenLocation = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"currentTokenLocation",
       r"()Lcom/fasterxml/jackson/core/JsonLocation;");
 
@@ -664,13 +693,13 @@
   ///@since 2.13 (will eventually replace \#getTokenLocation)
   jni.JObject currentTokenLocation() {
     return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_currentTokenLocation,
         jni.JniCallType.objectType, []).object);
   }
 
   static final _id_getCurrentLocation = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"getCurrentLocation",
       r"()Lcom/fasterxml/jackson/core/JsonLocation;");
 
@@ -682,13 +711,13 @@
   ///@return Location of the last processed input unit (byte or character)
   jni.JObject getCurrentLocation() {
     return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_getCurrentLocation,
         jni.JniCallType.objectType, []).object);
   }
 
   static final _id_getTokenLocation = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"getTokenLocation",
       r"()Lcom/fasterxml/jackson/core/JsonLocation;");
 
@@ -700,13 +729,13 @@
   ///@return Starting location of the token parser currently points to
   jni.JObject getTokenLocation() {
     return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_getTokenLocation,
         jni.JniCallType.objectType, []).object);
   }
 
   static final _id_currentValue = jni.Jni.accessors.getMethodIDOf(
-      _class.reference, r"currentValue", r"()Ljava/lang/Object;");
+      _class.reference.pointer, r"currentValue", r"()Ljava/lang/Object;");
 
   /// from: public java.lang.Object currentValue()
   /// The returned object must be released after use, by calling the [release] method.
@@ -724,11 +753,15 @@
   ///@since 2.13 (added as replacement for older \#getCurrentValue()
   jni.JObject currentValue() {
     return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_currentValue, jni.JniCallType.objectType, []).object);
+        reference.pointer,
+        _id_currentValue,
+        jni.JniCallType.objectType, []).object);
   }
 
   static final _id_assignCurrentValue = jni.Jni.accessors.getMethodIDOf(
-      _class.reference, r"assignCurrentValue", r"(Ljava/lang/Object;)V");
+      _class.reference.pointer,
+      r"assignCurrentValue",
+      r"(Ljava/lang/Object;)V");
 
   /// from: public void assignCurrentValue(java.lang.Object v)
   ///
@@ -742,14 +775,14 @@
     jni.JObject v,
   ) {
     return jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_assignCurrentValue,
         jni.JniCallType.voidType,
-        [v.reference]).check();
+        [v.reference.pointer]).check();
   }
 
   static final _id_getCurrentValue = jni.Jni.accessors.getMethodIDOf(
-      _class.reference, r"getCurrentValue", r"()Ljava/lang/Object;");
+      _class.reference.pointer, r"getCurrentValue", r"()Ljava/lang/Object;");
 
   /// from: public java.lang.Object getCurrentValue()
   /// The returned object must be released after use, by calling the [release] method.
@@ -759,11 +792,13 @@
   ///@return Location of the last processed input unit (byte or character)
   jni.JObject getCurrentValue() {
     return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_getCurrentValue, jni.JniCallType.objectType, []).object);
+        reference.pointer,
+        _id_getCurrentValue,
+        jni.JniCallType.objectType, []).object);
   }
 
   static final _id_setCurrentValue = jni.Jni.accessors.getMethodIDOf(
-      _class.reference, r"setCurrentValue", r"(Ljava/lang/Object;)V");
+      _class.reference.pointer, r"setCurrentValue", r"(Ljava/lang/Object;)V");
 
   /// from: public void setCurrentValue(java.lang.Object v)
   ///
@@ -773,12 +808,17 @@
   void setCurrentValue(
     jni.JObject v,
   ) {
-    return jni.Jni.accessors.callMethodWithArgs(reference, _id_setCurrentValue,
-        jni.JniCallType.voidType, [v.reference]).check();
+    return jni.Jni.accessors.callMethodWithArgs(
+        reference.pointer,
+        _id_setCurrentValue,
+        jni.JniCallType.voidType,
+        [v.reference.pointer]).check();
   }
 
   static final _id_releaseBuffered = jni.Jni.accessors.getMethodIDOf(
-      _class.reference, r"releaseBuffered", r"(Ljava/io/OutputStream;)I");
+      _class.reference.pointer,
+      r"releaseBuffered",
+      r"(Ljava/io/OutputStream;)I");
 
   /// from: public int releaseBuffered(java.io.OutputStream out)
   ///
@@ -796,12 +836,15 @@
   int releaseBuffered(
     jni.JObject out,
   ) {
-    return jni.Jni.accessors.callMethodWithArgs(reference, _id_releaseBuffered,
-        jni.JniCallType.intType, [out.reference]).integer;
+    return jni.Jni.accessors.callMethodWithArgs(
+        reference.pointer,
+        _id_releaseBuffered,
+        jni.JniCallType.intType,
+        [out.reference.pointer]).integer;
   }
 
   static final _id_releaseBuffered1 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference, r"releaseBuffered", r"(Ljava/io/Writer;)I");
+      _class.reference.pointer, r"releaseBuffered", r"(Ljava/io/Writer;)I");
 
   /// from: public int releaseBuffered(java.io.Writer w)
   ///
@@ -820,12 +863,15 @@
   int releaseBuffered1(
     jni.JObject w,
   ) {
-    return jni.Jni.accessors.callMethodWithArgs(reference, _id_releaseBuffered1,
-        jni.JniCallType.intType, [w.reference]).integer;
+    return jni.Jni.accessors.callMethodWithArgs(
+        reference.pointer,
+        _id_releaseBuffered1,
+        jni.JniCallType.intType,
+        [w.reference.pointer]).integer;
   }
 
   static final _id_enable = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"enable",
       r"(Lcom/fasterxml/jackson/core/JsonParser$Feature;)Lcom/fasterxml/jackson/core/JsonParser;");
 
@@ -840,14 +886,14 @@
     JsonParser_Feature f,
   ) {
     return const $JsonParserType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_enable,
         jni.JniCallType.objectType,
-        [f.reference]).object);
+        [f.reference.pointer]).object);
   }
 
   static final _id_disable = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"disable",
       r"(Lcom/fasterxml/jackson/core/JsonParser$Feature;)Lcom/fasterxml/jackson/core/JsonParser;");
 
@@ -862,14 +908,14 @@
     JsonParser_Feature f,
   ) {
     return const $JsonParserType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_disable,
         jni.JniCallType.objectType,
-        [f.reference]).object);
+        [f.reference.pointer]).object);
   }
 
   static final _id_configure = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"configure",
       r"(Lcom/fasterxml/jackson/core/JsonParser$Feature;Z)Lcom/fasterxml/jackson/core/JsonParser;");
 
@@ -886,14 +932,16 @@
     bool state,
   ) {
     return const $JsonParserType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_configure,
         jni.JniCallType.objectType,
-        [f.reference, state ? 1 : 0]).object);
+        [f.reference.pointer, state ? 1 : 0]).object);
   }
 
-  static final _id_isEnabled = jni.Jni.accessors.getMethodIDOf(_class.reference,
-      r"isEnabled", r"(Lcom/fasterxml/jackson/core/JsonParser$Feature;)Z");
+  static final _id_isEnabled = jni.Jni.accessors.getMethodIDOf(
+      _class.reference.pointer,
+      r"isEnabled",
+      r"(Lcom/fasterxml/jackson/core/JsonParser$Feature;)Z");
 
   /// from: public boolean isEnabled(com.fasterxml.jackson.core.JsonParser.Feature f)
   ///
@@ -903,12 +951,15 @@
   bool isEnabled(
     JsonParser_Feature f,
   ) {
-    return jni.Jni.accessors.callMethodWithArgs(reference, _id_isEnabled,
-        jni.JniCallType.booleanType, [f.reference]).boolean;
+    return jni.Jni.accessors.callMethodWithArgs(
+        reference.pointer,
+        _id_isEnabled,
+        jni.JniCallType.booleanType,
+        [f.reference.pointer]).boolean;
   }
 
   static final _id_isEnabled1 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"isEnabled",
       r"(Lcom/fasterxml/jackson/core/StreamReadFeature;)Z");
 
@@ -921,12 +972,15 @@
   bool isEnabled1(
     jni.JObject f,
   ) {
-    return jni.Jni.accessors.callMethodWithArgs(reference, _id_isEnabled1,
-        jni.JniCallType.booleanType, [f.reference]).boolean;
+    return jni.Jni.accessors.callMethodWithArgs(
+        reference.pointer,
+        _id_isEnabled1,
+        jni.JniCallType.booleanType,
+        [f.reference.pointer]).boolean;
   }
 
   static final _id_getFeatureMask = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"getFeatureMask", r"()I");
+      .getMethodIDOf(_class.reference.pointer, r"getFeatureMask", r"()I");
 
   /// from: public int getFeatureMask()
   ///
@@ -934,12 +988,12 @@
   ///@return Bit mask that defines current states of all standard Features.
   ///@since 2.3
   int getFeatureMask() {
-    return jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_getFeatureMask, jni.JniCallType.intType, []).integer;
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
+        _id_getFeatureMask, jni.JniCallType.intType, []).integer;
   }
 
   static final _id_setFeatureMask = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"setFeatureMask",
       r"(I)Lcom/fasterxml/jackson/core/JsonParser;");
 
@@ -955,14 +1009,14 @@
     int mask,
   ) {
     return const $JsonParserType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_setFeatureMask,
         jni.JniCallType.objectType,
         [jni.JValueInt(mask)]).object);
   }
 
   static final _id_overrideStdFeatures = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"overrideStdFeatures",
       r"(II)Lcom/fasterxml/jackson/core/JsonParser;");
 
@@ -986,14 +1040,14 @@
     int mask,
   ) {
     return const $JsonParserType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_overrideStdFeatures,
         jni.JniCallType.objectType,
         [jni.JValueInt(values), jni.JValueInt(mask)]).object);
   }
 
   static final _id_getFormatFeatures = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"getFormatFeatures", r"()I");
+      .getMethodIDOf(_class.reference.pointer, r"getFormatFeatures", r"()I");
 
   /// from: public int getFormatFeatures()
   ///
@@ -1002,12 +1056,12 @@
   ///@return Bit mask that defines current states of all standard FormatFeatures.
   ///@since 2.6
   int getFormatFeatures() {
-    return jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_getFormatFeatures, jni.JniCallType.intType, []).integer;
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
+        _id_getFormatFeatures, jni.JniCallType.intType, []).integer;
   }
 
   static final _id_overrideFormatFeatures = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"overrideFormatFeatures",
       r"(II)Lcom/fasterxml/jackson/core/JsonParser;");
 
@@ -1029,14 +1083,16 @@
     int mask,
   ) {
     return const $JsonParserType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_overrideFormatFeatures,
         jni.JniCallType.objectType,
         [jni.JValueInt(values), jni.JValueInt(mask)]).object);
   }
 
-  static final _id_nextToken = jni.Jni.accessors.getMethodIDOf(_class.reference,
-      r"nextToken", r"()Lcom/fasterxml/jackson/core/JsonToken;");
+  static final _id_nextToken = jni.Jni.accessors.getMethodIDOf(
+      _class.reference.pointer,
+      r"nextToken",
+      r"()Lcom/fasterxml/jackson/core/JsonToken;");
 
   /// from: public abstract com.fasterxml.jackson.core.JsonToken nextToken()
   /// The returned object must be released after use, by calling the [release] method.
@@ -1051,12 +1107,14 @@
   ///   JsonParseException for decoding problems
   jsontoken_.JsonToken nextToken() {
     return const jsontoken_.$JsonTokenType().fromRef(jni.Jni.accessors
-        .callMethodWithArgs(
-            reference, _id_nextToken, jni.JniCallType.objectType, []).object);
+        .callMethodWithArgs(reference.pointer, _id_nextToken,
+            jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_nextValue = jni.Jni.accessors.getMethodIDOf(_class.reference,
-      r"nextValue", r"()Lcom/fasterxml/jackson/core/JsonToken;");
+  static final _id_nextValue = jni.Jni.accessors.getMethodIDOf(
+      _class.reference.pointer,
+      r"nextValue",
+      r"()Lcom/fasterxml/jackson/core/JsonToken;");
 
   /// from: public abstract com.fasterxml.jackson.core.JsonToken nextValue()
   /// The returned object must be released after use, by calling the [release] method.
@@ -1079,12 +1137,12 @@
   ///   JsonParseException for decoding problems
   jsontoken_.JsonToken nextValue() {
     return const jsontoken_.$JsonTokenType().fromRef(jni.Jni.accessors
-        .callMethodWithArgs(
-            reference, _id_nextValue, jni.JniCallType.objectType, []).object);
+        .callMethodWithArgs(reference.pointer, _id_nextValue,
+            jni.JniCallType.objectType, []).object);
   }
 
   static final _id_nextFieldName = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"nextFieldName",
       r"(Lcom/fasterxml/jackson/core/SerializableString;)Z");
 
@@ -1108,12 +1166,15 @@
   bool nextFieldName(
     jni.JObject str,
   ) {
-    return jni.Jni.accessors.callMethodWithArgs(reference, _id_nextFieldName,
-        jni.JniCallType.booleanType, [str.reference]).boolean;
+    return jni.Jni.accessors.callMethodWithArgs(
+        reference.pointer,
+        _id_nextFieldName,
+        jni.JniCallType.booleanType,
+        [str.reference.pointer]).boolean;
   }
 
   static final _id_nextFieldName1 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference, r"nextFieldName", r"()Ljava/lang/String;");
+      _class.reference.pointer, r"nextFieldName", r"()Ljava/lang/String;");
 
   /// from: public java.lang.String nextFieldName()
   /// The returned object must be released after use, by calling the [release] method.
@@ -1128,11 +1189,13 @@
   ///@since 2.5
   jni.JString nextFieldName1() {
     return const jni.JStringType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_nextFieldName1, jni.JniCallType.objectType, []).object);
+        reference.pointer,
+        _id_nextFieldName1,
+        jni.JniCallType.objectType, []).object);
   }
 
   static final _id_nextTextValue = jni.Jni.accessors.getMethodIDOf(
-      _class.reference, r"nextTextValue", r"()Ljava/lang/String;");
+      _class.reference.pointer, r"nextTextValue", r"()Ljava/lang/String;");
 
   /// from: public java.lang.String nextTextValue()
   /// The returned object must be released after use, by calling the [release] method.
@@ -1152,11 +1215,13 @@
   ///   JsonParseException for decoding problems
   jni.JString nextTextValue() {
     return const jni.JStringType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_nextTextValue, jni.JniCallType.objectType, []).object);
+        reference.pointer,
+        _id_nextTextValue,
+        jni.JniCallType.objectType, []).object);
   }
 
   static final _id_nextIntValue = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"nextIntValue", r"(I)I");
+      .getMethodIDOf(_class.reference.pointer, r"nextIntValue", r"(I)I");
 
   /// from: public int nextIntValue(int defaultValue)
   ///
@@ -1180,12 +1245,15 @@
   int nextIntValue(
     int defaultValue,
   ) {
-    return jni.Jni.accessors.callMethodWithArgs(reference, _id_nextIntValue,
-        jni.JniCallType.intType, [jni.JValueInt(defaultValue)]).integer;
+    return jni.Jni.accessors.callMethodWithArgs(
+        reference.pointer,
+        _id_nextIntValue,
+        jni.JniCallType.intType,
+        [jni.JValueInt(defaultValue)]).integer;
   }
 
   static final _id_nextLongValue = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"nextLongValue", r"(J)J");
+      .getMethodIDOf(_class.reference.pointer, r"nextLongValue", r"(J)J");
 
   /// from: public long nextLongValue(long defaultValue)
   ///
@@ -1209,12 +1277,12 @@
   int nextLongValue(
     int defaultValue,
   ) {
-    return jni.Jni.accessors.callMethodWithArgs(reference, _id_nextLongValue,
-        jni.JniCallType.longType, [defaultValue]).long;
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
+        _id_nextLongValue, jni.JniCallType.longType, [defaultValue]).long;
   }
 
   static final _id_nextBooleanValue = jni.Jni.accessors.getMethodIDOf(
-      _class.reference, r"nextBooleanValue", r"()Ljava/lang/Boolean;");
+      _class.reference.pointer, r"nextBooleanValue", r"()Ljava/lang/Boolean;");
 
   /// from: public java.lang.Boolean nextBooleanValue()
   /// The returned object must be released after use, by calling the [release] method.
@@ -1237,12 +1305,12 @@
   ///   JsonParseException for decoding problems
   jni.JBoolean nextBooleanValue() {
     return const jni.JBooleanType().fromRef(jni.Jni.accessors
-        .callMethodWithArgs(reference, _id_nextBooleanValue,
+        .callMethodWithArgs(reference.pointer, _id_nextBooleanValue,
             jni.JniCallType.objectType, []).object);
   }
 
   static final _id_skipChildren = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"skipChildren",
       r"()Lcom/fasterxml/jackson/core/JsonParser;");
 
@@ -1266,11 +1334,13 @@
   ///   JsonParseException for decoding problems
   JsonParser skipChildren() {
     return const $JsonParserType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_skipChildren, jni.JniCallType.objectType, []).object);
+        reference.pointer,
+        _id_skipChildren,
+        jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_finishToken =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"finishToken", r"()V");
+  static final _id_finishToken = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"finishToken", r"()V");
 
   /// from: public void finishToken()
   ///
@@ -1288,12 +1358,12 @@
   ///   JsonParseException for decoding problems
   ///@since 2.8
   void finishToken() {
-    return jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_finishToken, jni.JniCallType.voidType, []).check();
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
+        _id_finishToken, jni.JniCallType.voidType, []).check();
   }
 
   static final _id_currentToken = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"currentToken",
       r"()Lcom/fasterxml/jackson/core/JsonToken;");
 
@@ -1311,12 +1381,12 @@
   ///@since 2.8
   jsontoken_.JsonToken currentToken() {
     return const jsontoken_.$JsonTokenType().fromRef(jni.Jni.accessors
-        .callMethodWithArgs(reference, _id_currentToken,
+        .callMethodWithArgs(reference.pointer, _id_currentToken,
             jni.JniCallType.objectType, []).object);
   }
 
   static final _id_currentTokenId = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"currentTokenId", r"()I");
+      .getMethodIDOf(_class.reference.pointer, r"currentTokenId", r"()I");
 
   /// from: public int currentTokenId()
   ///
@@ -1330,12 +1400,12 @@
   ///@since 2.8
   ///@return {@code int} matching one of constants from JsonTokenId.
   int currentTokenId() {
-    return jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_currentTokenId, jni.JniCallType.intType, []).integer;
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
+        _id_currentTokenId, jni.JniCallType.intType, []).integer;
   }
 
   static final _id_getCurrentToken = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"getCurrentToken",
       r"()Lcom/fasterxml/jackson/core/JsonToken;");
 
@@ -1348,12 +1418,12 @@
   ///   if any: null before any tokens have been read, and
   jsontoken_.JsonToken getCurrentToken() {
     return const jsontoken_.$JsonTokenType().fromRef(jni.Jni.accessors
-        .callMethodWithArgs(reference, _id_getCurrentToken,
+        .callMethodWithArgs(reference.pointer, _id_getCurrentToken,
             jni.JniCallType.objectType, []).object);
   }
 
   static final _id_getCurrentTokenId = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"getCurrentTokenId", r"()I");
+      .getMethodIDOf(_class.reference.pointer, r"getCurrentTokenId", r"()I");
 
   /// from: public abstract int getCurrentTokenId()
   ///
@@ -1361,12 +1431,12 @@
   ///@return {@code int} matching one of constants from JsonTokenId.
   ///@deprecated Since 2.12 use \#currentTokenId instead
   int getCurrentTokenId() {
-    return jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_getCurrentTokenId, jni.JniCallType.intType, []).integer;
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
+        _id_getCurrentTokenId, jni.JniCallType.intType, []).integer;
   }
 
   static final _id_hasCurrentToken = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"hasCurrentToken", r"()Z");
+      .getMethodIDOf(_class.reference.pointer, r"hasCurrentToken", r"()Z");
 
   /// from: public abstract boolean hasCurrentToken()
   ///
@@ -1379,12 +1449,12 @@
   ///   and returned null from \#nextToken, or the token
   ///   has been consumed)
   bool hasCurrentToken() {
-    return jni.Jni.accessors.callMethodWithArgs(reference, _id_hasCurrentToken,
-        jni.JniCallType.booleanType, []).boolean;
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
+        _id_hasCurrentToken, jni.JniCallType.booleanType, []).boolean;
   }
 
-  static final _id_hasTokenId =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"hasTokenId", r"(I)Z");
+  static final _id_hasTokenId = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"hasTokenId", r"(I)Z");
 
   /// from: public abstract boolean hasTokenId(int id)
   ///
@@ -1403,12 +1473,17 @@
   bool hasTokenId(
     int id,
   ) {
-    return jni.Jni.accessors.callMethodWithArgs(reference, _id_hasTokenId,
-        jni.JniCallType.booleanType, [jni.JValueInt(id)]).boolean;
+    return jni.Jni.accessors.callMethodWithArgs(
+        reference.pointer,
+        _id_hasTokenId,
+        jni.JniCallType.booleanType,
+        [jni.JValueInt(id)]).boolean;
   }
 
-  static final _id_hasToken = jni.Jni.accessors.getMethodIDOf(_class.reference,
-      r"hasToken", r"(Lcom/fasterxml/jackson/core/JsonToken;)Z");
+  static final _id_hasToken = jni.Jni.accessors.getMethodIDOf(
+      _class.reference.pointer,
+      r"hasToken",
+      r"(Lcom/fasterxml/jackson/core/JsonToken;)Z");
 
   /// from: public abstract boolean hasToken(com.fasterxml.jackson.core.JsonToken t)
   ///
@@ -1427,12 +1502,12 @@
   bool hasToken(
     jsontoken_.JsonToken t,
   ) {
-    return jni.Jni.accessors.callMethodWithArgs(reference, _id_hasToken,
-        jni.JniCallType.booleanType, [t.reference]).boolean;
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer, _id_hasToken,
+        jni.JniCallType.booleanType, [t.reference.pointer]).boolean;
   }
 
-  static final _id_isExpectedStartArrayToken = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"isExpectedStartArrayToken", r"()Z");
+  static final _id_isExpectedStartArrayToken = jni.Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"isExpectedStartArrayToken", r"()Z");
 
   /// from: public boolean isExpectedStartArrayToken()
   ///
@@ -1453,12 +1528,12 @@
   ///   start-array marker (such JsonToken\#START_ARRAY);
   ///   {@code false} if not
   bool isExpectedStartArrayToken() {
-    return jni.Jni.accessors.callMethodWithArgs(reference,
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
         _id_isExpectedStartArrayToken, jni.JniCallType.booleanType, []).boolean;
   }
 
-  static final _id_isExpectedStartObjectToken = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"isExpectedStartObjectToken", r"()Z");
+  static final _id_isExpectedStartObjectToken = jni.Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"isExpectedStartObjectToken", r"()Z");
 
   /// from: public boolean isExpectedStartObjectToken()
   ///
@@ -1470,13 +1545,13 @@
   ///@since 2.5
   bool isExpectedStartObjectToken() {
     return jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_isExpectedStartObjectToken,
         jni.JniCallType.booleanType, []).boolean;
   }
 
-  static final _id_isExpectedNumberIntToken = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"isExpectedNumberIntToken", r"()Z");
+  static final _id_isExpectedNumberIntToken = jni.Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"isExpectedNumberIntToken", r"()Z");
 
   /// from: public boolean isExpectedNumberIntToken()
   ///
@@ -1490,12 +1565,12 @@
   ///   {@code false} if not
   ///@since 2.12
   bool isExpectedNumberIntToken() {
-    return jni.Jni.accessors.callMethodWithArgs(reference,
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
         _id_isExpectedNumberIntToken, jni.JniCallType.booleanType, []).boolean;
   }
 
-  static final _id_isNaN =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"isNaN", r"()Z");
+  static final _id_isNaN = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"isNaN", r"()Z");
 
   /// from: public boolean isNaN()
   ///
@@ -1513,11 +1588,11 @@
   ///@since 2.9
   bool isNaN() {
     return jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_isNaN, jni.JniCallType.booleanType, []).boolean;
+        reference.pointer, _id_isNaN, jni.JniCallType.booleanType, []).boolean;
   }
 
   static final _id_clearCurrentToken = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"clearCurrentToken", r"()V");
+      .getMethodIDOf(_class.reference.pointer, r"clearCurrentToken", r"()V");
 
   /// from: public abstract void clearCurrentToken()
   ///
@@ -1532,12 +1607,12 @@
   /// it has to be able to consume last token used for binding (so that
   /// it will not be used again).
   void clearCurrentToken() {
-    return jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_clearCurrentToken, jni.JniCallType.voidType, []).check();
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
+        _id_clearCurrentToken, jni.JniCallType.voidType, []).check();
   }
 
   static final _id_getLastClearedToken = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"getLastClearedToken",
       r"()Lcom/fasterxml/jackson/core/JsonToken;");
 
@@ -1552,12 +1627,14 @@
   ///@return Last cleared token, if any; {@code null} otherwise
   jsontoken_.JsonToken getLastClearedToken() {
     return const jsontoken_.$JsonTokenType().fromRef(jni.Jni.accessors
-        .callMethodWithArgs(reference, _id_getLastClearedToken,
+        .callMethodWithArgs(reference.pointer, _id_getLastClearedToken,
             jni.JniCallType.objectType, []).object);
   }
 
   static final _id_overrideCurrentName = jni.Jni.accessors.getMethodIDOf(
-      _class.reference, r"overrideCurrentName", r"(Ljava/lang/String;)V");
+      _class.reference.pointer,
+      r"overrideCurrentName",
+      r"(Ljava/lang/String;)V");
 
   /// from: public abstract void overrideCurrentName(java.lang.String name)
   ///
@@ -1573,14 +1650,14 @@
     jni.JString name,
   ) {
     return jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_overrideCurrentName,
         jni.JniCallType.voidType,
-        [name.reference]).check();
+        [name.reference.pointer]).check();
   }
 
   static final _id_getCurrentName = jni.Jni.accessors.getMethodIDOf(
-      _class.reference, r"getCurrentName", r"()Ljava/lang/String;");
+      _class.reference.pointer, r"getCurrentName", r"()Ljava/lang/String;");
 
   /// from: public abstract java.lang.String getCurrentName()
   /// The returned object must be released after use, by calling the [release] method.
@@ -1591,11 +1668,13 @@
   ///   JsonParseException for decoding problems
   jni.JString getCurrentName() {
     return const jni.JStringType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_getCurrentName, jni.JniCallType.objectType, []).object);
+        reference.pointer,
+        _id_getCurrentName,
+        jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_currentName = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"currentName", r"()Ljava/lang/String;");
+  static final _id_currentName = jni.Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"currentName", r"()Ljava/lang/String;");
 
   /// from: public java.lang.String currentName()
   /// The returned object must be released after use, by calling the [release] method.
@@ -1611,11 +1690,13 @@
   ///@since 2.10
   jni.JString currentName() {
     return const jni.JStringType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_currentName, jni.JniCallType.objectType, []).object);
+        reference.pointer,
+        _id_currentName,
+        jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_getText = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"getText", r"()Ljava/lang/String;");
+  static final _id_getText = jni.Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"getText", r"()Ljava/lang/String;");
 
   /// from: public abstract java.lang.String getText()
   /// The returned object must be released after use, by calling the [release] method.
@@ -1630,11 +1711,11 @@
   ///   JsonParseException for decoding problems
   jni.JString getText() {
     return const jni.JStringType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_getText, jni.JniCallType.objectType, []).object);
+        reference.pointer, _id_getText, jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_getText1 = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"getText", r"(Ljava/io/Writer;)I");
+  static final _id_getText1 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"getText", r"(Ljava/io/Writer;)I");
 
   /// from: public int getText(java.io.Writer writer)
   ///
@@ -1656,12 +1737,12 @@
   int getText1(
     jni.JObject writer,
   ) {
-    return jni.Jni.accessors.callMethodWithArgs(reference, _id_getText1,
-        jni.JniCallType.intType, [writer.reference]).integer;
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer, _id_getText1,
+        jni.JniCallType.intType, [writer.reference.pointer]).integer;
   }
 
   static final _id_getTextCharacters = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"getTextCharacters", r"()[C");
+      .getMethodIDOf(_class.reference.pointer, r"getTextCharacters", r"()[C");
 
   /// from: public abstract char[] getTextCharacters()
   /// The returned object must be released after use, by calling the [release] method.
@@ -1695,12 +1776,12 @@
   ///   JsonParseException for decoding problems
   jni.JArray<jni.jchar> getTextCharacters() {
     return const jni.JArrayType(jni.jcharType()).fromRef(jni.Jni.accessors
-        .callMethodWithArgs(reference, _id_getTextCharacters,
+        .callMethodWithArgs(reference.pointer, _id_getTextCharacters,
             jni.JniCallType.objectType, []).object);
   }
 
   static final _id_getTextLength = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"getTextLength", r"()I");
+      .getMethodIDOf(_class.reference.pointer, r"getTextLength", r"()I");
 
   /// from: public abstract int getTextLength()
   ///
@@ -1712,12 +1793,12 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   int getTextLength() {
-    return jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_getTextLength, jni.JniCallType.intType, []).integer;
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
+        _id_getTextLength, jni.JniCallType.intType, []).integer;
   }
 
   static final _id_getTextOffset = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"getTextOffset", r"()I");
+      .getMethodIDOf(_class.reference.pointer, r"getTextOffset", r"()I");
 
   /// from: public abstract int getTextOffset()
   ///
@@ -1729,12 +1810,12 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   int getTextOffset() {
-    return jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_getTextOffset, jni.JniCallType.intType, []).integer;
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
+        _id_getTextOffset, jni.JniCallType.intType, []).integer;
   }
 
   static final _id_hasTextCharacters = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"hasTextCharacters", r"()Z");
+      .getMethodIDOf(_class.reference.pointer, r"hasTextCharacters", r"()Z");
 
   /// from: public abstract boolean hasTextCharacters()
   ///
@@ -1753,12 +1834,12 @@
   ///   be efficiently returned via \#getTextCharacters; false
   ///   means that it may or may not exist
   bool hasTextCharacters() {
-    return jni.Jni.accessors.callMethodWithArgs(reference,
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
         _id_hasTextCharacters, jni.JniCallType.booleanType, []).boolean;
   }
 
   static final _id_getNumberValue = jni.Jni.accessors.getMethodIDOf(
-      _class.reference, r"getNumberValue", r"()Ljava/lang/Number;");
+      _class.reference.pointer, r"getNumberValue", r"()Ljava/lang/Number;");
 
   /// from: public abstract java.lang.Number getNumberValue()
   /// The returned object must be released after use, by calling the [release] method.
@@ -1775,11 +1856,15 @@
   ///    content read fails (possible if values are extracted lazily)
   jni.JNumber getNumberValue() {
     return const jni.JNumberType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_getNumberValue, jni.JniCallType.objectType, []).object);
+        reference.pointer,
+        _id_getNumberValue,
+        jni.JniCallType.objectType, []).object);
   }
 
   static final _id_getNumberValueExact = jni.Jni.accessors.getMethodIDOf(
-      _class.reference, r"getNumberValueExact", r"()Ljava/lang/Number;");
+      _class.reference.pointer,
+      r"getNumberValueExact",
+      r"()Ljava/lang/Number;");
 
   /// from: public java.lang.Number getNumberValueExact()
   /// The returned object must be released after use, by calling the [release] method.
@@ -1800,13 +1885,13 @@
   ///@since 2.12
   jni.JNumber getNumberValueExact() {
     return const jni.JNumberType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_getNumberValueExact,
         jni.JniCallType.objectType, []).object);
   }
 
   static final _id_getNumberType = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"getNumberType",
       r"()Lcom/fasterxml/jackson/core/JsonParser$NumberType;");
 
@@ -1822,12 +1907,12 @@
   ///   JsonParseException for decoding problems
   JsonParser_NumberType getNumberType() {
     return const $JsonParser_NumberTypeType().fromRef(jni.Jni.accessors
-        .callMethodWithArgs(reference, _id_getNumberType,
+        .callMethodWithArgs(reference.pointer, _id_getNumberType,
             jni.JniCallType.objectType, []).object);
   }
 
   static final _id_getByteValue = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"getByteValue", r"()B");
+      .getMethodIDOf(_class.reference.pointer, r"getByteValue", r"()B");
 
   /// from: public byte getByteValue()
   ///
@@ -1854,11 +1939,11 @@
   ///   JsonParseException for decoding problems
   int getByteValue() {
     return jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_getByteValue, jni.JniCallType.byteType, []).byte;
+        reference.pointer, _id_getByteValue, jni.JniCallType.byteType, []).byte;
   }
 
   static final _id_getShortValue = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"getShortValue", r"()S");
+      .getMethodIDOf(_class.reference.pointer, r"getShortValue", r"()S");
 
   /// from: public short getShortValue()
   ///
@@ -1878,12 +1963,12 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   int getShortValue() {
-    return jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_getShortValue, jni.JniCallType.shortType, []).short;
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
+        _id_getShortValue, jni.JniCallType.shortType, []).short;
   }
 
-  static final _id_getIntValue =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"getIntValue", r"()I");
+  static final _id_getIntValue = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"getIntValue", r"()I");
 
   /// from: public abstract int getIntValue()
   ///
@@ -1903,12 +1988,12 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   int getIntValue() {
-    return jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_getIntValue, jni.JniCallType.intType, []).integer;
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
+        _id_getIntValue, jni.JniCallType.intType, []).integer;
   }
 
   static final _id_getLongValue = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"getLongValue", r"()J");
+      .getMethodIDOf(_class.reference.pointer, r"getLongValue", r"()J");
 
   /// from: public abstract long getLongValue()
   ///
@@ -1929,11 +2014,13 @@
   ///   JsonParseException for decoding problems
   int getLongValue() {
     return jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_getLongValue, jni.JniCallType.longType, []).long;
+        reference.pointer, _id_getLongValue, jni.JniCallType.longType, []).long;
   }
 
   static final _id_getBigIntegerValue = jni.Jni.accessors.getMethodIDOf(
-      _class.reference, r"getBigIntegerValue", r"()Ljava/math/BigInteger;");
+      _class.reference.pointer,
+      r"getBigIntegerValue",
+      r"()Ljava/math/BigInteger;");
 
   /// from: public abstract java.math.BigInteger getBigIntegerValue()
   /// The returned object must be released after use, by calling the [release] method.
@@ -1951,13 +2038,13 @@
   ///   JsonParseException for decoding problems
   jni.JObject getBigIntegerValue() {
     return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_getBigIntegerValue,
         jni.JniCallType.objectType, []).object);
   }
 
   static final _id_getFloatValue = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"getFloatValue", r"()F");
+      .getMethodIDOf(_class.reference.pointer, r"getFloatValue", r"()F");
 
   /// from: public abstract float getFloatValue()
   ///
@@ -1977,12 +2064,12 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   double getFloatValue() {
-    return jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_getFloatValue, jni.JniCallType.floatType, []).float;
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
+        _id_getFloatValue, jni.JniCallType.floatType, []).float;
   }
 
   static final _id_getDoubleValue = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"getDoubleValue", r"()D");
+      .getMethodIDOf(_class.reference.pointer, r"getDoubleValue", r"()D");
 
   /// from: public abstract double getDoubleValue()
   ///
@@ -2002,12 +2089,14 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   double getDoubleValue() {
-    return jni.Jni.accessors.callMethodWithArgs(reference, _id_getDoubleValue,
-        jni.JniCallType.doubleType, []).doubleFloat;
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
+        _id_getDoubleValue, jni.JniCallType.doubleType, []).doubleFloat;
   }
 
   static final _id_getDecimalValue = jni.Jni.accessors.getMethodIDOf(
-      _class.reference, r"getDecimalValue", r"()Ljava/math/BigDecimal;");
+      _class.reference.pointer,
+      r"getDecimalValue",
+      r"()Ljava/math/BigDecimal;");
 
   /// from: public abstract java.math.BigDecimal getDecimalValue()
   /// The returned object must be released after use, by calling the [release] method.
@@ -2022,11 +2111,13 @@
   ///   JsonParseException for decoding problems
   jni.JObject getDecimalValue() {
     return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_getDecimalValue, jni.JniCallType.objectType, []).object);
+        reference.pointer,
+        _id_getDecimalValue,
+        jni.JniCallType.objectType, []).object);
   }
 
   static final _id_getBooleanValue = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"getBooleanValue", r"()Z");
+      .getMethodIDOf(_class.reference.pointer, r"getBooleanValue", r"()Z");
 
   /// from: public boolean getBooleanValue()
   ///
@@ -2042,12 +2133,12 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   bool getBooleanValue() {
-    return jni.Jni.accessors.callMethodWithArgs(reference, _id_getBooleanValue,
-        jni.JniCallType.booleanType, []).boolean;
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
+        _id_getBooleanValue, jni.JniCallType.booleanType, []).boolean;
   }
 
   static final _id_getEmbeddedObject = jni.Jni.accessors.getMethodIDOf(
-      _class.reference, r"getEmbeddedObject", r"()Ljava/lang/Object;");
+      _class.reference.pointer, r"getEmbeddedObject", r"()Ljava/lang/Object;");
 
   /// from: public java.lang.Object getEmbeddedObject()
   /// The returned object must be released after use, by calling the [release] method.
@@ -2068,13 +2159,13 @@
   ///   JsonParseException for decoding problems
   jni.JObject getEmbeddedObject() {
     return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_getEmbeddedObject,
         jni.JniCallType.objectType, []).object);
   }
 
   static final _id_getBinaryValue = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"getBinaryValue",
       r"(Lcom/fasterxml/jackson/core/Base64Variant;)[B");
 
@@ -2105,12 +2196,12 @@
     jni.JObject bv,
   ) {
     return const jni.JArrayType(jni.jbyteType()).fromRef(jni.Jni.accessors
-        .callMethodWithArgs(reference, _id_getBinaryValue,
-            jni.JniCallType.objectType, [bv.reference]).object);
+        .callMethodWithArgs(reference.pointer, _id_getBinaryValue,
+            jni.JniCallType.objectType, [bv.reference.pointer]).object);
   }
 
   static final _id_getBinaryValue1 = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"getBinaryValue", r"()[B");
+      .getMethodIDOf(_class.reference.pointer, r"getBinaryValue", r"()[B");
 
   /// from: public byte[] getBinaryValue()
   /// The returned object must be released after use, by calling the [release] method.
@@ -2123,12 +2214,14 @@
   ///   JsonParseException for decoding problems
   jni.JArray<jni.jbyte> getBinaryValue1() {
     return const jni.JArrayType(jni.jbyteType()).fromRef(jni.Jni.accessors
-        .callMethodWithArgs(reference, _id_getBinaryValue1,
+        .callMethodWithArgs(reference.pointer, _id_getBinaryValue1,
             jni.JniCallType.objectType, []).object);
   }
 
   static final _id_readBinaryValue = jni.Jni.accessors.getMethodIDOf(
-      _class.reference, r"readBinaryValue", r"(Ljava/io/OutputStream;)I");
+      _class.reference.pointer,
+      r"readBinaryValue",
+      r"(Ljava/io/OutputStream;)I");
 
   /// from: public int readBinaryValue(java.io.OutputStream out)
   ///
@@ -2146,12 +2239,15 @@
   int readBinaryValue(
     jni.JObject out,
   ) {
-    return jni.Jni.accessors.callMethodWithArgs(reference, _id_readBinaryValue,
-        jni.JniCallType.intType, [out.reference]).integer;
+    return jni.Jni.accessors.callMethodWithArgs(
+        reference.pointer,
+        _id_readBinaryValue,
+        jni.JniCallType.intType,
+        [out.reference.pointer]).integer;
   }
 
   static final _id_readBinaryValue1 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"readBinaryValue",
       r"(Lcom/fasterxml/jackson/core/Base64Variant;Ljava/io/OutputStream;)I");
 
@@ -2169,12 +2265,15 @@
     jni.JObject bv,
     jni.JObject out,
   ) {
-    return jni.Jni.accessors.callMethodWithArgs(reference, _id_readBinaryValue1,
-        jni.JniCallType.intType, [bv.reference, out.reference]).integer;
+    return jni.Jni.accessors.callMethodWithArgs(
+        reference.pointer,
+        _id_readBinaryValue1,
+        jni.JniCallType.intType,
+        [bv.reference.pointer, out.reference.pointer]).integer;
   }
 
   static final _id_getValueAsInt = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"getValueAsInt", r"()I");
+      .getMethodIDOf(_class.reference.pointer, r"getValueAsInt", r"()I");
 
   /// from: public int getValueAsInt()
   ///
@@ -2192,12 +2291,12 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   int getValueAsInt() {
-    return jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_getValueAsInt, jni.JniCallType.intType, []).integer;
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
+        _id_getValueAsInt, jni.JniCallType.intType, []).integer;
   }
 
   static final _id_getValueAsInt1 = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"getValueAsInt", r"(I)I");
+      .getMethodIDOf(_class.reference.pointer, r"getValueAsInt", r"(I)I");
 
   /// from: public int getValueAsInt(int def)
   ///
@@ -2217,12 +2316,15 @@
   int getValueAsInt1(
     int def,
   ) {
-    return jni.Jni.accessors.callMethodWithArgs(reference, _id_getValueAsInt1,
-        jni.JniCallType.intType, [jni.JValueInt(def)]).integer;
+    return jni.Jni.accessors.callMethodWithArgs(
+        reference.pointer,
+        _id_getValueAsInt1,
+        jni.JniCallType.intType,
+        [jni.JValueInt(def)]).integer;
   }
 
   static final _id_getValueAsLong = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"getValueAsLong", r"()J");
+      .getMethodIDOf(_class.reference.pointer, r"getValueAsLong", r"()J");
 
   /// from: public long getValueAsLong()
   ///
@@ -2240,12 +2342,12 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   int getValueAsLong() {
-    return jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_getValueAsLong, jni.JniCallType.longType, []).long;
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
+        _id_getValueAsLong, jni.JniCallType.longType, []).long;
   }
 
   static final _id_getValueAsLong1 = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"getValueAsLong", r"(J)J");
+      .getMethodIDOf(_class.reference.pointer, r"getValueAsLong", r"(J)J");
 
   /// from: public long getValueAsLong(long def)
   ///
@@ -2265,12 +2367,12 @@
   int getValueAsLong1(
     int def,
   ) {
-    return jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_getValueAsLong1, jni.JniCallType.longType, [def]).long;
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
+        _id_getValueAsLong1, jni.JniCallType.longType, [def]).long;
   }
 
   static final _id_getValueAsDouble = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"getValueAsDouble", r"()D");
+      .getMethodIDOf(_class.reference.pointer, r"getValueAsDouble", r"()D");
 
   /// from: public double getValueAsDouble()
   ///
@@ -2288,12 +2390,12 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   double getValueAsDouble() {
-    return jni.Jni.accessors.callMethodWithArgs(reference, _id_getValueAsDouble,
-        jni.JniCallType.doubleType, []).doubleFloat;
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
+        _id_getValueAsDouble, jni.JniCallType.doubleType, []).doubleFloat;
   }
 
   static final _id_getValueAsDouble1 = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"getValueAsDouble", r"(D)D");
+      .getMethodIDOf(_class.reference.pointer, r"getValueAsDouble", r"(D)D");
 
   /// from: public double getValueAsDouble(double def)
   ///
@@ -2313,12 +2415,12 @@
   double getValueAsDouble1(
     double def,
   ) {
-    return jni.Jni.accessors.callMethodWithArgs(reference,
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
         _id_getValueAsDouble1, jni.JniCallType.doubleType, [def]).doubleFloat;
   }
 
   static final _id_getValueAsBoolean = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"getValueAsBoolean", r"()Z");
+      .getMethodIDOf(_class.reference.pointer, r"getValueAsBoolean", r"()Z");
 
   /// from: public boolean getValueAsBoolean()
   ///
@@ -2336,12 +2438,12 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   bool getValueAsBoolean() {
-    return jni.Jni.accessors.callMethodWithArgs(reference,
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
         _id_getValueAsBoolean, jni.JniCallType.booleanType, []).boolean;
   }
 
   static final _id_getValueAsBoolean1 = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"getValueAsBoolean", r"(Z)Z");
+      .getMethodIDOf(_class.reference.pointer, r"getValueAsBoolean", r"(Z)Z");
 
   /// from: public boolean getValueAsBoolean(boolean def)
   ///
@@ -2362,14 +2464,14 @@
     bool def,
   ) {
     return jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_getValueAsBoolean1,
         jni.JniCallType.booleanType,
         [def ? 1 : 0]).boolean;
   }
 
   static final _id_getValueAsString = jni.Jni.accessors.getMethodIDOf(
-      _class.reference, r"getValueAsString", r"()Ljava/lang/String;");
+      _class.reference.pointer, r"getValueAsString", r"()Ljava/lang/String;");
 
   /// from: public java.lang.String getValueAsString()
   /// The returned object must be released after use, by calling the [release] method.
@@ -2387,13 +2489,13 @@
   ///@since 2.1
   jni.JString getValueAsString() {
     return const jni.JStringType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_getValueAsString,
         jni.JniCallType.objectType, []).object);
   }
 
   static final _id_getValueAsString1 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"getValueAsString",
       r"(Ljava/lang/String;)Ljava/lang/String;");
 
@@ -2416,14 +2518,14 @@
     jni.JString def,
   ) {
     return const jni.JStringType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_getValueAsString1,
         jni.JniCallType.objectType,
-        [def.reference]).object);
+        [def.reference.pointer]).object);
   }
 
   static final _id_canReadObjectId = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"canReadObjectId", r"()Z");
+      .getMethodIDOf(_class.reference.pointer, r"canReadObjectId", r"()Z");
 
   /// from: public boolean canReadObjectId()
   ///
@@ -2439,12 +2541,12 @@
   ///    {@code false} if not
   ///@since 2.3
   bool canReadObjectId() {
-    return jni.Jni.accessors.callMethodWithArgs(reference, _id_canReadObjectId,
-        jni.JniCallType.booleanType, []).boolean;
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
+        _id_canReadObjectId, jni.JniCallType.booleanType, []).boolean;
   }
 
   static final _id_canReadTypeId = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"canReadTypeId", r"()Z");
+      .getMethodIDOf(_class.reference.pointer, r"canReadTypeId", r"()Z");
 
   /// from: public boolean canReadTypeId()
   ///
@@ -2460,12 +2562,12 @@
   ///    {@code false} if not
   ///@since 2.3
   bool canReadTypeId() {
-    return jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_canReadTypeId, jni.JniCallType.booleanType, []).boolean;
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
+        _id_canReadTypeId, jni.JniCallType.booleanType, []).boolean;
   }
 
-  static final _id_getObjectId = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"getObjectId", r"()Ljava/lang/Object;");
+  static final _id_getObjectId = jni.Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"getObjectId", r"()Ljava/lang/Object;");
 
   /// from: public java.lang.Object getObjectId()
   /// The returned object must be released after use, by calling the [release] method.
@@ -2485,11 +2587,13 @@
   ///@since 2.3
   jni.JObject getObjectId() {
     return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_getObjectId, jni.JniCallType.objectType, []).object);
+        reference.pointer,
+        _id_getObjectId,
+        jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_getTypeId = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"getTypeId", r"()Ljava/lang/Object;");
+  static final _id_getTypeId = jni.Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"getTypeId", r"()Ljava/lang/Object;");
 
   /// from: public java.lang.Object getTypeId()
   /// The returned object must be released after use, by calling the [release] method.
@@ -2509,11 +2613,13 @@
   ///@since 2.3
   jni.JObject getTypeId() {
     return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_getTypeId, jni.JniCallType.objectType, []).object);
+        reference.pointer,
+        _id_getTypeId,
+        jni.JniCallType.objectType, []).object);
   }
 
   static final _id_readValueAs = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"readValueAs",
       r"(Ljava/lang/Class;)Ljava/lang/Object;");
 
@@ -2550,14 +2656,14 @@
     required jni.JObjType<$T> T,
   }) {
     return T.fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_readValueAs,
         jni.JniCallType.objectType,
-        [valueType.reference]).object);
+        [valueType.reference.pointer]).object);
   }
 
   static final _id_readValueAs1 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"readValueAs",
       r"(Lcom/fasterxml/jackson/core/type/TypeReference;)Ljava/lang/Object;");
 
@@ -2591,14 +2697,14 @@
     required jni.JObjType<$T> T,
   }) {
     return T.fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_readValueAs1,
         jni.JniCallType.objectType,
-        [valueTypeRef.reference]).object);
+        [valueTypeRef.reference.pointer]).object);
   }
 
   static final _id_readValuesAs = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"readValuesAs",
       r"(Ljava/lang/Class;)Ljava/util/Iterator;");
 
@@ -2618,14 +2724,14 @@
     required jni.JObjType<$T> T,
   }) {
     return jni.JIteratorType(T).fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_readValuesAs,
         jni.JniCallType.objectType,
-        [valueType.reference]).object);
+        [valueType.reference.pointer]).object);
   }
 
   static final _id_readValuesAs1 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"readValuesAs",
       r"(Lcom/fasterxml/jackson/core/type/TypeReference;)Ljava/util/Iterator;");
 
@@ -2645,14 +2751,14 @@
     required jni.JObjType<$T> T,
   }) {
     return jni.JIteratorType(T).fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_readValuesAs1,
         jni.JniCallType.objectType,
-        [valueTypeRef.reference]).object);
+        [valueTypeRef.reference.pointer]).object);
   }
 
   static final _id_readValueAsTree = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"readValueAsTree",
       r"()Lcom/fasterxml/jackson/core/TreeNode;");
 
@@ -2671,8 +2777,8 @@
   $T readValueAsTree<$T extends jni.JObject>({
     required jni.JObjType<$T> T,
   }) {
-    return T.fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_readValueAsTree, jni.JniCallType.objectType, []).object);
+    return T.fromRef(jni.Jni.accessors.callMethodWithArgs(reference.pointer,
+        _id_readValueAsTree, jni.JniCallType.objectType, []).object);
   }
 }
 
diff --git a/pkgs/jnigen/test/jackson_core_test/third_party/dart_only/dart_bindings/com/fasterxml/jackson/core/JsonToken.dart b/pkgs/jnigen/test/jackson_core_test/third_party/dart_only/dart_bindings/com/fasterxml/jackson/core/JsonToken.dart
index 4e67a2d..565278c 100644
--- a/pkgs/jnigen/test/jackson_core_test/third_party/dart_only/dart_bindings/com/fasterxml/jackson/core/JsonToken.dart
+++ b/pkgs/jnigen/test/jackson_core_test/third_party/dart_only/dart_bindings/com/fasterxml/jackson/core/JsonToken.dart
@@ -57,7 +57,7 @@
   /// The type which includes information such as the signature of this class.
   static const type = $JsonTokenType();
   static final _id_values = jni.Jni.accessors.getStaticMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"values",
       r"()[Lcom/fasterxml/jackson/core/JsonToken;");
 
@@ -65,12 +65,12 @@
   /// The returned object must be released after use, by calling the [release] method.
   static jni.JArray<JsonToken> values() {
     return const jni.JArrayType($JsonTokenType()).fromRef(jni.Jni.accessors
-        .callStaticMethodWithArgs(_class.reference, _id_values,
+        .callStaticMethodWithArgs(_class.reference.pointer, _id_values,
             jni.JniCallType.objectType, []).object);
   }
 
   static final _id_valueOf = jni.Jni.accessors.getStaticMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"valueOf",
       r"(Ljava/lang/String;)Lcom/fasterxml/jackson/core/JsonToken;");
 
@@ -80,65 +80,67 @@
     jni.JString name,
   ) {
     return const $JsonTokenType().fromRef(jni.Jni.accessors
-        .callStaticMethodWithArgs(_class.reference, _id_valueOf,
-            jni.JniCallType.objectType, [name.reference]).object);
+        .callStaticMethodWithArgs(_class.reference.pointer, _id_valueOf,
+            jni.JniCallType.objectType, [name.reference.pointer]).object);
   }
 
   static final _id_id =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"id", r"()I");
+      jni.Jni.accessors.getMethodIDOf(_class.reference.pointer, r"id", r"()I");
 
   /// from: public final int id()
   int id() {
     return jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_id, jni.JniCallType.intType, []).integer;
+        reference.pointer, _id_id, jni.JniCallType.intType, []).integer;
   }
 
-  static final _id_asString = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"asString", r"()Ljava/lang/String;");
+  static final _id_asString = jni.Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"asString", r"()Ljava/lang/String;");
 
   /// from: public final java.lang.String asString()
   /// The returned object must be released after use, by calling the [release] method.
   jni.JString asString() {
     return const jni.JStringType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_asString, jni.JniCallType.objectType, []).object);
+        reference.pointer,
+        _id_asString,
+        jni.JniCallType.objectType, []).object);
   }
 
   static final _id_asCharArray = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"asCharArray", r"()[C");
+      .getMethodIDOf(_class.reference.pointer, r"asCharArray", r"()[C");
 
   /// from: public final char[] asCharArray()
   /// The returned object must be released after use, by calling the [release] method.
   jni.JArray<jni.jchar> asCharArray() {
     return const jni.JArrayType(jni.jcharType()).fromRef(jni.Jni.accessors
-        .callMethodWithArgs(
-            reference, _id_asCharArray, jni.JniCallType.objectType, []).object);
+        .callMethodWithArgs(reference.pointer, _id_asCharArray,
+            jni.JniCallType.objectType, []).object);
   }
 
   static final _id_asByteArray = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"asByteArray", r"()[B");
+      .getMethodIDOf(_class.reference.pointer, r"asByteArray", r"()[B");
 
   /// from: public final byte[] asByteArray()
   /// The returned object must be released after use, by calling the [release] method.
   jni.JArray<jni.jbyte> asByteArray() {
     return const jni.JArrayType(jni.jbyteType()).fromRef(jni.Jni.accessors
-        .callMethodWithArgs(
-            reference, _id_asByteArray, jni.JniCallType.objectType, []).object);
+        .callMethodWithArgs(reference.pointer, _id_asByteArray,
+            jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_isNumeric =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"isNumeric", r"()Z");
+  static final _id_isNumeric = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"isNumeric", r"()Z");
 
   /// from: public final boolean isNumeric()
   ///
   /// @return {@code True} if this token is {@code VALUE_NUMBER_INT} or {@code VALUE_NUMBER_FLOAT},
   ///   {@code false} otherwise
   bool isNumeric() {
-    return jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_isNumeric, jni.JniCallType.booleanType, []).boolean;
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
+        _id_isNumeric, jni.JniCallType.booleanType, []).boolean;
   }
 
   static final _id_isStructStart = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"isStructStart", r"()Z");
+      .getMethodIDOf(_class.reference.pointer, r"isStructStart", r"()Z");
 
   /// from: public final boolean isStructStart()
   ///
@@ -150,12 +152,12 @@
   ///   {@code false} otherwise
   ///@since 2.3
   bool isStructStart() {
-    return jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_isStructStart, jni.JniCallType.booleanType, []).boolean;
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
+        _id_isStructStart, jni.JniCallType.booleanType, []).boolean;
   }
 
-  static final _id_isStructEnd =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"isStructEnd", r"()Z");
+  static final _id_isStructEnd = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"isStructEnd", r"()Z");
 
   /// from: public final boolean isStructEnd()
   ///
@@ -167,12 +169,12 @@
   ///   {@code false} otherwise
   ///@since 2.3
   bool isStructEnd() {
-    return jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_isStructEnd, jni.JniCallType.booleanType, []).boolean;
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
+        _id_isStructEnd, jni.JniCallType.booleanType, []).boolean;
   }
 
   static final _id_isScalarValue = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"isScalarValue", r"()Z");
+      .getMethodIDOf(_class.reference.pointer, r"isScalarValue", r"()Z");
 
   /// from: public final boolean isScalarValue()
   ///
@@ -183,20 +185,20 @@
   ///@return {@code True} if this token is a scalar value token (one of
   ///   {@code VALUE_xxx} tokens), {@code false} otherwise
   bool isScalarValue() {
-    return jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_isScalarValue, jni.JniCallType.booleanType, []).boolean;
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
+        _id_isScalarValue, jni.JniCallType.booleanType, []).boolean;
   }
 
-  static final _id_isBoolean =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"isBoolean", r"()Z");
+  static final _id_isBoolean = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"isBoolean", r"()Z");
 
   /// from: public final boolean isBoolean()
   ///
   /// @return {@code True} if this token is {@code VALUE_TRUE} or {@code VALUE_FALSE},
   ///   {@code false} otherwise
   bool isBoolean() {
-    return jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_isBoolean, jni.JniCallType.booleanType, []).boolean;
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
+        _id_isBoolean, jni.JniCallType.booleanType, []).boolean;
   }
 }
 
diff --git a/pkgs/jnigen/test/kotlin_test/c_based/dart_bindings/kotlin.dart b/pkgs/jnigen/test/kotlin_test/c_based/dart_bindings/kotlin.dart
index e96d08c..68af05b 100644
--- a/pkgs/jnigen/test/kotlin_test/c_based/dart_bindings/kotlin.dart
+++ b/pkgs/jnigen/test/kotlin_test/c_based/dart_bindings/kotlin.dart
@@ -66,9 +66,9 @@
     final $p = ReceivePort();
     final $c =
         jni.JObject.fromRef(ProtectedJniExtensions.newPortContinuation($p));
-    _sayHello(reference, $c.reference).object;
+    _sayHello(reference.pointer, $c.reference.pointer).object;
     final $o = jni.JObjectPtr.fromAddress(await $p.first);
-    final $k = const jni.JStringType().getClass().reference;
+    final $k = const jni.JStringType().getClass().reference.pointer;
     if (!jni.Jni.env.IsInstanceOf($o, $k)) {
       throw "Failed";
     }
@@ -93,9 +93,11 @@
     final $p = ReceivePort();
     final $c =
         jni.JObject.fromRef(ProtectedJniExtensions.newPortContinuation($p));
-    _sayHello1(reference, string.reference, $c.reference).object;
+    _sayHello1(
+            reference.pointer, string.reference.pointer, $c.reference.pointer)
+        .object;
     final $o = jni.JObjectPtr.fromAddress(await $p.first);
-    final $k = const jni.JStringType().getClass().reference;
+    final $k = const jni.JStringType().getClass().reference.pointer;
     if (!jni.Jni.env.IsInstanceOf($o, $k)) {
       throw "Failed";
     }
diff --git a/pkgs/jnigen/test/kotlin_test/dart_only/dart_bindings/kotlin.dart b/pkgs/jnigen/test/kotlin_test/dart_only/dart_bindings/kotlin.dart
index b3a1985..b6c85ae 100644
--- a/pkgs/jnigen/test/kotlin_test/dart_only/dart_bindings/kotlin.dart
+++ b/pkgs/jnigen/test/kotlin_test/dart_only/dart_bindings/kotlin.dart
@@ -40,18 +40,20 @@
 
   /// The type which includes information such as the signature of this class.
   static const type = $SuspendFunType();
-  static final _id_new0 =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"()V");
+  static final _id_new0 = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"<init>", r"()V");
 
   /// from: public void <init>()
   /// The returned object must be released after use, by calling the [release] method.
   factory SuspendFun() {
     return SuspendFun.fromRef(jni.Jni.accessors
-        .newObjectWithArgs(_class.reference, _id_new0, []).object);
+        .newObjectWithArgs(_class.reference.pointer, _id_new0, []).object);
   }
 
-  static final _id_sayHello = jni.Jni.accessors.getMethodIDOf(_class.reference,
-      r"sayHello", r"(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;");
+  static final _id_sayHello = jni.Jni.accessors.getMethodIDOf(
+      _class.reference.pointer,
+      r"sayHello",
+      r"(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;");
 
   /// from: public final java.lang.Object sayHello(kotlin.coroutines.Continuation continuation)
   /// The returned object must be released after use, by calling the [release] method.
@@ -59,10 +61,10 @@
     final $p = ReceivePort();
     final $c =
         jni.JObject.fromRef(ProtectedJniExtensions.newPortContinuation($p));
-    jni.Jni.accessors.callMethodWithArgs(reference, _id_sayHello,
-        jni.JniCallType.objectType, [$c.reference]).object;
+    jni.Jni.accessors.callMethodWithArgs(reference.pointer, _id_sayHello,
+        jni.JniCallType.objectType, [$c.reference.pointer]).object;
     final $o = jni.JObjectPtr.fromAddress(await $p.first);
-    final $k = const jni.JStringType().getClass().reference;
+    final $k = const jni.JStringType().getClass().reference.pointer;
     if (!jni.Jni.env.IsInstanceOf($o, $k)) {
       throw "Failed";
     }
@@ -70,7 +72,7 @@
   }
 
   static final _id_sayHello1 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"sayHello",
       r"(Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;");
 
@@ -82,10 +84,13 @@
     final $p = ReceivePort();
     final $c =
         jni.JObject.fromRef(ProtectedJniExtensions.newPortContinuation($p));
-    jni.Jni.accessors.callMethodWithArgs(reference, _id_sayHello1,
-        jni.JniCallType.objectType, [string.reference, $c.reference]).object;
+    jni.Jni.accessors.callMethodWithArgs(
+        reference.pointer,
+        _id_sayHello1,
+        jni.JniCallType.objectType,
+        [string.reference.pointer, $c.reference.pointer]).object;
     final $o = jni.JObjectPtr.fromAddress(await $p.first);
-    final $k = const jni.JStringType().getClass().reference;
+    final $k = const jni.JStringType().getClass().reference.pointer;
     if (!jni.Jni.env.IsInstanceOf($o, $k)) {
       throw "Failed";
     }
diff --git a/pkgs/jnigen/test/simple_package_test/c_based/dart_bindings/simple_package.dart b/pkgs/jnigen/test/simple_package_test/c_based/dart_bindings/simple_package.dart
index bf4ecbf..e7f7b9c 100644
--- a/pkgs/jnigen/test/simple_package_test/c_based/dart_bindings/simple_package.dart
+++ b/pkgs/jnigen/test/simple_package_test/c_based/dart_bindings/simple_package.dart
@@ -129,7 +129,7 @@
 
   /// from: public void usesAnonymousInnerClass()
   void usesAnonymousInnerClass() {
-    return _usesAnonymousInnerClass(reference).check();
+    return _usesAnonymousInnerClass(reference.pointer).check();
   }
 
   static final _getValue = jniLookup<
@@ -140,7 +140,7 @@
 
   /// from: public boolean getValue()
   bool getValue() {
-    return _getValue(reference).boolean;
+    return _getValue(reference.pointer).boolean;
   }
 
   static final _setValue = jniLookup<
@@ -153,7 +153,7 @@
   void setValue(
     bool value,
   ) {
-    return _setValue(reference, value ? 1 : 0).check();
+    return _setValue(reference.pointer, value ? 1 : 0).check();
   }
 }
 
@@ -211,10 +211,10 @@
       .asFunction<jni.JniResult Function(jni.JObjectPtr, int)>();
 
   /// from: public boolean ok
-  bool get ok => _get_ok(reference).boolean;
+  bool get ok => _get_ok(reference.pointer).boolean;
 
   /// from: public boolean ok
-  set ok(bool value) => _set_ok(reference, value ? 1 : 0).check();
+  set ok(bool value) => _set_ok(reference.pointer, value ? 1 : 0).check();
 
   static final _new0 = jniLookup<
               ffi
@@ -227,7 +227,8 @@
   factory Example_NonStaticNested(
     Example $parent,
   ) {
-    return Example_NonStaticNested.fromRef(_new0($parent.reference).object);
+    return Example_NonStaticNested.fromRef(
+        _new0($parent.reference.pointer).object);
   }
 }
 
@@ -321,13 +322,13 @@
 
   /// from: protected java.util.Random protectedField
   /// The returned object must be released after use, by calling the [release] method.
-  jni.JObject get protectedField =>
-      const jni.JObjectType().fromRef(_get_protectedField(reference).object);
+  jni.JObject get protectedField => const jni.JObjectType()
+      .fromRef(_get_protectedField(reference.pointer).object);
 
   /// from: protected java.util.Random protectedField
   /// The returned object must be released after use, by calling the [release] method.
   set protectedField(jni.JObject value) =>
-      _set_protectedField(reference, value.reference).check();
+      _set_protectedField(reference.pointer, value.reference.pointer).check();
 
   static final _getAmount =
       jniLookup<ffi.NativeFunction<jni.JniResult Function()>>(
@@ -402,7 +403,7 @@
   static void setName(
     jni.JString newName,
   ) {
-    return _setName(newName.reference).check();
+    return _setName(newName.reference.pointer).check();
   }
 
   static final _setNestedInstance = jniLookup<
@@ -415,7 +416,7 @@
   static void setNestedInstance(
     Example_Nested newNested,
   ) {
-    return _setNestedInstance(newNested.reference).check();
+    return _setNestedInstance(newNested.reference.pointer).check();
   }
 
   static final _max4 = jniLookup<
@@ -463,7 +464,7 @@
 
   /// from: public int getNumber()
   int getNumber() {
-    return _getNumber(reference).integer;
+    return _getNumber(reference.pointer).integer;
   }
 
   static final _setNumber = jniLookup<
@@ -476,7 +477,7 @@
   void setNumber(
     int number,
   ) {
-    return _setNumber(reference, number).check();
+    return _setNumber(reference.pointer, number).check();
   }
 
   static final _getIsUp = jniLookup<
@@ -487,7 +488,7 @@
 
   /// from: public boolean getIsUp()
   bool getIsUp() {
-    return _getIsUp(reference).boolean;
+    return _getIsUp(reference.pointer).boolean;
   }
 
   static final _setUp = jniLookup<
@@ -500,7 +501,7 @@
   void setUp(
     bool isUp,
   ) {
-    return _setUp(reference, isUp ? 1 : 0).check();
+    return _setUp(reference.pointer, isUp ? 1 : 0).check();
   }
 
   static final _getCodename = jniLookup<
@@ -512,7 +513,8 @@
   /// from: public java.lang.String getCodename()
   /// The returned object must be released after use, by calling the [release] method.
   jni.JString getCodename() {
-    return const jni.JStringType().fromRef(_getCodename(reference).object);
+    return const jni.JStringType()
+        .fromRef(_getCodename(reference.pointer).object);
   }
 
   static final _setCodename = jniLookup<
@@ -527,7 +529,7 @@
   void setCodename(
     jni.JString codename,
   ) {
-    return _setCodename(reference, codename.reference).check();
+    return _setCodename(reference.pointer, codename.reference.pointer).check();
   }
 
   static final _getRandom = jniLookup<
@@ -539,7 +541,8 @@
   /// from: public java.util.Random getRandom()
   /// The returned object must be released after use, by calling the [release] method.
   jni.JObject getRandom() {
-    return const jni.JObjectType().fromRef(_getRandom(reference).object);
+    return const jni.JObjectType()
+        .fromRef(_getRandom(reference.pointer).object);
   }
 
   static final _setRandom = jniLookup<
@@ -554,7 +557,7 @@
   void setRandom(
     jni.JObject random,
   ) {
-    return _setRandom(reference, random.reference).check();
+    return _setRandom(reference.pointer, random.reference.pointer).check();
   }
 
   static final _getRandomLong = jniLookup<
@@ -565,7 +568,7 @@
 
   /// from: public long getRandomLong()
   int getRandomLong() {
-    return _getRandomLong(reference).long;
+    return _getRandomLong(reference.pointer).long;
   }
 
   static final _add4Longs = jniLookup<
@@ -582,7 +585,7 @@
     int c,
     int d,
   ) {
-    return _add4Longs(reference, a, b, c, d).long;
+    return _add4Longs(reference.pointer, a, b, c, d).long;
   }
 
   static final _add8Longs = jniLookup<
@@ -612,7 +615,7 @@
     int g,
     int h,
   ) {
-    return _add8Longs(reference, a, b, c, d, e, f, g, h).long;
+    return _add8Longs(reference.pointer, a, b, c, d, e, f, g, h).long;
   }
 
   static final _getRandomNumericString = jniLookup<
@@ -628,8 +631,9 @@
   jni.JString getRandomNumericString(
     jni.JObject random,
   ) {
-    return const jni.JStringType()
-        .fromRef(_getRandomNumericString(reference, random.reference).object);
+    return const jni.JStringType().fromRef(
+        _getRandomNumericString(reference.pointer, random.reference.pointer)
+            .object);
   }
 
   static final _protectedMethod = jniLookup<
@@ -647,7 +651,9 @@
     jni.JString a,
     jni.JString b,
   ) {
-    return _protectedMethod(reference, a.reference, b.reference).check();
+    return _protectedMethod(
+            reference.pointer, a.reference.pointer, b.reference.pointer)
+        .check();
   }
 
   static final _finalMethod = jniLookup<
@@ -658,7 +664,7 @@
 
   /// from: public final void finalMethod()
   void finalMethod() {
-    return _finalMethod(reference).check();
+    return _finalMethod(reference.pointer).check();
   }
 
   static final _getList = jniLookup<
@@ -671,7 +677,7 @@
   /// The returned object must be released after use, by calling the [release] method.
   jni.JList<jni.JString> getList() {
     return const jni.JListType(jni.JStringType())
-        .fromRef(_getList(reference).object);
+        .fromRef(_getList(reference.pointer).object);
   }
 
   static final _joinStrings = jniLookup<
@@ -692,8 +698,9 @@
     jni.JList<jni.JString> values,
     jni.JString delim,
   ) {
-    return const jni.JStringType().fromRef(
-        _joinStrings(reference, values.reference, delim.reference).object);
+    return const jni.JStringType().fromRef(_joinStrings(reference.pointer,
+            values.reference.pointer, delim.reference.pointer)
+        .object);
   }
 
   static final _methodWithSeveralParams = jniLookup<
@@ -730,8 +737,14 @@
       (lt.$type as jni.JListType).E,
       t.$type,
     ]) as jni.JObjType<$T>;
-    return _methodWithSeveralParams(reference, ch, s.reference, a.reference,
-            t.reference, lt.reference, wm.reference)
+    return _methodWithSeveralParams(
+            reference.pointer,
+            ch,
+            s.reference.pointer,
+            a.reference.pointer,
+            t.reference.pointer,
+            lt.reference.pointer,
+            wm.reference.pointer)
         .check();
   }
 
@@ -786,7 +799,7 @@
     jni.JString codename,
   ) {
     return Example.fromRef(
-        _new3(number, isUp ? 1 : 0, codename.reference).object);
+        _new3(number, isUp ? 1 : 0, codename.reference.pointer).object);
   }
 
   static final _new4 = jniLookup<
@@ -819,7 +832,7 @@
 
   /// from: public int whichExample()
   int whichExample() {
-    return _whichExample(reference).integer;
+    return _whichExample(reference.pointer).integer;
   }
 
   static final _addInts = jniLookup<
@@ -854,7 +867,7 @@
   static int addAll(
     jni.JArray<jni.jint> arr,
   ) {
-    return _addAll(arr.reference).integer;
+    return _addAll(arr.reference.pointer).integer;
   }
 
   static final _getSelf = jniLookup<
@@ -866,7 +879,7 @@
   /// from: public com.github.dart_lang.jnigen.simple_package.Example getSelf()
   /// The returned object must be released after use, by calling the [release] method.
   Example getSelf() {
-    return const $ExampleType().fromRef(_getSelf(reference).object);
+    return const $ExampleType().fromRef(_getSelf(reference.pointer).object);
   }
 
   static final _throwException =
@@ -887,7 +900,7 @@
 
   /// from: public void overloaded()
   void overloaded() {
-    return _overloaded(reference).check();
+    return _overloaded(reference.pointer).check();
   }
 
   static final _overloaded1 = jniLookup<
@@ -903,7 +916,7 @@
     int a,
     jni.JString b,
   ) {
-    return _overloaded1(reference, a, b.reference).check();
+    return _overloaded1(reference.pointer, a, b.reference.pointer).check();
   }
 
   static final _overloaded2 = jniLookup<
@@ -916,7 +929,7 @@
   void overloaded2(
     int a,
   ) {
-    return _overloaded2(reference, a).check();
+    return _overloaded2(reference.pointer, a).check();
   }
 
   static final _overloaded3 = jniLookup<
@@ -934,7 +947,9 @@
     jni.JList<jni.JInteger> a,
     jni.JString b,
   ) {
-    return _overloaded3(reference, a.reference, b.reference).check();
+    return _overloaded3(
+            reference.pointer, a.reference.pointer, b.reference.pointer)
+        .check();
   }
 
   static final _overloaded4 = jniLookup<
@@ -949,7 +964,7 @@
   void overloaded4(
     jni.JList<jni.JInteger> a,
   ) {
-    return _overloaded4(reference, a.reference).check();
+    return _overloaded4(reference.pointer, a.reference.pointer).check();
   }
 }
 
@@ -1069,7 +1084,7 @@
 
   /// from: public int whichExample()
   int whichExample() {
-    return _whichExample(reference).integer;
+    return _whichExample(reference.pointer).integer;
   }
 }
 
@@ -1149,12 +1164,13 @@
 
   /// from: public T grandParentValue
   /// The returned object must be released after use, by calling the [release] method.
-  $T get grandParentValue => T.fromRef(_get_grandParentValue(reference).object);
+  $T get grandParentValue =>
+      T.fromRef(_get_grandParentValue(reference.pointer).object);
 
   /// from: public T grandParentValue
   /// The returned object must be released after use, by calling the [release] method.
   set grandParentValue($T value) =>
-      _set_grandParentValue(reference, value.reference).check();
+      _set_grandParentValue(reference.pointer, value.reference.pointer).check();
 
   static final _get_parentValue = jniLookup<
           ffi.NativeFunction<
@@ -1176,12 +1192,12 @@
 
   /// from: public S parentValue
   /// The returned object must be released after use, by calling the [release] method.
-  $S get parentValue => S.fromRef(_get_parentValue(reference).object);
+  $S get parentValue => S.fromRef(_get_parentValue(reference.pointer).object);
 
   /// from: public S parentValue
   /// The returned object must be released after use, by calling the [release] method.
   set parentValue($S value) =>
-      _set_parentValue(reference, value.reference).check();
+      _set_parentValue(reference.pointer, value.reference.pointer).check();
 
   static final _get_value = jniLookup<
           ffi.NativeFunction<
@@ -1203,11 +1219,12 @@
 
   /// from: public U value
   /// The returned object must be released after use, by calling the [release] method.
-  $U get value => U.fromRef(_get_value(reference).object);
+  $U get value => U.fromRef(_get_value(reference.pointer).object);
 
   /// from: public U value
   /// The returned object must be released after use, by calling the [release] method.
-  set value($U value) => _set_value(reference, value.reference).check();
+  set value($U value) =>
+      _set_value(reference.pointer, value.reference.pointer).check();
 
   static final _new0 = jniLookup<
           ffi.NativeFunction<
@@ -1235,8 +1252,8 @@
     U ??= jni.lowestCommonSuperType([
       newValue.$type,
     ]) as jni.JObjType<$U>;
-    return GrandParent_Parent_Child.fromRef(
-        T, S, U, _new0($parent.reference, newValue.reference).object);
+    return GrandParent_Parent_Child.fromRef(T, S, U,
+        _new0($parent.reference.pointer, newValue.reference.pointer).object);
   }
 }
 
@@ -1327,12 +1344,12 @@
 
   /// from: public T parentValue
   /// The returned object must be released after use, by calling the [release] method.
-  $T get parentValue => T.fromRef(_get_parentValue(reference).object);
+  $T get parentValue => T.fromRef(_get_parentValue(reference.pointer).object);
 
   /// from: public T parentValue
   /// The returned object must be released after use, by calling the [release] method.
   set parentValue($T value) =>
-      _set_parentValue(reference, value.reference).check();
+      _set_parentValue(reference.pointer, value.reference.pointer).check();
 
   static final _get_value = jniLookup<
           ffi.NativeFunction<
@@ -1353,11 +1370,12 @@
 
   /// from: public S value
   /// The returned object must be released after use, by calling the [release] method.
-  $S get value => S.fromRef(_get_value(reference).object);
+  $S get value => S.fromRef(_get_value(reference.pointer).object);
 
   /// from: public S value
   /// The returned object must be released after use, by calling the [release] method.
-  set value($S value) => _set_value(reference, value.reference).check();
+  set value($S value) =>
+      _set_value(reference.pointer, value.reference.pointer).check();
 
   static final _new0 = jniLookup<
           ffi.NativeFunction<
@@ -1381,8 +1399,8 @@
     S ??= jni.lowestCommonSuperType([
       newValue.$type,
     ]) as jni.JObjType<$S>;
-    return GrandParent_Parent.fromRef(
-        T, S, _new0($parent.reference, newValue.reference).object);
+    return GrandParent_Parent.fromRef(T, S,
+        _new0($parent.reference.pointer, newValue.reference.pointer).object);
   }
 }
 
@@ -1470,12 +1488,12 @@
 
   /// from: public S parentValue
   /// The returned object must be released after use, by calling the [release] method.
-  $S get parentValue => S.fromRef(_get_parentValue(reference).object);
+  $S get parentValue => S.fromRef(_get_parentValue(reference.pointer).object);
 
   /// from: public S parentValue
   /// The returned object must be released after use, by calling the [release] method.
   set parentValue($S value) =>
-      _set_parentValue(reference, value.reference).check();
+      _set_parentValue(reference.pointer, value.reference.pointer).check();
 
   static final _get_value = jniLookup<
           ffi.NativeFunction<
@@ -1497,11 +1515,12 @@
 
   /// from: public U value
   /// The returned object must be released after use, by calling the [release] method.
-  $U get value => U.fromRef(_get_value(reference).object);
+  $U get value => U.fromRef(_get_value(reference.pointer).object);
 
   /// from: public U value
   /// The returned object must be released after use, by calling the [release] method.
-  set value($U value) => _set_value(reference, value.reference).check();
+  set value($U value) =>
+      _set_value(reference.pointer, value.reference.pointer).check();
 
   static final _new0 = jniLookup<
               ffi.NativeFunction<
@@ -1531,7 +1550,8 @@
     return GrandParent_StaticParent_Child.fromRef(
         S,
         U,
-        _new0($parent.reference, parentValue.reference, value.reference)
+        _new0($parent.reference.pointer, parentValue.reference.pointer,
+                value.reference.pointer)
             .object);
   }
 }
@@ -1614,11 +1634,12 @@
 
   /// from: public S value
   /// The returned object must be released after use, by calling the [release] method.
-  $S get value => S.fromRef(_get_value(reference).object);
+  $S get value => S.fromRef(_get_value(reference.pointer).object);
 
   /// from: public S value
   /// The returned object must be released after use, by calling the [release] method.
-  set value($S value) => _set_value(reference, value.reference).check();
+  set value($S value) =>
+      _set_value(reference.pointer, value.reference.pointer).check();
 
   static final _new0 = jniLookup<
               ffi
@@ -1635,7 +1656,8 @@
     S ??= jni.lowestCommonSuperType([
       value.$type,
     ]) as jni.JObjType<$S>;
-    return GrandParent_StaticParent.fromRef(S, _new0(value.reference).object);
+    return GrandParent_StaticParent.fromRef(
+        S, _new0(value.reference.pointer).object);
   }
 }
 
@@ -1712,11 +1734,12 @@
 
   /// from: public T value
   /// The returned object must be released after use, by calling the [release] method.
-  $T get value => T.fromRef(_get_value(reference).object);
+  $T get value => T.fromRef(_get_value(reference.pointer).object);
 
   /// from: public T value
   /// The returned object must be released after use, by calling the [release] method.
-  set value($T value) => _set_value(reference, value.reference).check();
+  set value($T value) =>
+      _set_value(reference.pointer, value.reference.pointer).check();
 
   static final _new0 = jniLookup<
               ffi
@@ -1733,7 +1756,7 @@
     T ??= jni.lowestCommonSuperType([
       value.$type,
     ]) as jni.JObjType<$T>;
-    return GrandParent.fromRef(T, _new0(value.reference).object);
+    return GrandParent.fromRef(T, _new0(value.reference.pointer).object);
   }
 
   static final _stringParent = jniLookup<
@@ -1746,7 +1769,7 @@
   /// The returned object must be released after use, by calling the [release] method.
   GrandParent_Parent<jni.JObject, jni.JString> stringParent() {
     return const $GrandParent_ParentType(jni.JObjectType(), jni.JStringType())
-        .fromRef(_stringParent(reference).object);
+        .fromRef(_stringParent(reference.pointer).object);
   }
 
   static final _varParent = jniLookup<
@@ -1766,8 +1789,8 @@
     S ??= jni.lowestCommonSuperType([
       nestedValue.$type,
     ]) as jni.JObjType<$S>;
-    return $GrandParent_ParentType(const jni.JObjectType(), S)
-        .fromRef(_varParent(reference, nestedValue.reference).object);
+    return $GrandParent_ParentType(const jni.JObjectType(), S).fromRef(
+        _varParent(reference.pointer, nestedValue.reference.pointer).object);
   }
 
   static final _stringStaticParent =
@@ -1798,7 +1821,7 @@
       value.$type,
     ]) as jni.JObjType<$S>;
     return $GrandParent_StaticParentType(S)
-        .fromRef(_varStaticParent(value.reference).object);
+        .fromRef(_varStaticParent(value.reference.pointer).object);
   }
 
   static final _staticParentWithSameType = jniLookup<
@@ -1811,7 +1834,7 @@
   /// The returned object must be released after use, by calling the [release] method.
   GrandParent_StaticParent<$T> staticParentWithSameType() {
     return $GrandParent_StaticParentType(T)
-        .fromRef(_staticParentWithSameType(reference).object);
+        .fromRef(_staticParentWithSameType(reference.pointer).object);
   }
 }
 
@@ -1892,11 +1915,12 @@
 
   /// from: public K key
   /// The returned object must be released after use, by calling the [release] method.
-  $K get key => K.fromRef(_get_key(reference).object);
+  $K get key => K.fromRef(_get_key(reference.pointer).object);
 
   /// from: public K key
   /// The returned object must be released after use, by calling the [release] method.
-  set key($K value) => _set_key(reference, value.reference).check();
+  set key($K value) =>
+      _set_key(reference.pointer, value.reference.pointer).check();
 
   static final _get_value = jniLookup<
           ffi.NativeFunction<
@@ -1917,11 +1941,12 @@
 
   /// from: public V value
   /// The returned object must be released after use, by calling the [release] method.
-  $V get value => V.fromRef(_get_value(reference).object);
+  $V get value => V.fromRef(_get_value(reference.pointer).object);
 
   /// from: public V value
   /// The returned object must be released after use, by calling the [release] method.
-  set value($V value) => _set_value(reference, value.reference).check();
+  set value($V value) =>
+      _set_value(reference.pointer, value.reference.pointer).check();
 
   static final _new0 = jniLookup<
           ffi.NativeFunction<
@@ -1951,7 +1976,11 @@
       ($parent.$type as $MyMapType).V,
     ]) as jni.JObjType<$V>;
     return MyMap_MyEntry.fromRef(
-        K, V, _new0($parent.reference, key.reference, value.reference).object);
+        K,
+        V,
+        _new0($parent.reference.pointer, key.reference.pointer,
+                value.reference.pointer)
+            .object);
   }
 }
 
@@ -2044,7 +2073,7 @@
   $V get0(
     $K key,
   ) {
-    return V.fromRef(_get0(reference, key.reference).object);
+    return V.fromRef(_get0(reference.pointer, key.reference.pointer).object);
   }
 
   static final _put = jniLookup<
@@ -2061,7 +2090,9 @@
     $K key,
     $V value,
   ) {
-    return V.fromRef(_put(reference, key.reference, value.reference).object);
+    return V.fromRef(
+        _put(reference.pointer, key.reference.pointer, value.reference.pointer)
+            .object);
   }
 
   static final _entryStack = jniLookup<
@@ -2075,7 +2106,7 @@
   MyStack<MyMap_MyEntry<jni.JObject, jni.JObject>> entryStack() {
     return const $MyStackType(
             $MyMap_MyEntryType(jni.JObjectType(), jni.JObjectType()))
-        .fromRef(_entryStack(reference).object);
+        .fromRef(_entryStack(reference.pointer).object);
   }
 }
 
@@ -2161,7 +2192,7 @@
     T ??= jni.lowestCommonSuperType([
       ((arr.$type as jni.JArrayType).elementType as jni.JObjType),
     ]) as jni.JObjType<$T>;
-    return $MyStackType(T).fromRef(_fromArray(arr.reference).object);
+    return $MyStackType(T).fromRef(_fromArray(arr.reference.pointer).object);
   }
 
   static final _fromArrayOfArrayOfGrandParents = jniLookup<
@@ -2183,7 +2214,7 @@
           .T,
     ]) as jni.JObjType<$S>;
     return $MyStackType(S)
-        .fromRef(_fromArrayOfArrayOfGrandParents(arr.reference).object);
+        .fromRef(_fromArrayOfArrayOfGrandParents(arr.reference.pointer).object);
   }
 
   static final _of =
@@ -2212,7 +2243,7 @@
     T ??= jni.lowestCommonSuperType([
       obj.$type,
     ]) as jni.JObjType<$T>;
-    return $MyStackType(T).fromRef(_of1(obj.reference).object);
+    return $MyStackType(T).fromRef(_of1(obj.reference.pointer).object);
   }
 
   static final _of2 = jniLookup<
@@ -2234,7 +2265,8 @@
       obj2.$type,
       obj.$type,
     ]) as jni.JObjType<$T>;
-    return $MyStackType(T).fromRef(_of2(obj.reference, obj2.reference).object);
+    return $MyStackType(T)
+        .fromRef(_of2(obj.reference.pointer, obj2.reference.pointer).object);
   }
 
   static final _push = jniLookup<
@@ -2249,7 +2281,7 @@
   void push(
     $T item,
   ) {
-    return _push(reference, item.reference).check();
+    return _push(reference.pointer, item.reference.pointer).check();
   }
 
   static final _pop = jniLookup<
@@ -2260,7 +2292,7 @@
   /// from: public T pop()
   /// The returned object must be released after use, by calling the [release] method.
   $T pop() {
-    return T.fromRef(_pop(reference).object);
+    return T.fromRef(_pop(reference.pointer).object);
   }
 
   static final _size = jniLookup<
@@ -2270,7 +2302,7 @@
 
   /// from: public int size()
   int size() {
-    return _size(reference).integer;
+    return _size(reference.pointer).integer;
   }
 }
 
@@ -2518,7 +2550,7 @@
   void voidCallback(
     jni.JString s,
   ) {
-    return _voidCallback(reference, s.reference).check();
+    return _voidCallback(reference.pointer, s.reference.pointer).check();
   }
 
   static final _stringCallback = jniLookup<
@@ -2534,8 +2566,8 @@
   jni.JString stringCallback(
     jni.JString s,
   ) {
-    return const jni.JStringType()
-        .fromRef(_stringCallback(reference, s.reference).object);
+    return const jni.JStringType().fromRef(
+        _stringCallback(reference.pointer, s.reference.pointer).object);
   }
 
   static final _varCallback = jniLookup<
@@ -2551,7 +2583,8 @@
   $T varCallback(
     $T t,
   ) {
-    return T.fromRef(_varCallback(reference, t.reference).object);
+    return T
+        .fromRef(_varCallback(reference.pointer, t.reference.pointer).object);
   }
 
   static final _manyPrimitives = jniLookup<
@@ -2573,7 +2606,7 @@
     int c,
     double d,
   ) {
-    return _manyPrimitives(reference, a, b ? 1 : 0, c, d).long;
+    return _manyPrimitives(reference.pointer, a, b ? 1 : 0, c, d).long;
   }
 
   /// Maps a specific port to the implemented interface.
@@ -2618,13 +2651,19 @@
         final $r = _$impls[$p]!.stringCallback(
           $a[0].castTo(const jni.JStringType(), releaseOriginal: true),
         );
-        return ($r as jni.JObject).castTo(const jni.JObjectType()).toPointer();
+        return ($r as jni.JObject)
+            .castTo(const jni.JObjectType())
+            .reference
+            .toPointer();
       }
       if ($d == r"varCallback(Ljava/lang/Object;)Ljava/lang/Object;") {
         final $r = _$impls[$p]!.varCallback(
           $a[0].castTo(_$impls[$p]!.T, releaseOriginal: true),
         );
-        return ($r as jni.JObject).castTo(const jni.JObjectType()).toPointer();
+        return ($r as jni.JObject)
+            .castTo(const jni.JObjectType())
+            .reference
+            .toPointer();
       }
       if ($d == r"manyPrimitives(IZCD)J") {
         final $r = _$impls[$p]!.manyPrimitives(
@@ -2641,7 +2680,7 @@
               .castTo(const jni.JDoubleType(), releaseOriginal: true)
               .doubleValue(releaseOriginal: true),
         );
-        return jni.JLong($r).toPointer();
+        return jni.JLong($r).reference.toPointer();
       }
     } catch (e) {
       return ProtectedJniExtensions.newDartException(e.toString());
@@ -2816,8 +2855,8 @@
       t.$type,
       (myInterface.$type as $MyInterfaceType).T,
     ]) as jni.JObjType<$T>;
-    return _consumeOnAnotherThread(
-            myInterface.reference, s.reference, a, b ? 1 : 0, c, d, t.reference)
+    return _consumeOnAnotherThread(myInterface.reference.pointer,
+            s.reference.pointer, a, b ? 1 : 0, c, d, t.reference.pointer)
         .check();
   }
 
@@ -2851,8 +2890,8 @@
       t.$type,
       (myInterface.$type as $MyInterfaceType).T,
     ]) as jni.JObjType<$T>;
-    return _consumeOnSameThread(
-            myInterface.reference, s.reference, a, b ? 1 : 0, c, d, t.reference)
+    return _consumeOnSameThread(myInterface.reference.pointer,
+            s.reference.pointer, a, b ? 1 : 0, c, d, t.reference.pointer)
         .check();
   }
 }
@@ -2902,7 +2941,7 @@
 
   /// from: public abstract void run()
   void run() {
-    return _run(reference).check();
+    return _run(reference.pointer).check();
   }
 
   /// Maps a specific port to the implemented interface.
@@ -3050,12 +3089,12 @@
   /// from: public java.lang.Throwable error
   /// The returned object must be released after use, by calling the [release] method.
   jni.JObject get error =>
-      const jni.JObjectType().fromRef(_get_error(reference).object);
+      const jni.JObjectType().fromRef(_get_error(reference.pointer).object);
 
   /// from: public java.lang.Throwable error
   /// The returned object must be released after use, by calling the [release] method.
   set error(jni.JObject value) =>
-      _set_error(reference, value.reference).check();
+      _set_error(reference.pointer, value.reference.pointer).check();
 
   static final _new0 = jniLookup<
               ffi
@@ -3068,7 +3107,7 @@
   factory MyRunnableRunner(
     MyRunnable runnable,
   ) {
-    return MyRunnableRunner.fromRef(_new0(runnable.reference).object);
+    return MyRunnableRunner.fromRef(_new0(runnable.reference.pointer).object);
   }
 
   static final _runOnSameThread = jniLookup<
@@ -3079,7 +3118,7 @@
 
   /// from: public void runOnSameThread()
   void runOnSameThread() {
-    return _runOnSameThread(reference).check();
+    return _runOnSameThread(reference.pointer).check();
   }
 
   static final _runOnAnotherThread = jniLookup<
@@ -3090,7 +3129,7 @@
 
   /// from: public void runOnAnotherThread()
   void runOnAnotherThread() {
-    return _runOnAnotherThread(reference).check();
+    return _runOnAnotherThread(reference.pointer).check();
   }
 }
 
@@ -3155,7 +3194,7 @@
     jni.JString name,
   ) {
     return const $JsonSerializable_CaseType()
-        .fromRef(_valueOf(name.reference).object);
+        .fromRef(_valueOf(name.reference.pointer).object);
   }
 }
 
@@ -3207,7 +3246,8 @@
   /// from: public abstract com.github.dart_lang.jnigen.annotations.JsonSerializable$Case value()
   /// The returned object must be released after use, by calling the [release] method.
   JsonSerializable_Case value() {
-    return const $JsonSerializable_CaseType().fromRef(_value(reference).object);
+    return const $JsonSerializable_CaseType()
+        .fromRef(_value(reference.pointer).object);
   }
 
   /// Maps a specific port to the implemented interface.
@@ -3245,7 +3285,10 @@
       if ($d ==
           r"value()Lcom/github/dart_lang/jnigen/annotations/JsonSerializable$Case;") {
         final $r = _$impls[$p]!.value();
-        return ($r as jni.JObject).castTo(const jni.JObjectType()).toPointer();
+        return ($r as jni.JObject)
+            .castTo(const jni.JObjectType())
+            .reference
+            .toPointer();
       }
     } catch (e) {
       return ProtectedJniExtensions.newDartException(e.toString());
@@ -3404,7 +3447,7 @@
   static Color valueOf(
     jni.JString name,
   ) {
-    return const $ColorType().fromRef(_valueOf(name.reference).object);
+    return const $ColorType().fromRef(_valueOf(name.reference.pointer).object);
   }
 }
 
@@ -3539,7 +3582,8 @@
   /// from: public java.lang.Object objectMethod()
   /// The returned object must be released after use, by calling the [release] method.
   jni.JObject objectMethod() {
-    return const jni.JObjectType().fromRef(_objectMethod(reference).object);
+    return const jni.JObjectType()
+        .fromRef(_objectMethod(reference.pointer).object);
   }
 
   static final _intMethod = jniLookup<
@@ -3550,7 +3594,7 @@
 
   /// from: public int intMethod()
   int intMethod() {
-    return _intMethod(reference).integer;
+    return _intMethod(reference.pointer).integer;
   }
 
   static final _objectArrayMethod = jniLookup<
@@ -3563,7 +3607,7 @@
   /// The returned object must be released after use, by calling the [release] method.
   jni.JArray<jni.JObject> objectArrayMethod() {
     return const jni.JArrayType(jni.JObjectType())
-        .fromRef(_objectArrayMethod(reference).object);
+        .fromRef(_objectArrayMethod(reference.pointer).object);
   }
 
   static final _intArrayMethod = jniLookup<
@@ -3576,7 +3620,7 @@
   /// The returned object must be released after use, by calling the [release] method.
   jni.JArray<jni.jint> intArrayMethod() {
     return const jni.JArrayType(jni.jintType())
-        .fromRef(_intArrayMethod(reference).object);
+        .fromRef(_intArrayMethod(reference.pointer).object);
   }
 
   static final _throwNullPointerException = jniLookup<
@@ -3587,7 +3631,7 @@
 
   /// from: public int throwNullPointerException()
   int throwNullPointerException() {
-    return _throwNullPointerException(reference).integer;
+    return _throwNullPointerException(reference.pointer).integer;
   }
 
   static final _throwFileNotFoundException = jniLookup<
@@ -3600,7 +3644,7 @@
   /// The returned object must be released after use, by calling the [release] method.
   jni.JObject throwFileNotFoundException() {
     return const jni.JObjectType()
-        .fromRef(_throwFileNotFoundException(reference).object);
+        .fromRef(_throwFileNotFoundException(reference.pointer).object);
   }
 
   static final _throwClassCastException = jniLookup<
@@ -3613,7 +3657,7 @@
   /// The returned object must be released after use, by calling the [release] method.
   jni.JObject throwClassCastException() {
     return const jni.JObjectType()
-        .fromRef(_throwClassCastException(reference).object);
+        .fromRef(_throwClassCastException(reference.pointer).object);
   }
 
   static final _throwArrayIndexException = jniLookup<
@@ -3624,7 +3668,7 @@
 
   /// from: public int throwArrayIndexException()
   int throwArrayIndexException() {
-    return _throwArrayIndexException(reference).integer;
+    return _throwArrayIndexException(reference.pointer).integer;
   }
 
   static final _throwArithmeticException = jniLookup<
@@ -3635,7 +3679,7 @@
 
   /// from: public int throwArithmeticException()
   int throwArithmeticException() {
-    return _throwArithmeticException(reference).integer;
+    return _throwArithmeticException(reference.pointer).integer;
   }
 
   static final _throwLoremIpsum =
@@ -3750,7 +3794,8 @@
 
   /// from: static public java.lang.String name
   /// The returned object must be released after use, by calling the [release] method.
-  static set name(jni.JString value) => _set_name(value.reference).check();
+  static set name(jni.JString value) =>
+      _set_name(value.reference.pointer).check();
 
   static final _get_i = jniLookup<
           ffi.NativeFunction<
@@ -3772,11 +3817,12 @@
   /// from: public java.lang.Integer i
   /// The returned object must be released after use, by calling the [release] method.
   jni.JInteger get i =>
-      const jni.JIntegerType().fromRef(_get_i(reference).object);
+      const jni.JIntegerType().fromRef(_get_i(reference.pointer).object);
 
   /// from: public java.lang.Integer i
   /// The returned object must be released after use, by calling the [release] method.
-  set i(jni.JInteger value) => _set_i(reference, value.reference).check();
+  set i(jni.JInteger value) =>
+      _set_i(reference.pointer, value.reference.pointer).check();
 
   static final _get_trillion = jniLookup<
           ffi.NativeFunction<
@@ -3795,10 +3841,10 @@
       .asFunction<jni.JniResult Function(jni.JObjectPtr, int)>();
 
   /// from: public long trillion
-  int get trillion => _get_trillion(reference).long;
+  int get trillion => _get_trillion(reference.pointer).long;
 
   /// from: public long trillion
-  set trillion(int value) => _set_trillion(reference, value).check();
+  set trillion(int value) => _set_trillion(reference.pointer, value).check();
 
   static final _get_isAchillesDead = jniLookup<
           ffi.NativeFunction<
@@ -3817,11 +3863,11 @@
       .asFunction<jni.JniResult Function(jni.JObjectPtr, int)>();
 
   /// from: public boolean isAchillesDead
-  bool get isAchillesDead => _get_isAchillesDead(reference).boolean;
+  bool get isAchillesDead => _get_isAchillesDead(reference.pointer).boolean;
 
   /// from: public boolean isAchillesDead
   set isAchillesDead(bool value) =>
-      _set_isAchillesDead(reference, value ? 1 : 0).check();
+      _set_isAchillesDead(reference.pointer, value ? 1 : 0).check();
 
   static final _get_bestFighterInGreece = jniLookup<
           ffi.NativeFunction<
@@ -3843,12 +3889,13 @@
   /// from: public java.lang.String bestFighterInGreece
   /// The returned object must be released after use, by calling the [release] method.
   jni.JString get bestFighterInGreece => const jni.JStringType()
-      .fromRef(_get_bestFighterInGreece(reference).object);
+      .fromRef(_get_bestFighterInGreece(reference.pointer).object);
 
   /// from: public java.lang.String bestFighterInGreece
   /// The returned object must be released after use, by calling the [release] method.
   set bestFighterInGreece(jni.JString value) =>
-      _set_bestFighterInGreece(reference, value.reference).check();
+      _set_bestFighterInGreece(reference.pointer, value.reference.pointer)
+          .check();
 
   static final _get_random = jniLookup<
           ffi.NativeFunction<
@@ -3870,12 +3917,12 @@
   /// from: public java.util.Random random
   /// The returned object must be released after use, by calling the [release] method.
   jni.JObject get random =>
-      const jni.JObjectType().fromRef(_get_random(reference).object);
+      const jni.JObjectType().fromRef(_get_random(reference.pointer).object);
 
   /// from: public java.util.Random random
   /// The returned object must be released after use, by calling the [release] method.
   set random(jni.JObject value) =>
-      _set_random(reference, value.reference).check();
+      _set_random(reference.pointer, value.reference.pointer).check();
 
   static final _get_euroSymbol =
       jniLookup<ffi.NativeFunction<jni.JniResult Function()>>(
@@ -3957,10 +4004,10 @@
       .asFunction<jni.JniResult Function(jni.JObjectPtr, int)>();
 
   /// from: public long hundred
-  int get hundred => _get_hundred(reference).long;
+  int get hundred => _get_hundred(reference.pointer).long;
 
   /// from: public long hundred
-  set hundred(int value) => _set_hundred(reference, value).check();
+  set hundred(int value) => _set_hundred(reference.pointer, value).check();
 
   static final _get_BEST_GOD =
       jniLookup<ffi.NativeFunction<jni.JniResult Function()>>(
@@ -3981,7 +4028,7 @@
   /// from: static public java.lang.String BEST_GOD
   /// The returned object must be released after use, by calling the [release] method.
   static set BEST_GOD(jni.JString value) =>
-      _set_BEST_GOD(value.reference).check();
+      _set_BEST_GOD(value.reference.pointer).check();
 
   static final _new0 = jniLookup<ffi.NativeFunction<jni.JniResult Function()>>(
           "Fields_Nested__new0")
diff --git a/pkgs/jnigen/test/simple_package_test/dart_only/dart_bindings/simple_package.dart b/pkgs/jnigen/test/simple_package_test/dart_only/dart_bindings/simple_package.dart
index 619d75b..ba14ad8 100644
--- a/pkgs/jnigen/test/simple_package_test/dart_only/dart_bindings/simple_package.dart
+++ b/pkgs/jnigen/test/simple_package_test/dart_only/dart_bindings/simple_package.dart
@@ -41,28 +41,29 @@
   /// The type which includes information such as the signature of this class.
   static const type = $Example_Nested_NestedTwiceType();
   static final _id_ZERO = jni.Jni.accessors.getStaticFieldIDOf(
-    _class.reference,
+    _class.reference.pointer,
     r"ZERO",
     r"I",
   );
 
   /// from: static public int ZERO
   static int get ZERO => jni.Jni.accessors
-      .getStaticField(_class.reference, _id_ZERO, jni.JniCallType.intType)
+      .getStaticField(
+          _class.reference.pointer, _id_ZERO, jni.JniCallType.intType)
       .integer;
 
   /// from: static public int ZERO
   static set ZERO(int value) =>
-      jni.Jni.env.SetStaticIntField(_class.reference, _id_ZERO, value);
+      jni.Jni.env.SetStaticIntField(_class.reference.pointer, _id_ZERO, value);
 
-  static final _id_new0 =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"()V");
+  static final _id_new0 = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"<init>", r"()V");
 
   /// from: public void <init>()
   /// The returned object must be released after use, by calling the [release] method.
   factory Example_Nested_NestedTwice() {
     return Example_Nested_NestedTwice.fromRef(jni.Jni.accessors
-        .newObjectWithArgs(_class.reference, _id_new0, []).object);
+        .newObjectWithArgs(_class.reference.pointer, _id_new0, []).object);
   }
 }
 
@@ -108,44 +109,44 @@
 
   /// The type which includes information such as the signature of this class.
   static const type = $Example_NestedType();
-  static final _id_new0 =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"(Z)V");
+  static final _id_new0 = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"<init>", r"(Z)V");
 
   /// from: public void <init>(boolean value)
   /// The returned object must be released after use, by calling the [release] method.
   factory Example_Nested(
     bool value,
   ) {
-    return Example_Nested.fromRef(jni.Jni.accessors
-        .newObjectWithArgs(_class.reference, _id_new0, [value ? 1 : 0]).object);
+    return Example_Nested.fromRef(jni.Jni.accessors.newObjectWithArgs(
+        _class.reference.pointer, _id_new0, [value ? 1 : 0]).object);
   }
 
-  static final _id_usesAnonymousInnerClass = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"usesAnonymousInnerClass", r"()V");
+  static final _id_usesAnonymousInnerClass = jni.Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"usesAnonymousInnerClass", r"()V");
 
   /// from: public void usesAnonymousInnerClass()
   void usesAnonymousInnerClass() {
-    return jni.Jni.accessors.callMethodWithArgs(reference,
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
         _id_usesAnonymousInnerClass, jni.JniCallType.voidType, []).check();
   }
 
-  static final _id_getValue =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"getValue", r"()Z");
+  static final _id_getValue = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"getValue", r"()Z");
 
   /// from: public boolean getValue()
   bool getValue() {
-    return jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_getValue, jni.JniCallType.booleanType, []).boolean;
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer, _id_getValue,
+        jni.JniCallType.booleanType, []).boolean;
   }
 
-  static final _id_setValue =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"setValue", r"(Z)V");
+  static final _id_setValue = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"setValue", r"(Z)V");
 
   /// from: public void setValue(boolean value)
   void setValue(
     bool value,
   ) {
-    return jni.Jni.accessors.callMethodWithArgs(reference, _id_setValue,
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer, _id_setValue,
         jni.JniCallType.voidType, [value ? 1 : 0]).check();
   }
 }
@@ -191,22 +192,24 @@
   /// The type which includes information such as the signature of this class.
   static const type = $Example_NonStaticNestedType();
   static final _id_ok = jni.Jni.accessors.getFieldIDOf(
-    _class.reference,
+    _class.reference.pointer,
     r"ok",
     r"Z",
   );
 
   /// from: public boolean ok
   bool get ok => jni.Jni.accessors
-      .getField(reference, _id_ok, jni.JniCallType.booleanType)
+      .getField(reference.pointer, _id_ok, jni.JniCallType.booleanType)
       .boolean;
 
   /// from: public boolean ok
   set ok(bool value) =>
-      jni.Jni.env.SetBooleanField(reference, _id_ok, value ? 1 : 0);
+      jni.Jni.env.SetBooleanField(reference.pointer, _id_ok, value ? 1 : 0);
 
-  static final _id_new0 = jni.Jni.accessors.getMethodIDOf(_class.reference,
-      r"<init>", r"(Lcom/github/dart_lang/jnigen/simple_package/Example;)V");
+  static final _id_new0 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference.pointer,
+      r"<init>",
+      r"(Lcom/github/dart_lang/jnigen/simple_package/Example;)V");
 
   /// from: public void <init>(com.github.dart_lang.jnigen.simple_package.Example $parent)
   /// The returned object must be released after use, by calling the [release] method.
@@ -214,7 +217,9 @@
     Example $parent,
   ) {
     return Example_NonStaticNested.fromRef(jni.Jni.accessors.newObjectWithArgs(
-        _class.reference, _id_new0, [$parent.reference]).object);
+        _class.reference.pointer,
+        _id_new0,
+        [$parent.reference.pointer]).object);
   }
 }
 
@@ -273,21 +278,21 @@
   /// from: static public final char SEMICOLON
   static const SEMICOLON = 59;
   static final _id_SEMICOLON_STRING = jni.Jni.accessors.getStaticFieldIDOf(
-    _class.reference,
+    _class.reference.pointer,
     r"SEMICOLON_STRING",
     r"Ljava/lang/String;",
   );
 
   /// from: static public final java.lang.String SEMICOLON_STRING
   /// The returned object must be released after use, by calling the [release] method.
-  static jni.JString get SEMICOLON_STRING => const jni.JStringType().fromRef(jni
-      .Jni.accessors
-      .getStaticField(
-          _class.reference, _id_SEMICOLON_STRING, jni.JniCallType.objectType)
-      .object);
+  static jni.JString get SEMICOLON_STRING =>
+      const jni.JStringType().fromRef(jni.Jni.accessors
+          .getStaticField(_class.reference.pointer, _id_SEMICOLON_STRING,
+              jni.JniCallType.objectType)
+          .object);
 
   static final _id_unusedRandom = jni.Jni.accessors.getStaticFieldIDOf(
-    _class.reference,
+    _class.reference.pointer,
     r"unusedRandom",
     r"Ljava/util/Random;",
   );
@@ -296,12 +301,12 @@
   /// The returned object must be released after use, by calling the [release] method.
   static jni.JObject get unusedRandom =>
       const jni.JObjectType().fromRef(jni.Jni.accessors
-          .getStaticField(
-              _class.reference, _id_unusedRandom, jni.JniCallType.objectType)
+          .getStaticField(_class.reference.pointer, _id_unusedRandom,
+              jni.JniCallType.objectType)
           .object);
 
   static final _id_protectedField = jni.Jni.accessors.getFieldIDOf(
-    _class.reference,
+    _class.reference.pointer,
     r"protectedField",
     r"Ljava/util/Random;",
   );
@@ -310,54 +315,55 @@
   /// The returned object must be released after use, by calling the [release] method.
   jni.JObject get protectedField =>
       const jni.JObjectType().fromRef(jni.Jni.accessors
-          .getField(reference, _id_protectedField, jni.JniCallType.objectType)
+          .getField(
+              reference.pointer, _id_protectedField, jni.JniCallType.objectType)
           .object);
 
   /// from: protected java.util.Random protectedField
   /// The returned object must be released after use, by calling the [release] method.
-  set protectedField(jni.JObject value) => jni.Jni.env
-      .SetObjectField(reference, _id_protectedField, value.reference);
+  set protectedField(jni.JObject value) => jni.Jni.env.SetObjectField(
+      reference.pointer, _id_protectedField, value.reference.pointer);
 
   static final _id_getAmount = jni.Jni.accessors
-      .getStaticMethodIDOf(_class.reference, r"getAmount", r"()I");
+      .getStaticMethodIDOf(_class.reference.pointer, r"getAmount", r"()I");
 
   /// from: static public int getAmount()
   static int getAmount() {
-    return jni.Jni.accessors.callStaticMethodWithArgs(
-        _class.reference, _id_getAmount, jni.JniCallType.intType, []).integer;
+    return jni.Jni.accessors.callStaticMethodWithArgs(_class.reference.pointer,
+        _id_getAmount, jni.JniCallType.intType, []).integer;
   }
 
-  static final _id_getPi =
-      jni.Jni.accessors.getStaticMethodIDOf(_class.reference, r"getPi", r"()D");
+  static final _id_getPi = jni.Jni.accessors
+      .getStaticMethodIDOf(_class.reference.pointer, r"getPi", r"()D");
 
   /// from: static public double getPi()
   static double getPi() {
-    return jni.Jni.accessors.callStaticMethodWithArgs(_class.reference,
+    return jni.Jni.accessors.callStaticMethodWithArgs(_class.reference.pointer,
         _id_getPi, jni.JniCallType.doubleType, []).doubleFloat;
   }
 
   static final _id_getAsterisk = jni.Jni.accessors
-      .getStaticMethodIDOf(_class.reference, r"getAsterisk", r"()C");
+      .getStaticMethodIDOf(_class.reference.pointer, r"getAsterisk", r"()C");
 
   /// from: static public char getAsterisk()
   static int getAsterisk() {
-    return jni.Jni.accessors.callStaticMethodWithArgs(
-        _class.reference, _id_getAsterisk, jni.JniCallType.charType, []).char;
+    return jni.Jni.accessors.callStaticMethodWithArgs(_class.reference.pointer,
+        _id_getAsterisk, jni.JniCallType.charType, []).char;
   }
 
   static final _id_getName = jni.Jni.accessors.getStaticMethodIDOf(
-      _class.reference, r"getName", r"()Ljava/lang/String;");
+      _class.reference.pointer, r"getName", r"()Ljava/lang/String;");
 
   /// from: static public java.lang.String getName()
   /// The returned object must be released after use, by calling the [release] method.
   static jni.JString getName() {
     return const jni.JStringType().fromRef(jni.Jni.accessors
-        .callStaticMethodWithArgs(_class.reference, _id_getName,
+        .callStaticMethodWithArgs(_class.reference.pointer, _id_getName,
             jni.JniCallType.objectType, []).object);
   }
 
   static final _id_getNestedInstance = jni.Jni.accessors.getStaticMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"getNestedInstance",
       r"()Lcom/github/dart_lang/jnigen/simple_package/Example$Nested;");
 
@@ -365,37 +371,40 @@
   /// The returned object must be released after use, by calling the [release] method.
   static Example_Nested getNestedInstance() {
     return const $Example_NestedType().fromRef(jni.Jni.accessors
-        .callStaticMethodWithArgs(_class.reference, _id_getNestedInstance,
-            jni.JniCallType.objectType, []).object);
+        .callStaticMethodWithArgs(_class.reference.pointer,
+            _id_getNestedInstance, jni.JniCallType.objectType, []).object);
   }
 
   static final _id_setAmount = jni.Jni.accessors
-      .getStaticMethodIDOf(_class.reference, r"setAmount", r"(I)V");
+      .getStaticMethodIDOf(_class.reference.pointer, r"setAmount", r"(I)V");
 
   /// from: static public void setAmount(int newAmount)
   static void setAmount(
     int newAmount,
   ) {
     return jni.Jni.accessors.callStaticMethodWithArgs(
-        _class.reference,
+        _class.reference.pointer,
         _id_setAmount,
         jni.JniCallType.voidType,
         [jni.JValueInt(newAmount)]).check();
   }
 
   static final _id_setName = jni.Jni.accessors.getStaticMethodIDOf(
-      _class.reference, r"setName", r"(Ljava/lang/String;)V");
+      _class.reference.pointer, r"setName", r"(Ljava/lang/String;)V");
 
   /// from: static public void setName(java.lang.String newName)
   static void setName(
     jni.JString newName,
   ) {
-    return jni.Jni.accessors.callStaticMethodWithArgs(_class.reference,
-        _id_setName, jni.JniCallType.voidType, [newName.reference]).check();
+    return jni.Jni.accessors.callStaticMethodWithArgs(
+        _class.reference.pointer,
+        _id_setName,
+        jni.JniCallType.voidType,
+        [newName.reference.pointer]).check();
   }
 
   static final _id_setNestedInstance = jni.Jni.accessors.getStaticMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"setNestedInstance",
       r"(Lcom/github/dart_lang/jnigen/simple_package/Example$Nested;)V");
 
@@ -404,14 +413,14 @@
     Example_Nested newNested,
   ) {
     return jni.Jni.accessors.callStaticMethodWithArgs(
-        _class.reference,
+        _class.reference.pointer,
         _id_setNestedInstance,
         jni.JniCallType.voidType,
-        [newNested.reference]).check();
+        [newNested.reference.pointer]).check();
   }
 
   static final _id_max4 = jni.Jni.accessors
-      .getStaticMethodIDOf(_class.reference, r"max4", r"(IIII)I");
+      .getStaticMethodIDOf(_class.reference.pointer, r"max4", r"(IIII)I");
 
   /// from: static public int max4(int a, int b, int c, int d)
   static int max4(
@@ -421,7 +430,7 @@
     int d,
   ) {
     return jni.Jni.accessors.callStaticMethodWithArgs(
-        _class.reference, _id_max4, jni.JniCallType.intType, [
+        _class.reference.pointer, _id_max4, jni.JniCallType.intType, [
       jni.JValueInt(a),
       jni.JValueInt(b),
       jni.JValueInt(c),
@@ -430,7 +439,7 @@
   }
 
   static final _id_max8 = jni.Jni.accessors
-      .getStaticMethodIDOf(_class.reference, r"max8", r"(IIIIIIII)I");
+      .getStaticMethodIDOf(_class.reference.pointer, r"max8", r"(IIIIIIII)I");
 
   /// from: static public int max8(int a, int b, int c, int d, int e, int f, int g, int h)
   static int max8(
@@ -444,7 +453,7 @@
     int h,
   ) {
     return jni.Jni.accessors.callStaticMethodWithArgs(
-        _class.reference, _id_max8, jni.JniCallType.intType, [
+        _class.reference.pointer, _id_max8, jni.JniCallType.intType, [
       jni.JValueInt(a),
       jni.JValueInt(b),
       jni.JValueInt(c),
@@ -456,99 +465,112 @@
     ]).integer;
   }
 
-  static final _id_getNumber =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"getNumber", r"()I");
+  static final _id_getNumber = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"getNumber", r"()I");
 
   /// from: public int getNumber()
   int getNumber() {
     return jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_getNumber, jni.JniCallType.intType, []).integer;
+        reference.pointer, _id_getNumber, jni.JniCallType.intType, []).integer;
   }
 
-  static final _id_setNumber =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"setNumber", r"(I)V");
+  static final _id_setNumber = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"setNumber", r"(I)V");
 
   /// from: public void setNumber(int number)
   void setNumber(
     int number,
   ) {
-    return jni.Jni.accessors.callMethodWithArgs(reference, _id_setNumber,
-        jni.JniCallType.voidType, [jni.JValueInt(number)]).check();
+    return jni.Jni.accessors.callMethodWithArgs(
+        reference.pointer,
+        _id_setNumber,
+        jni.JniCallType.voidType,
+        [jni.JValueInt(number)]).check();
   }
 
-  static final _id_getIsUp =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"getIsUp", r"()Z");
+  static final _id_getIsUp = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"getIsUp", r"()Z");
 
   /// from: public boolean getIsUp()
   bool getIsUp() {
-    return jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_getIsUp, jni.JniCallType.booleanType, []).boolean;
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer, _id_getIsUp,
+        jni.JniCallType.booleanType, []).boolean;
   }
 
-  static final _id_setUp =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"setUp", r"(Z)V");
+  static final _id_setUp = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"setUp", r"(Z)V");
 
   /// from: public void setUp(boolean isUp)
   void setUp(
     bool isUp,
   ) {
-    return jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_setUp, jni.JniCallType.voidType, [isUp ? 1 : 0]).check();
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer, _id_setUp,
+        jni.JniCallType.voidType, [isUp ? 1 : 0]).check();
   }
 
-  static final _id_getCodename = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"getCodename", r"()Ljava/lang/String;");
+  static final _id_getCodename = jni.Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"getCodename", r"()Ljava/lang/String;");
 
   /// from: public java.lang.String getCodename()
   /// The returned object must be released after use, by calling the [release] method.
   jni.JString getCodename() {
     return const jni.JStringType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_getCodename, jni.JniCallType.objectType, []).object);
+        reference.pointer,
+        _id_getCodename,
+        jni.JniCallType.objectType, []).object);
   }
 
   static final _id_setCodename = jni.Jni.accessors.getMethodIDOf(
-      _class.reference, r"setCodename", r"(Ljava/lang/String;)V");
+      _class.reference.pointer, r"setCodename", r"(Ljava/lang/String;)V");
 
   /// from: public void setCodename(java.lang.String codename)
   void setCodename(
     jni.JString codename,
   ) {
-    return jni.Jni.accessors.callMethodWithArgs(reference, _id_setCodename,
-        jni.JniCallType.voidType, [codename.reference]).check();
+    return jni.Jni.accessors.callMethodWithArgs(
+        reference.pointer,
+        _id_setCodename,
+        jni.JniCallType.voidType,
+        [codename.reference.pointer]).check();
   }
 
-  static final _id_getRandom = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"getRandom", r"()Ljava/util/Random;");
+  static final _id_getRandom = jni.Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"getRandom", r"()Ljava/util/Random;");
 
   /// from: public java.util.Random getRandom()
   /// The returned object must be released after use, by calling the [release] method.
   jni.JObject getRandom() {
     return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_getRandom, jni.JniCallType.objectType, []).object);
+        reference.pointer,
+        _id_getRandom,
+        jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_setRandom = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"setRandom", r"(Ljava/util/Random;)V");
+  static final _id_setRandom = jni.Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"setRandom", r"(Ljava/util/Random;)V");
 
   /// from: public void setRandom(java.util.Random random)
   void setRandom(
     jni.JObject random,
   ) {
-    return jni.Jni.accessors.callMethodWithArgs(reference, _id_setRandom,
-        jni.JniCallType.voidType, [random.reference]).check();
+    return jni.Jni.accessors.callMethodWithArgs(
+        reference.pointer,
+        _id_setRandom,
+        jni.JniCallType.voidType,
+        [random.reference.pointer]).check();
   }
 
   static final _id_getRandomLong = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"getRandomLong", r"()J");
+      .getMethodIDOf(_class.reference.pointer, r"getRandomLong", r"()J");
 
   /// from: public long getRandomLong()
   int getRandomLong() {
-    return jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_getRandomLong, jni.JniCallType.longType, []).long;
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
+        _id_getRandomLong, jni.JniCallType.longType, []).long;
   }
 
   static final _id_add4Longs = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"add4Longs", r"(JJJJ)J");
+      .getMethodIDOf(_class.reference.pointer, r"add4Longs", r"(JJJJ)J");
 
   /// from: public long add4Longs(long a, long b, long c, long d)
   int add4Longs(
@@ -557,12 +579,12 @@
     int c,
     int d,
   ) {
-    return jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_add4Longs, jni.JniCallType.longType, [a, b, c, d]).long;
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
+        _id_add4Longs, jni.JniCallType.longType, [a, b, c, d]).long;
   }
 
   static final _id_add8Longs = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"add8Longs", r"(JJJJJJJJ)J");
+      .getMethodIDOf(_class.reference.pointer, r"add8Longs", r"(JJJJJJJJ)J");
 
   /// from: public long add8Longs(long a, long b, long c, long d, long e, long f, long g, long h)
   int add8Longs(
@@ -575,12 +597,12 @@
     int g,
     int h,
   ) {
-    return jni.Jni.accessors.callMethodWithArgs(reference, _id_add8Longs,
-        jni.JniCallType.longType, [a, b, c, d, e, f, g, h]).long;
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
+        _id_add8Longs, jni.JniCallType.longType, [a, b, c, d, e, f, g, h]).long;
   }
 
   static final _id_getRandomNumericString = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"getRandomNumericString",
       r"(Ljava/util/Random;)Ljava/lang/String;");
 
@@ -590,14 +612,14 @@
     jni.JObject random,
   ) {
     return const jni.JStringType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_getRandomNumericString,
         jni.JniCallType.objectType,
-        [random.reference]).object);
+        [random.reference.pointer]).object);
   }
 
   static final _id_protectedMethod = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"protectedMethod",
       r"(Ljava/lang/String;Ljava/lang/String;)V");
 
@@ -606,32 +628,35 @@
     jni.JString a,
     jni.JString b,
   ) {
-    return jni.Jni.accessors.callMethodWithArgs(reference, _id_protectedMethod,
-        jni.JniCallType.voidType, [a.reference, b.reference]).check();
+    return jni.Jni.accessors.callMethodWithArgs(
+        reference.pointer,
+        _id_protectedMethod,
+        jni.JniCallType.voidType,
+        [a.reference.pointer, b.reference.pointer]).check();
   }
 
-  static final _id_finalMethod =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"finalMethod", r"()V");
+  static final _id_finalMethod = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"finalMethod", r"()V");
 
   /// from: public final void finalMethod()
   void finalMethod() {
-    return jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_finalMethod, jni.JniCallType.voidType, []).check();
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
+        _id_finalMethod, jni.JniCallType.voidType, []).check();
   }
 
-  static final _id_getList = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"getList", r"()Ljava/util/List;");
+  static final _id_getList = jni.Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"getList", r"()Ljava/util/List;");
 
   /// from: public java.util.List<java.lang.String> getList()
   /// The returned object must be released after use, by calling the [release] method.
   jni.JList<jni.JString> getList() {
     return const jni.JListType(jni.JStringType()).fromRef(jni.Jni.accessors
-        .callMethodWithArgs(
-            reference, _id_getList, jni.JniCallType.objectType, []).object);
+        .callMethodWithArgs(reference.pointer, _id_getList,
+            jni.JniCallType.objectType, []).object);
   }
 
   static final _id_joinStrings = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"joinStrings",
       r"(Ljava/util/List;Ljava/lang/String;)Ljava/lang/String;");
 
@@ -644,14 +669,14 @@
     jni.JString delim,
   ) {
     return const jni.JStringType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_joinStrings,
         jni.JniCallType.objectType,
-        [values.reference, delim.reference]).object);
+        [values.reference.pointer, delim.reference.pointer]).object);
   }
 
   static final _id_methodWithSeveralParams = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"methodWithSeveralParams",
       r"(CLjava/lang/String;[ILjava/lang/CharSequence;Ljava/util/List;Ljava/util/Map;)V");
 
@@ -669,29 +694,29 @@
       (lt.$type as jni.JListType).E,
       t.$type,
     ]) as jni.JObjType<$T>;
-    return jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_methodWithSeveralParams, jni.JniCallType.voidType, [
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
+        _id_methodWithSeveralParams, jni.JniCallType.voidType, [
       jni.JValueChar(ch),
-      s.reference,
-      a.reference,
-      t.reference,
-      lt.reference,
-      wm.reference
+      s.reference.pointer,
+      a.reference.pointer,
+      t.reference.pointer,
+      lt.reference.pointer,
+      wm.reference.pointer
     ]).check();
   }
 
-  static final _id_new0 =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"()V");
+  static final _id_new0 = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"<init>", r"()V");
 
   /// from: public void <init>()
   /// The returned object must be released after use, by calling the [release] method.
   factory Example() {
     return Example.fromRef(jni.Jni.accessors
-        .newObjectWithArgs(_class.reference, _id_new0, []).object);
+        .newObjectWithArgs(_class.reference.pointer, _id_new0, []).object);
   }
 
-  static final _id_new1 =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"(I)V");
+  static final _id_new1 = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"<init>", r"(I)V");
 
   /// from: public void <init>(int number)
   /// The returned object must be released after use, by calling the [release] method.
@@ -699,11 +724,11 @@
     int number,
   ) {
     return Example.fromRef(jni.Jni.accessors.newObjectWithArgs(
-        _class.reference, _id_new1, [jni.JValueInt(number)]).object);
+        _class.reference.pointer, _id_new1, [jni.JValueInt(number)]).object);
   }
 
-  static final _id_new2 =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"(IZ)V");
+  static final _id_new2 = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"<init>", r"(IZ)V");
 
   /// from: public void <init>(int number, boolean isUp)
   /// The returned object must be released after use, by calling the [release] method.
@@ -711,12 +736,14 @@
     int number,
     bool isUp,
   ) {
-    return Example.fromRef(jni.Jni.accessors.newObjectWithArgs(_class.reference,
-        _id_new2, [jni.JValueInt(number), isUp ? 1 : 0]).object);
+    return Example.fromRef(jni.Jni.accessors.newObjectWithArgs(
+        _class.reference.pointer,
+        _id_new2,
+        [jni.JValueInt(number), isUp ? 1 : 0]).object);
   }
 
-  static final _id_new3 = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"<init>", r"(IZLjava/lang/String;)V");
+  static final _id_new3 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"<init>", r"(IZLjava/lang/String;)V");
 
   /// from: public void <init>(int number, boolean isUp, java.lang.String codename)
   /// The returned object must be released after use, by calling the [release] method.
@@ -726,13 +753,15 @@
     jni.JString codename,
   ) {
     return Example.fromRef(jni.Jni.accessors.newObjectWithArgs(
-        _class.reference,
-        _id_new3,
-        [jni.JValueInt(number), isUp ? 1 : 0, codename.reference]).object);
+        _class.reference.pointer, _id_new3, [
+      jni.JValueInt(number),
+      isUp ? 1 : 0,
+      codename.reference.pointer
+    ]).object);
   }
 
   static final _id_new4 = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"<init>", r"(IIIIIIII)V");
+      .getMethodIDOf(_class.reference.pointer, r"<init>", r"(IIIIIIII)V");
 
   /// from: public void <init>(int a, int b, int c, int d, int e, int f, int g, int h)
   /// The returned object must be released after use, by calling the [release] method.
@@ -746,8 +775,8 @@
     int g,
     int h,
   ) {
-    return Example.fromRef(
-        jni.Jni.accessors.newObjectWithArgs(_class.reference, _id_new4, [
+    return Example.fromRef(jni.Jni.accessors
+        .newObjectWithArgs(_class.reference.pointer, _id_new4, [
       jni.JValueInt(a),
       jni.JValueInt(b),
       jni.JValueInt(c),
@@ -760,16 +789,16 @@
   }
 
   static final _id_whichExample = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"whichExample", r"()I");
+      .getMethodIDOf(_class.reference.pointer, r"whichExample", r"()I");
 
   /// from: public int whichExample()
   int whichExample() {
-    return jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_whichExample, jni.JniCallType.intType, []).integer;
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
+        _id_whichExample, jni.JniCallType.intType, []).integer;
   }
 
   static final _id_addInts = jni.Jni.accessors
-      .getStaticMethodIDOf(_class.reference, r"addInts", r"(II)I");
+      .getStaticMethodIDOf(_class.reference.pointer, r"addInts", r"(II)I");
 
   /// from: static public int addInts(int a, int b)
   static int addInts(
@@ -777,87 +806,92 @@
     int b,
   ) {
     return jni.Jni.accessors.callStaticMethodWithArgs(
-        _class.reference,
+        _class.reference.pointer,
         _id_addInts,
         jni.JniCallType.intType,
         [jni.JValueInt(a), jni.JValueInt(b)]).integer;
   }
 
   static final _id_getArr = jni.Jni.accessors
-      .getStaticMethodIDOf(_class.reference, r"getArr", r"()[I");
+      .getStaticMethodIDOf(_class.reference.pointer, r"getArr", r"()[I");
 
   /// from: static public int[] getArr()
   /// The returned object must be released after use, by calling the [release] method.
   static jni.JArray<jni.jint> getArr() {
     return const jni.JArrayType(jni.jintType()).fromRef(jni.Jni.accessors
-        .callStaticMethodWithArgs(_class.reference, _id_getArr,
+        .callStaticMethodWithArgs(_class.reference.pointer, _id_getArr,
             jni.JniCallType.objectType, []).object);
   }
 
   static final _id_addAll = jni.Jni.accessors
-      .getStaticMethodIDOf(_class.reference, r"addAll", r"([I)I");
+      .getStaticMethodIDOf(_class.reference.pointer, r"addAll", r"([I)I");
 
   /// from: static public int addAll(int[] arr)
   static int addAll(
     jni.JArray<jni.jint> arr,
   ) {
-    return jni.Jni.accessors.callStaticMethodWithArgs(_class.reference,
-        _id_addAll, jni.JniCallType.intType, [arr.reference]).integer;
+    return jni.Jni.accessors.callStaticMethodWithArgs(_class.reference.pointer,
+        _id_addAll, jni.JniCallType.intType, [arr.reference.pointer]).integer;
   }
 
-  static final _id_getSelf = jni.Jni.accessors.getMethodIDOf(_class.reference,
-      r"getSelf", r"()Lcom/github/dart_lang/jnigen/simple_package/Example;");
+  static final _id_getSelf = jni.Jni.accessors.getMethodIDOf(
+      _class.reference.pointer,
+      r"getSelf",
+      r"()Lcom/github/dart_lang/jnigen/simple_package/Example;");
 
   /// from: public com.github.dart_lang.jnigen.simple_package.Example getSelf()
   /// The returned object must be released after use, by calling the [release] method.
   Example getSelf() {
     return const $ExampleType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_getSelf, jni.JniCallType.objectType, []).object);
+        reference.pointer, _id_getSelf, jni.JniCallType.objectType, []).object);
   }
 
   static final _id_throwException = jni.Jni.accessors
-      .getStaticMethodIDOf(_class.reference, r"throwException", r"()V");
+      .getStaticMethodIDOf(_class.reference.pointer, r"throwException", r"()V");
 
   /// from: static public void throwException()
   static void throwException() {
-    return jni.Jni.accessors.callStaticMethodWithArgs(_class.reference,
+    return jni.Jni.accessors.callStaticMethodWithArgs(_class.reference.pointer,
         _id_throwException, jni.JniCallType.voidType, []).check();
   }
 
-  static final _id_overloaded =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"overloaded", r"()V");
+  static final _id_overloaded = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"overloaded", r"()V");
 
   /// from: public void overloaded()
   void overloaded() {
-    return jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_overloaded, jni.JniCallType.voidType, []).check();
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
+        _id_overloaded, jni.JniCallType.voidType, []).check();
   }
 
   static final _id_overloaded1 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference, r"overloaded", r"(ILjava/lang/String;)V");
+      _class.reference.pointer, r"overloaded", r"(ILjava/lang/String;)V");
 
   /// from: public void overloaded(int a, java.lang.String b)
   void overloaded1(
     int a,
     jni.JString b,
   ) {
-    return jni.Jni.accessors.callMethodWithArgs(reference, _id_overloaded1,
-        jni.JniCallType.voidType, [jni.JValueInt(a), b.reference]).check();
+    return jni.Jni.accessors.callMethodWithArgs(
+        reference.pointer,
+        _id_overloaded1,
+        jni.JniCallType.voidType,
+        [jni.JValueInt(a), b.reference.pointer]).check();
   }
 
-  static final _id_overloaded2 =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"overloaded", r"(I)V");
+  static final _id_overloaded2 = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"overloaded", r"(I)V");
 
   /// from: public void overloaded(int a)
   void overloaded2(
     int a,
   ) {
-    return jni.Jni.accessors.callMethodWithArgs(reference, _id_overloaded2,
-        jni.JniCallType.voidType, [jni.JValueInt(a)]).check();
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
+        _id_overloaded2, jni.JniCallType.voidType, [jni.JValueInt(a)]).check();
   }
 
   static final _id_overloaded3 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"overloaded",
       r"(Ljava/util/List;Ljava/lang/String;)V");
 
@@ -866,19 +900,25 @@
     jni.JList<jni.JInteger> a,
     jni.JString b,
   ) {
-    return jni.Jni.accessors.callMethodWithArgs(reference, _id_overloaded3,
-        jni.JniCallType.voidType, [a.reference, b.reference]).check();
+    return jni.Jni.accessors.callMethodWithArgs(
+        reference.pointer,
+        _id_overloaded3,
+        jni.JniCallType.voidType,
+        [a.reference.pointer, b.reference.pointer]).check();
   }
 
-  static final _id_overloaded4 = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"overloaded", r"(Ljava/util/List;)V");
+  static final _id_overloaded4 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"overloaded", r"(Ljava/util/List;)V");
 
   /// from: public void overloaded(java.util.List<java.lang.Integer> a)
   void overloaded4(
     jni.JList<jni.JInteger> a,
   ) {
-    return jni.Jni.accessors.callMethodWithArgs(reference, _id_overloaded4,
-        jni.JniCallType.voidType, [a.reference]).check();
+    return jni.Jni.accessors.callMethodWithArgs(
+        reference.pointer,
+        _id_overloaded4,
+        jni.JniCallType.voidType,
+        [a.reference.pointer]).check();
   }
 }
 
@@ -922,28 +962,29 @@
   /// The type which includes information such as the signature of this class.
   static const type = $C2Type();
   static final _id_CONSTANT = jni.Jni.accessors.getStaticFieldIDOf(
-    _class.reference,
+    _class.reference.pointer,
     r"CONSTANT",
     r"I",
   );
 
   /// from: static public int CONSTANT
   static int get CONSTANT => jni.Jni.accessors
-      .getStaticField(_class.reference, _id_CONSTANT, jni.JniCallType.intType)
+      .getStaticField(
+          _class.reference.pointer, _id_CONSTANT, jni.JniCallType.intType)
       .integer;
 
   /// from: static public int CONSTANT
-  static set CONSTANT(int value) =>
-      jni.Jni.env.SetStaticIntField(_class.reference, _id_CONSTANT, value);
+  static set CONSTANT(int value) => jni.Jni.env
+      .SetStaticIntField(_class.reference.pointer, _id_CONSTANT, value);
 
-  static final _id_new0 =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"()V");
+  static final _id_new0 = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"<init>", r"()V");
 
   /// from: public void <init>()
   /// The returned object must be released after use, by calling the [release] method.
   factory C2() {
     return C2.fromRef(jni.Jni.accessors
-        .newObjectWithArgs(_class.reference, _id_new0, []).object);
+        .newObjectWithArgs(_class.reference.pointer, _id_new0, []).object);
   }
 }
 
@@ -985,23 +1026,23 @@
 
   /// The type which includes information such as the signature of this class.
   static const type = $Example1Type();
-  static final _id_new0 =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"()V");
+  static final _id_new0 = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"<init>", r"()V");
 
   /// from: public void <init>()
   /// The returned object must be released after use, by calling the [release] method.
   factory Example1() {
     return Example1.fromRef(jni.Jni.accessors
-        .newObjectWithArgs(_class.reference, _id_new0, []).object);
+        .newObjectWithArgs(_class.reference.pointer, _id_new0, []).object);
   }
 
   static final _id_whichExample = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"whichExample", r"()I");
+      .getMethodIDOf(_class.reference.pointer, r"whichExample", r"()I");
 
   /// from: public int whichExample()
   int whichExample() {
-    return jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_whichExample, jni.JniCallType.intType, []).integer;
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
+        _id_whichExample, jni.JniCallType.intType, []).integer;
   }
 }
 
@@ -1065,7 +1106,7 @@
   }
 
   static final _id_grandParentValue = jni.Jni.accessors.getFieldIDOf(
-    _class.reference,
+    _class.reference.pointer,
     r"grandParentValue",
     r"Ljava/lang/Object;",
   );
@@ -1073,16 +1114,17 @@
   /// from: public T grandParentValue
   /// The returned object must be released after use, by calling the [release] method.
   $T get grandParentValue => T.fromRef(jni.Jni.accessors
-      .getField(reference, _id_grandParentValue, jni.JniCallType.objectType)
+      .getField(
+          reference.pointer, _id_grandParentValue, jni.JniCallType.objectType)
       .object);
 
   /// from: public T grandParentValue
   /// The returned object must be released after use, by calling the [release] method.
-  set grandParentValue($T value) => jni.Jni.env
-      .SetObjectField(reference, _id_grandParentValue, value.reference);
+  set grandParentValue($T value) => jni.Jni.env.SetObjectField(
+      reference.pointer, _id_grandParentValue, value.reference.pointer);
 
   static final _id_parentValue = jni.Jni.accessors.getFieldIDOf(
-    _class.reference,
+    _class.reference.pointer,
     r"parentValue",
     r"Ljava/lang/Object;",
   );
@@ -1090,16 +1132,16 @@
   /// from: public S parentValue
   /// The returned object must be released after use, by calling the [release] method.
   $S get parentValue => S.fromRef(jni.Jni.accessors
-      .getField(reference, _id_parentValue, jni.JniCallType.objectType)
+      .getField(reference.pointer, _id_parentValue, jni.JniCallType.objectType)
       .object);
 
   /// from: public S parentValue
   /// The returned object must be released after use, by calling the [release] method.
-  set parentValue($S value) =>
-      jni.Jni.env.SetObjectField(reference, _id_parentValue, value.reference);
+  set parentValue($S value) => jni.Jni.env.SetObjectField(
+      reference.pointer, _id_parentValue, value.reference.pointer);
 
   static final _id_value = jni.Jni.accessors.getFieldIDOf(
-    _class.reference,
+    _class.reference.pointer,
     r"value",
     r"Ljava/lang/Object;",
   );
@@ -1107,16 +1149,16 @@
   /// from: public U value
   /// The returned object must be released after use, by calling the [release] method.
   $U get value => U.fromRef(jni.Jni.accessors
-      .getField(reference, _id_value, jni.JniCallType.objectType)
+      .getField(reference.pointer, _id_value, jni.JniCallType.objectType)
       .object);
 
   /// from: public U value
   /// The returned object must be released after use, by calling the [release] method.
-  set value($U value) =>
-      jni.Jni.env.SetObjectField(reference, _id_value, value.reference);
+  set value($U value) => jni.Jni.env
+      .SetObjectField(reference.pointer, _id_value, value.reference.pointer);
 
   static final _id_new0 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"<init>",
       r"(Lcom/github/dart_lang/jnigen/generics/GrandParent$Parent;Ljava/lang/Object;)V");
 
@@ -1142,8 +1184,8 @@
         T,
         S,
         U,
-        jni.Jni.accessors.newObjectWithArgs(_class.reference, _id_new0,
-            [$parent.reference, newValue.reference]).object);
+        jni.Jni.accessors.newObjectWithArgs(_class.reference.pointer, _id_new0,
+            [$parent.reference.pointer, newValue.reference.pointer]).object);
   }
 }
 
@@ -1218,7 +1260,7 @@
   }
 
   static final _id_parentValue = jni.Jni.accessors.getFieldIDOf(
-    _class.reference,
+    _class.reference.pointer,
     r"parentValue",
     r"Ljava/lang/Object;",
   );
@@ -1226,16 +1268,16 @@
   /// from: public T parentValue
   /// The returned object must be released after use, by calling the [release] method.
   $T get parentValue => T.fromRef(jni.Jni.accessors
-      .getField(reference, _id_parentValue, jni.JniCallType.objectType)
+      .getField(reference.pointer, _id_parentValue, jni.JniCallType.objectType)
       .object);
 
   /// from: public T parentValue
   /// The returned object must be released after use, by calling the [release] method.
-  set parentValue($T value) =>
-      jni.Jni.env.SetObjectField(reference, _id_parentValue, value.reference);
+  set parentValue($T value) => jni.Jni.env.SetObjectField(
+      reference.pointer, _id_parentValue, value.reference.pointer);
 
   static final _id_value = jni.Jni.accessors.getFieldIDOf(
-    _class.reference,
+    _class.reference.pointer,
     r"value",
     r"Ljava/lang/Object;",
   );
@@ -1243,16 +1285,16 @@
   /// from: public S value
   /// The returned object must be released after use, by calling the [release] method.
   $S get value => S.fromRef(jni.Jni.accessors
-      .getField(reference, _id_value, jni.JniCallType.objectType)
+      .getField(reference.pointer, _id_value, jni.JniCallType.objectType)
       .object);
 
   /// from: public S value
   /// The returned object must be released after use, by calling the [release] method.
-  set value($S value) =>
-      jni.Jni.env.SetObjectField(reference, _id_value, value.reference);
+  set value($S value) => jni.Jni.env
+      .SetObjectField(reference.pointer, _id_value, value.reference.pointer);
 
   static final _id_new0 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"<init>",
       r"(Lcom/github/dart_lang/jnigen/generics/GrandParent;Ljava/lang/Object;)V");
 
@@ -1273,8 +1315,8 @@
     return GrandParent_Parent.fromRef(
         T,
         S,
-        jni.Jni.accessors.newObjectWithArgs(_class.reference, _id_new0,
-            [$parent.reference, newValue.reference]).object);
+        jni.Jni.accessors.newObjectWithArgs(_class.reference.pointer, _id_new0,
+            [$parent.reference.pointer, newValue.reference.pointer]).object);
   }
 }
 
@@ -1346,7 +1388,7 @@
   }
 
   static final _id_parentValue = jni.Jni.accessors.getFieldIDOf(
-    _class.reference,
+    _class.reference.pointer,
     r"parentValue",
     r"Ljava/lang/Object;",
   );
@@ -1354,16 +1396,16 @@
   /// from: public S parentValue
   /// The returned object must be released after use, by calling the [release] method.
   $S get parentValue => S.fromRef(jni.Jni.accessors
-      .getField(reference, _id_parentValue, jni.JniCallType.objectType)
+      .getField(reference.pointer, _id_parentValue, jni.JniCallType.objectType)
       .object);
 
   /// from: public S parentValue
   /// The returned object must be released after use, by calling the [release] method.
-  set parentValue($S value) =>
-      jni.Jni.env.SetObjectField(reference, _id_parentValue, value.reference);
+  set parentValue($S value) => jni.Jni.env.SetObjectField(
+      reference.pointer, _id_parentValue, value.reference.pointer);
 
   static final _id_value = jni.Jni.accessors.getFieldIDOf(
-    _class.reference,
+    _class.reference.pointer,
     r"value",
     r"Ljava/lang/Object;",
   );
@@ -1371,16 +1413,16 @@
   /// from: public U value
   /// The returned object must be released after use, by calling the [release] method.
   $U get value => U.fromRef(jni.Jni.accessors
-      .getField(reference, _id_value, jni.JniCallType.objectType)
+      .getField(reference.pointer, _id_value, jni.JniCallType.objectType)
       .object);
 
   /// from: public U value
   /// The returned object must be released after use, by calling the [release] method.
-  set value($U value) =>
-      jni.Jni.env.SetObjectField(reference, _id_value, value.reference);
+  set value($U value) => jni.Jni.env
+      .SetObjectField(reference.pointer, _id_value, value.reference.pointer);
 
   static final _id_new0 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"<init>",
       r"(Lcom/github/dart_lang/jnigen/generics/GrandParent$StaticParent;Ljava/lang/Object;Ljava/lang/Object;)V");
 
@@ -1403,10 +1445,11 @@
     return GrandParent_StaticParent_Child.fromRef(
         S,
         U,
-        jni.Jni.accessors.newObjectWithArgs(_class.reference, _id_new0, [
-          $parent.reference,
-          parentValue.reference,
-          value.reference
+        jni.Jni.accessors
+            .newObjectWithArgs(_class.reference.pointer, _id_new0, [
+          $parent.reference.pointer,
+          parentValue.reference.pointer,
+          value.reference.pointer
         ]).object);
   }
 }
@@ -1473,7 +1516,7 @@
   }
 
   static final _id_value = jni.Jni.accessors.getFieldIDOf(
-    _class.reference,
+    _class.reference.pointer,
     r"value",
     r"Ljava/lang/Object;",
   );
@@ -1481,16 +1524,16 @@
   /// from: public S value
   /// The returned object must be released after use, by calling the [release] method.
   $S get value => S.fromRef(jni.Jni.accessors
-      .getField(reference, _id_value, jni.JniCallType.objectType)
+      .getField(reference.pointer, _id_value, jni.JniCallType.objectType)
       .object);
 
   /// from: public S value
   /// The returned object must be released after use, by calling the [release] method.
-  set value($S value) =>
-      jni.Jni.env.SetObjectField(reference, _id_value, value.reference);
+  set value($S value) => jni.Jni.env
+      .SetObjectField(reference.pointer, _id_value, value.reference.pointer);
 
-  static final _id_new0 = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"<init>", r"(Ljava/lang/Object;)V");
+  static final _id_new0 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"<init>", r"(Ljava/lang/Object;)V");
 
   /// from: public void <init>(S value)
   /// The returned object must be released after use, by calling the [release] method.
@@ -1503,8 +1546,8 @@
     ]) as jni.JObjType<$S>;
     return GrandParent_StaticParent.fromRef(
         S,
-        jni.Jni.accessors.newObjectWithArgs(
-            _class.reference, _id_new0, [value.reference]).object);
+        jni.Jni.accessors.newObjectWithArgs(_class.reference.pointer, _id_new0,
+            [value.reference.pointer]).object);
   }
 }
 
@@ -1566,7 +1609,7 @@
   }
 
   static final _id_value = jni.Jni.accessors.getFieldIDOf(
-    _class.reference,
+    _class.reference.pointer,
     r"value",
     r"Ljava/lang/Object;",
   );
@@ -1574,16 +1617,16 @@
   /// from: public T value
   /// The returned object must be released after use, by calling the [release] method.
   $T get value => T.fromRef(jni.Jni.accessors
-      .getField(reference, _id_value, jni.JniCallType.objectType)
+      .getField(reference.pointer, _id_value, jni.JniCallType.objectType)
       .object);
 
   /// from: public T value
   /// The returned object must be released after use, by calling the [release] method.
-  set value($T value) =>
-      jni.Jni.env.SetObjectField(reference, _id_value, value.reference);
+  set value($T value) => jni.Jni.env
+      .SetObjectField(reference.pointer, _id_value, value.reference.pointer);
 
-  static final _id_new0 = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"<init>", r"(Ljava/lang/Object;)V");
+  static final _id_new0 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"<init>", r"(Ljava/lang/Object;)V");
 
   /// from: public void <init>(T value)
   /// The returned object must be released after use, by calling the [release] method.
@@ -1596,12 +1639,12 @@
     ]) as jni.JObjType<$T>;
     return GrandParent.fromRef(
         T,
-        jni.Jni.accessors.newObjectWithArgs(
-            _class.reference, _id_new0, [value.reference]).object);
+        jni.Jni.accessors.newObjectWithArgs(_class.reference.pointer, _id_new0,
+            [value.reference.pointer]).object);
   }
 
   static final _id_stringParent = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"stringParent",
       r"()Lcom/github/dart_lang/jnigen/generics/GrandParent$Parent;");
 
@@ -1609,12 +1652,12 @@
   /// The returned object must be released after use, by calling the [release] method.
   GrandParent_Parent<jni.JObject, jni.JString> stringParent() {
     return const $GrandParent_ParentType(jni.JObjectType(), jni.JStringType())
-        .fromRef(jni.Jni.accessors.callMethodWithArgs(reference,
+        .fromRef(jni.Jni.accessors.callMethodWithArgs(reference.pointer,
             _id_stringParent, jni.JniCallType.objectType, []).object);
   }
 
   static final _id_varParent = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"varParent",
       r"(Ljava/lang/Object;)Lcom/github/dart_lang/jnigen/generics/GrandParent$Parent;");
 
@@ -1628,12 +1671,15 @@
       nestedValue.$type,
     ]) as jni.JObjType<$S>;
     return $GrandParent_ParentType(const jni.JObjectType(), S).fromRef(
-        jni.Jni.accessors.callMethodWithArgs(reference, _id_varParent,
-            jni.JniCallType.objectType, [nestedValue.reference]).object);
+        jni.Jni.accessors.callMethodWithArgs(
+            reference.pointer,
+            _id_varParent,
+            jni.JniCallType.objectType,
+            [nestedValue.reference.pointer]).object);
   }
 
   static final _id_stringStaticParent = jni.Jni.accessors.getStaticMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"stringStaticParent",
       r"()Lcom/github/dart_lang/jnigen/generics/GrandParent$StaticParent;");
 
@@ -1641,12 +1687,12 @@
   /// The returned object must be released after use, by calling the [release] method.
   static GrandParent_StaticParent<jni.JString> stringStaticParent() {
     return const $GrandParent_StaticParentType(jni.JStringType()).fromRef(
-        jni.Jni.accessors.callStaticMethodWithArgs(_class.reference,
+        jni.Jni.accessors.callStaticMethodWithArgs(_class.reference.pointer,
             _id_stringStaticParent, jni.JniCallType.objectType, []).object);
   }
 
   static final _id_varStaticParent = jni.Jni.accessors.getStaticMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"varStaticParent",
       r"(Ljava/lang/Object;)Lcom/github/dart_lang/jnigen/generics/GrandParent$StaticParent;");
 
@@ -1660,12 +1706,12 @@
       value.$type,
     ]) as jni.JObjType<$S>;
     return $GrandParent_StaticParentType(S).fromRef(jni.Jni.accessors
-        .callStaticMethodWithArgs(_class.reference, _id_varStaticParent,
-            jni.JniCallType.objectType, [value.reference]).object);
+        .callStaticMethodWithArgs(_class.reference.pointer, _id_varStaticParent,
+            jni.JniCallType.objectType, [value.reference.pointer]).object);
   }
 
   static final _id_staticParentWithSameType = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"staticParentWithSameType",
       r"()Lcom/github/dart_lang/jnigen/generics/GrandParent$StaticParent;");
 
@@ -1673,7 +1719,7 @@
   /// The returned object must be released after use, by calling the [release] method.
   GrandParent_StaticParent<$T> staticParentWithSameType() {
     return $GrandParent_StaticParentType(T).fromRef(jni.Jni.accessors
-        .callMethodWithArgs(reference, _id_staticParentWithSameType,
+        .callMethodWithArgs(reference.pointer, _id_staticParentWithSameType,
             jni.JniCallType.objectType, []).object);
   }
 }
@@ -1740,7 +1786,7 @@
   }
 
   static final _id_key = jni.Jni.accessors.getFieldIDOf(
-    _class.reference,
+    _class.reference.pointer,
     r"key",
     r"Ljava/lang/Object;",
   );
@@ -1748,16 +1794,16 @@
   /// from: public K key
   /// The returned object must be released after use, by calling the [release] method.
   $K get key => K.fromRef(jni.Jni.accessors
-      .getField(reference, _id_key, jni.JniCallType.objectType)
+      .getField(reference.pointer, _id_key, jni.JniCallType.objectType)
       .object);
 
   /// from: public K key
   /// The returned object must be released after use, by calling the [release] method.
-  set key($K value) =>
-      jni.Jni.env.SetObjectField(reference, _id_key, value.reference);
+  set key($K value) => jni.Jni.env
+      .SetObjectField(reference.pointer, _id_key, value.reference.pointer);
 
   static final _id_value = jni.Jni.accessors.getFieldIDOf(
-    _class.reference,
+    _class.reference.pointer,
     r"value",
     r"Ljava/lang/Object;",
   );
@@ -1765,16 +1811,16 @@
   /// from: public V value
   /// The returned object must be released after use, by calling the [release] method.
   $V get value => V.fromRef(jni.Jni.accessors
-      .getField(reference, _id_value, jni.JniCallType.objectType)
+      .getField(reference.pointer, _id_value, jni.JniCallType.objectType)
       .object);
 
   /// from: public V value
   /// The returned object must be released after use, by calling the [release] method.
-  set value($V value) =>
-      jni.Jni.env.SetObjectField(reference, _id_value, value.reference);
+  set value($V value) => jni.Jni.env
+      .SetObjectField(reference.pointer, _id_value, value.reference.pointer);
 
   static final _id_new0 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"<init>",
       r"(Lcom/github/dart_lang/jnigen/generics/MyMap;Ljava/lang/Object;Ljava/lang/Object;)V");
 
@@ -1798,8 +1844,12 @@
     return MyMap_MyEntry.fromRef(
         K,
         V,
-        jni.Jni.accessors.newObjectWithArgs(_class.reference, _id_new0,
-            [$parent.reference, key.reference, value.reference]).object);
+        jni.Jni.accessors.newObjectWithArgs(
+            _class.reference.pointer, _id_new0, [
+          $parent.reference.pointer,
+          key.reference.pointer,
+          value.reference.pointer
+        ]).object);
   }
 }
 
@@ -1869,8 +1919,8 @@
     );
   }
 
-  static final _id_new0 =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"()V");
+  static final _id_new0 = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"<init>", r"()V");
 
   /// from: public void <init>()
   /// The returned object must be released after use, by calling the [release] method.
@@ -1882,23 +1932,27 @@
         K,
         V,
         jni.Jni.accessors
-            .newObjectWithArgs(_class.reference, _id_new0, []).object);
+            .newObjectWithArgs(_class.reference.pointer, _id_new0, []).object);
   }
 
   static final _id_get0 = jni.Jni.accessors.getMethodIDOf(
-      _class.reference, r"get", r"(Ljava/lang/Object;)Ljava/lang/Object;");
+      _class.reference.pointer,
+      r"get",
+      r"(Ljava/lang/Object;)Ljava/lang/Object;");
 
   /// from: public V get(K key)
   /// The returned object must be released after use, by calling the [release] method.
   $V get0(
     $K key,
   ) {
-    return V.fromRef(jni.Jni.accessors.callMethodWithArgs(reference, _id_get0,
-        jni.JniCallType.objectType, [key.reference]).object);
+    return V.fromRef(jni.Jni.accessors.callMethodWithArgs(reference.pointer,
+        _id_get0, jni.JniCallType.objectType, [key.reference.pointer]).object);
   }
 
-  static final _id_put = jni.Jni.accessors.getMethodIDOf(_class.reference,
-      r"put", r"(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
+  static final _id_put = jni.Jni.accessors.getMethodIDOf(
+      _class.reference.pointer,
+      r"put",
+      r"(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
 
   /// from: public V put(K key, V value)
   /// The returned object must be released after use, by calling the [release] method.
@@ -1906,12 +1960,15 @@
     $K key,
     $V value,
   ) {
-    return V.fromRef(jni.Jni.accessors.callMethodWithArgs(reference, _id_put,
-        jni.JniCallType.objectType, [key.reference, value.reference]).object);
+    return V.fromRef(jni.Jni.accessors.callMethodWithArgs(
+        reference.pointer,
+        _id_put,
+        jni.JniCallType.objectType,
+        [key.reference.pointer, value.reference.pointer]).object);
   }
 
   static final _id_entryStack = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"entryStack",
       r"()Lcom/github/dart_lang/jnigen/generics/MyStack;");
 
@@ -1920,8 +1977,8 @@
   MyStack<MyMap_MyEntry<jni.JObject, jni.JObject>> entryStack() {
     return const $MyStackType(
             $MyMap_MyEntryType(jni.JObjectType(), jni.JObjectType()))
-        .fromRef(jni.Jni.accessors.callMethodWithArgs(
-            reference, _id_entryStack, jni.JniCallType.objectType, []).object);
+        .fromRef(jni.Jni.accessors.callMethodWithArgs(reference.pointer,
+            _id_entryStack, jni.JniCallType.objectType, []).object);
   }
 }
 
@@ -1983,8 +2040,8 @@
     );
   }
 
-  static final _id_new0 =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"()V");
+  static final _id_new0 = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"<init>", r"()V");
 
   /// from: public void <init>()
   /// The returned object must be released after use, by calling the [release] method.
@@ -1994,11 +2051,11 @@
     return MyStack.fromRef(
         T,
         jni.Jni.accessors
-            .newObjectWithArgs(_class.reference, _id_new0, []).object);
+            .newObjectWithArgs(_class.reference.pointer, _id_new0, []).object);
   }
 
   static final _id_fromArray = jni.Jni.accessors.getStaticMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"fromArray",
       r"([Ljava/lang/Object;)Lcom/github/dart_lang/jnigen/generics/MyStack;");
 
@@ -2012,14 +2069,16 @@
       ((arr.$type as jni.JArrayType).elementType as jni.JObjType),
     ]) as jni.JObjType<$T>;
     return $MyStackType(T).fromRef(jni.Jni.accessors.callStaticMethodWithArgs(
-        _class.reference,
+        _class.reference.pointer,
         _id_fromArray,
         jni.JniCallType.objectType,
-        [arr.reference]).object);
+        [arr.reference.pointer]).object);
   }
 
   static final _id_fromArrayOfArrayOfGrandParents = jni.Jni.accessors
-      .getStaticMethodIDOf(_class.reference, r"fromArrayOfArrayOfGrandParents",
+      .getStaticMethodIDOf(
+          _class.reference.pointer,
+          r"fromArrayOfArrayOfGrandParents",
           r"([[Lcom/github/dart_lang/jnigen/generics/GrandParent;)Lcom/github/dart_lang/jnigen/generics/MyStack;");
 
   /// from: static public com.github.dart_lang.jnigen.generics.MyStack<S> fromArrayOfArrayOfGrandParents(com.github.dart_lang.jnigen.generics.GrandParent<S>[][] arr)
@@ -2035,14 +2094,16 @@
           .T,
     ]) as jni.JObjType<$S>;
     return $MyStackType(S).fromRef(jni.Jni.accessors.callStaticMethodWithArgs(
-        _class.reference,
+        _class.reference.pointer,
         _id_fromArrayOfArrayOfGrandParents,
         jni.JniCallType.objectType,
-        [arr.reference]).object);
+        [arr.reference.pointer]).object);
   }
 
-  static final _id_of = jni.Jni.accessors.getStaticMethodIDOf(_class.reference,
-      r"of", r"()Lcom/github/dart_lang/jnigen/generics/MyStack;");
+  static final _id_of = jni.Jni.accessors.getStaticMethodIDOf(
+      _class.reference.pointer,
+      r"of",
+      r"()Lcom/github/dart_lang/jnigen/generics/MyStack;");
 
   /// from: static public com.github.dart_lang.jnigen.generics.MyStack<T> of()
   /// The returned object must be released after use, by calling the [release] method.
@@ -2050,11 +2111,13 @@
     required jni.JObjType<$T> T,
   }) {
     return $MyStackType(T).fromRef(jni.Jni.accessors.callStaticMethodWithArgs(
-        _class.reference, _id_of, jni.JniCallType.objectType, []).object);
+        _class.reference.pointer,
+        _id_of,
+        jni.JniCallType.objectType, []).object);
   }
 
   static final _id_of1 = jni.Jni.accessors.getStaticMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"of",
       r"(Ljava/lang/Object;)Lcom/github/dart_lang/jnigen/generics/MyStack;");
 
@@ -2068,14 +2131,14 @@
       obj.$type,
     ]) as jni.JObjType<$T>;
     return $MyStackType(T).fromRef(jni.Jni.accessors.callStaticMethodWithArgs(
-        _class.reference,
+        _class.reference.pointer,
         _id_of1,
         jni.JniCallType.objectType,
-        [obj.reference]).object);
+        [obj.reference.pointer]).object);
   }
 
   static final _id_of2 = jni.Jni.accessors.getStaticMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"of",
       r"(Ljava/lang/Object;Ljava/lang/Object;)Lcom/github/dart_lang/jnigen/generics/MyStack;");
 
@@ -2091,40 +2154,40 @@
       obj.$type,
     ]) as jni.JObjType<$T>;
     return $MyStackType(T).fromRef(jni.Jni.accessors.callStaticMethodWithArgs(
-        _class.reference,
+        _class.reference.pointer,
         _id_of2,
         jni.JniCallType.objectType,
-        [obj.reference, obj2.reference]).object);
+        [obj.reference.pointer, obj2.reference.pointer]).object);
   }
 
-  static final _id_push = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"push", r"(Ljava/lang/Object;)V");
+  static final _id_push = jni.Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"push", r"(Ljava/lang/Object;)V");
 
   /// from: public void push(T item)
   void push(
     $T item,
   ) {
-    return jni.Jni.accessors.callMethodWithArgs(reference, _id_push,
-        jni.JniCallType.voidType, [item.reference]).check();
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer, _id_push,
+        jni.JniCallType.voidType, [item.reference.pointer]).check();
   }
 
   static final _id_pop = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"pop", r"()Ljava/lang/Object;");
+      .getMethodIDOf(_class.reference.pointer, r"pop", r"()Ljava/lang/Object;");
 
   /// from: public T pop()
   /// The returned object must be released after use, by calling the [release] method.
   $T pop() {
     return T.fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_pop, jni.JniCallType.objectType, []).object);
+        reference.pointer, _id_pop, jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_size =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"size", r"()I");
+  static final _id_size = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"size", r"()I");
 
   /// from: public int size()
   int size() {
     return jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_size, jni.JniCallType.intType, []).integer;
+        reference.pointer, _id_size, jni.JniCallType.intType, []).integer;
   }
 }
 
@@ -2183,8 +2246,8 @@
     );
   }
 
-  static final _id_new0 =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"()V");
+  static final _id_new0 = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"<init>", r"()V");
 
   /// from: public void <init>()
   /// The returned object must be released after use, by calling the [release] method.
@@ -2194,7 +2257,7 @@
     return StringKeyedMap.fromRef(
         V,
         jni.Jni.accessors
-            .newObjectWithArgs(_class.reference, _id_new0, []).object);
+            .newObjectWithArgs(_class.reference.pointer, _id_new0, []).object);
   }
 }
 
@@ -2245,14 +2308,14 @@
 
   /// The type which includes information such as the signature of this class.
   static const type = $StringStackType();
-  static final _id_new0 =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"()V");
+  static final _id_new0 = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"<init>", r"()V");
 
   /// from: public void <init>()
   /// The returned object must be released after use, by calling the [release] method.
   factory StringStack() {
     return StringStack.fromRef(jni.Jni.accessors
-        .newObjectWithArgs(_class.reference, _id_new0, []).object);
+        .newObjectWithArgs(_class.reference.pointer, _id_new0, []).object);
   }
 }
 
@@ -2304,8 +2367,8 @@
     );
   }
 
-  static final _id_new0 =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"()V");
+  static final _id_new0 = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"<init>", r"()V");
 
   /// from: public void <init>()
   /// The returned object must be released after use, by calling the [release] method.
@@ -2315,7 +2378,7 @@
     return StringValuedMap.fromRef(
         K,
         jni.Jni.accessors
-            .newObjectWithArgs(_class.reference, _id_new0, []).object);
+            .newObjectWithArgs(_class.reference.pointer, _id_new0, []).object);
   }
 }
 
@@ -2377,18 +2440,21 @@
   }
 
   static final _id_voidCallback = jni.Jni.accessors.getMethodIDOf(
-      _class.reference, r"voidCallback", r"(Ljava/lang/String;)V");
+      _class.reference.pointer, r"voidCallback", r"(Ljava/lang/String;)V");
 
   /// from: public abstract void voidCallback(java.lang.String s)
   void voidCallback(
     jni.JString s,
   ) {
-    return jni.Jni.accessors.callMethodWithArgs(reference, _id_voidCallback,
-        jni.JniCallType.voidType, [s.reference]).check();
+    return jni.Jni.accessors.callMethodWithArgs(
+        reference.pointer,
+        _id_voidCallback,
+        jni.JniCallType.voidType,
+        [s.reference.pointer]).check();
   }
 
   static final _id_stringCallback = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"stringCallback",
       r"(Ljava/lang/String;)Ljava/lang/String;");
 
@@ -2398,14 +2464,14 @@
     jni.JString s,
   ) {
     return const jni.JStringType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_stringCallback,
         jni.JniCallType.objectType,
-        [s.reference]).object);
+        [s.reference.pointer]).object);
   }
 
   static final _id_varCallback = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"varCallback",
       r"(Ljava/lang/Object;)Ljava/lang/Object;");
 
@@ -2414,12 +2480,15 @@
   $T varCallback(
     $T t,
   ) {
-    return T.fromRef(jni.Jni.accessors.callMethodWithArgs(reference,
-        _id_varCallback, jni.JniCallType.objectType, [t.reference]).object);
+    return T.fromRef(jni.Jni.accessors.callMethodWithArgs(
+        reference.pointer,
+        _id_varCallback,
+        jni.JniCallType.objectType,
+        [t.reference.pointer]).object);
   }
 
   static final _id_manyPrimitives = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"manyPrimitives", r"(IZCD)J");
+      .getMethodIDOf(_class.reference.pointer, r"manyPrimitives", r"(IZCD)J");
 
   /// from: public abstract long manyPrimitives(int a, boolean b, char c, double d)
   int manyPrimitives(
@@ -2429,7 +2498,7 @@
     double d,
   ) {
     return jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_manyPrimitives,
         jni.JniCallType.longType,
         [jni.JValueInt(a), b ? 1 : 0, jni.JValueChar(c), d]).long;
@@ -2477,13 +2546,19 @@
         final $r = _$impls[$p]!.stringCallback(
           $a[0].castTo(const jni.JStringType(), releaseOriginal: true),
         );
-        return ($r as jni.JObject).castTo(const jni.JObjectType()).toPointer();
+        return ($r as jni.JObject)
+            .castTo(const jni.JObjectType())
+            .reference
+            .toPointer();
       }
       if ($d == r"varCallback(Ljava/lang/Object;)Ljava/lang/Object;") {
         final $r = _$impls[$p]!.varCallback(
           $a[0].castTo(_$impls[$p]!.T, releaseOriginal: true),
         );
-        return ($r as jni.JObject).castTo(const jni.JObjectType()).toPointer();
+        return ($r as jni.JObject)
+            .castTo(const jni.JObjectType())
+            .reference
+            .toPointer();
       }
       if ($d == r"manyPrimitives(IZCD)J") {
         final $r = _$impls[$p]!.manyPrimitives(
@@ -2500,7 +2575,7 @@
               .castTo(const jni.JDoubleType(), releaseOriginal: true)
               .doubleValue(releaseOriginal: true),
         );
-        return jni.JLong($r).toPointer();
+        return jni.JLong($r).reference.toPointer();
       }
     } catch (e) {
       return ProtectedJniExtensions.newDartException(e.toString());
@@ -2638,18 +2713,18 @@
 
   /// The type which includes information such as the signature of this class.
   static const type = $MyInterfaceConsumerType();
-  static final _id_new0 =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"()V");
+  static final _id_new0 = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"<init>", r"()V");
 
   /// from: public void <init>()
   /// The returned object must be released after use, by calling the [release] method.
   factory MyInterfaceConsumer() {
     return MyInterfaceConsumer.fromRef(jni.Jni.accessors
-        .newObjectWithArgs(_class.reference, _id_new0, []).object);
+        .newObjectWithArgs(_class.reference.pointer, _id_new0, []).object);
   }
 
   static final _id_consumeOnAnotherThread = jni.Jni.accessors.getStaticMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"consumeOnAnotherThread",
       r"(Lcom/github/dart_lang/jnigen/interfaces/MyInterface;Ljava/lang/String;IZCDLjava/lang/Object;)V");
 
@@ -2668,20 +2743,20 @@
       t.$type,
       (myInterface.$type as $MyInterfaceType).T,
     ]) as jni.JObjType<$T>;
-    return jni.Jni.accessors.callStaticMethodWithArgs(_class.reference,
+    return jni.Jni.accessors.callStaticMethodWithArgs(_class.reference.pointer,
         _id_consumeOnAnotherThread, jni.JniCallType.voidType, [
-      myInterface.reference,
-      s.reference,
+      myInterface.reference.pointer,
+      s.reference.pointer,
       jni.JValueInt(a),
       b ? 1 : 0,
       jni.JValueChar(c),
       d,
-      t.reference
+      t.reference.pointer
     ]).check();
   }
 
   static final _id_consumeOnSameThread = jni.Jni.accessors.getStaticMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"consumeOnSameThread",
       r"(Lcom/github/dart_lang/jnigen/interfaces/MyInterface;Ljava/lang/String;IZCDLjava/lang/Object;)V");
 
@@ -2700,15 +2775,15 @@
       t.$type,
       (myInterface.$type as $MyInterfaceType).T,
     ]) as jni.JObjType<$T>;
-    return jni.Jni.accessors.callStaticMethodWithArgs(
-        _class.reference, _id_consumeOnSameThread, jni.JniCallType.voidType, [
-      myInterface.reference,
-      s.reference,
+    return jni.Jni.accessors.callStaticMethodWithArgs(_class.reference.pointer,
+        _id_consumeOnSameThread, jni.JniCallType.voidType, [
+      myInterface.reference.pointer,
+      s.reference.pointer,
       jni.JValueInt(a),
       b ? 1 : 0,
       jni.JValueChar(c),
       d,
-      t.reference
+      t.reference.pointer
     ]).check();
   }
 }
@@ -2755,12 +2830,12 @@
   /// The type which includes information such as the signature of this class.
   static const type = $MyRunnableType();
   static final _id_run =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"run", r"()V");
+      jni.Jni.accessors.getMethodIDOf(_class.reference.pointer, r"run", r"()V");
 
   /// from: public abstract void run()
   void run() {
     return jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_run, jni.JniCallType.voidType, []).check();
+        reference.pointer, _id_run, jni.JniCallType.voidType, []).check();
   }
 
   /// Maps a specific port to the implemented interface.
@@ -2892,7 +2967,7 @@
   /// The type which includes information such as the signature of this class.
   static const type = $MyRunnableRunnerType();
   static final _id_error = jni.Jni.accessors.getFieldIDOf(
-    _class.reference,
+    _class.reference.pointer,
     r"error",
     r"Ljava/lang/Throwable;",
   );
@@ -2900,16 +2975,18 @@
   /// from: public java.lang.Throwable error
   /// The returned object must be released after use, by calling the [release] method.
   jni.JObject get error => const jni.JObjectType().fromRef(jni.Jni.accessors
-      .getField(reference, _id_error, jni.JniCallType.objectType)
+      .getField(reference.pointer, _id_error, jni.JniCallType.objectType)
       .object);
 
   /// from: public java.lang.Throwable error
   /// The returned object must be released after use, by calling the [release] method.
-  set error(jni.JObject value) =>
-      jni.Jni.env.SetObjectField(reference, _id_error, value.reference);
+  set error(jni.JObject value) => jni.Jni.env
+      .SetObjectField(reference.pointer, _id_error, value.reference.pointer);
 
-  static final _id_new0 = jni.Jni.accessors.getMethodIDOf(_class.reference,
-      r"<init>", r"(Lcom/github/dart_lang/jnigen/interfaces/MyRunnable;)V");
+  static final _id_new0 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference.pointer,
+      r"<init>",
+      r"(Lcom/github/dart_lang/jnigen/interfaces/MyRunnable;)V");
 
   /// from: public void <init>(com.github.dart_lang.jnigen.interfaces.MyRunnable runnable)
   /// The returned object must be released after use, by calling the [release] method.
@@ -2917,24 +2994,26 @@
     MyRunnable runnable,
   ) {
     return MyRunnableRunner.fromRef(jni.Jni.accessors.newObjectWithArgs(
-        _class.reference, _id_new0, [runnable.reference]).object);
+        _class.reference.pointer,
+        _id_new0,
+        [runnable.reference.pointer]).object);
   }
 
   static final _id_runOnSameThread = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"runOnSameThread", r"()V");
+      .getMethodIDOf(_class.reference.pointer, r"runOnSameThread", r"()V");
 
   /// from: public void runOnSameThread()
   void runOnSameThread() {
-    return jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_runOnSameThread, jni.JniCallType.voidType, []).check();
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
+        _id_runOnSameThread, jni.JniCallType.voidType, []).check();
   }
 
   static final _id_runOnAnotherThread = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"runOnAnotherThread", r"()V");
+      .getMethodIDOf(_class.reference.pointer, r"runOnAnotherThread", r"()V");
 
   /// from: public void runOnAnotherThread()
   void runOnAnotherThread() {
-    return jni.Jni.accessors.callMethodWithArgs(reference,
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
         _id_runOnAnotherThread, jni.JniCallType.voidType, []).check();
   }
 }
@@ -2980,7 +3059,7 @@
   /// The type which includes information such as the signature of this class.
   static const type = $JsonSerializable_CaseType();
   static final _id_values = jni.Jni.accessors.getStaticMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"values",
       r"()[Lcom/github/dart_lang/jnigen/annotations/JsonSerializable$Case;");
 
@@ -2988,12 +3067,12 @@
   /// The returned object must be released after use, by calling the [release] method.
   static jni.JArray<JsonSerializable_Case> values() {
     return const jni.JArrayType($JsonSerializable_CaseType()).fromRef(
-        jni.Jni.accessors.callStaticMethodWithArgs(_class.reference, _id_values,
-            jni.JniCallType.objectType, []).object);
+        jni.Jni.accessors.callStaticMethodWithArgs(_class.reference.pointer,
+            _id_values, jni.JniCallType.objectType, []).object);
   }
 
   static final _id_valueOf = jni.Jni.accessors.getStaticMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"valueOf",
       r"(Ljava/lang/String;)Lcom/github/dart_lang/jnigen/annotations/JsonSerializable$Case;");
 
@@ -3003,8 +3082,8 @@
     jni.JString name,
   ) {
     return const $JsonSerializable_CaseType().fromRef(jni.Jni.accessors
-        .callStaticMethodWithArgs(_class.reference, _id_valueOf,
-            jni.JniCallType.objectType, [name.reference]).object);
+        .callStaticMethodWithArgs(_class.reference.pointer, _id_valueOf,
+            jni.JniCallType.objectType, [name.reference.pointer]).object);
   }
 }
 
@@ -3051,7 +3130,7 @@
   /// The type which includes information such as the signature of this class.
   static const type = $JsonSerializableType();
   static final _id_value = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"value",
       r"()Lcom/github/dart_lang/jnigen/annotations/JsonSerializable$Case;");
 
@@ -3059,8 +3138,8 @@
   /// The returned object must be released after use, by calling the [release] method.
   JsonSerializable_Case value() {
     return const $JsonSerializable_CaseType().fromRef(jni.Jni.accessors
-        .callMethodWithArgs(
-            reference, _id_value, jni.JniCallType.objectType, []).object);
+        .callMethodWithArgs(reference.pointer, _id_value,
+            jni.JniCallType.objectType, []).object);
   }
 
   /// Maps a specific port to the implemented interface.
@@ -3098,7 +3177,10 @@
       if ($d ==
           r"value()Lcom/github/dart_lang/jnigen/annotations/JsonSerializable$Case;") {
         final $r = _$impls[$p]!.value();
-        return ($r as jni.JObject).castTo(const jni.JObjectType()).toPointer();
+        return ($r as jni.JObject)
+            .castTo(const jni.JObjectType())
+            .reference
+            .toPointer();
       }
     } catch (e) {
       return ProtectedJniExtensions.newDartException(e.toString());
@@ -3193,14 +3275,14 @@
 
   /// The type which includes information such as the signature of this class.
   static const type = $MyDataClassType();
-  static final _id_new0 =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"()V");
+  static final _id_new0 = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"<init>", r"()V");
 
   /// from: public void <init>()
   /// The returned object must be released after use, by calling the [release] method.
   factory MyDataClass() {
     return MyDataClass.fromRef(jni.Jni.accessors
-        .newObjectWithArgs(_class.reference, _id_new0, []).object);
+        .newObjectWithArgs(_class.reference.pointer, _id_new0, []).object);
   }
 }
 
@@ -3244,7 +3326,7 @@
   /// The type which includes information such as the signature of this class.
   static const type = $ColorType();
   static final _id_values = jni.Jni.accessors.getStaticMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"values",
       r"()[Lcom/github/dart_lang/jnigen/simple_package/Color;");
 
@@ -3252,12 +3334,12 @@
   /// The returned object must be released after use, by calling the [release] method.
   static jni.JArray<Color> values() {
     return const jni.JArrayType($ColorType()).fromRef(jni.Jni.accessors
-        .callStaticMethodWithArgs(_class.reference, _id_values,
+        .callStaticMethodWithArgs(_class.reference.pointer, _id_values,
             jni.JniCallType.objectType, []).object);
   }
 
   static final _id_valueOf = jni.Jni.accessors.getStaticMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"valueOf",
       r"(Ljava/lang/String;)Lcom/github/dart_lang/jnigen/simple_package/Color;");
 
@@ -3267,8 +3349,8 @@
     jni.JString name,
   ) {
     return const $ColorType().fromRef(jni.Jni.accessors
-        .callStaticMethodWithArgs(_class.reference, _id_valueOf,
-            jni.JniCallType.objectType, [name.reference]).object);
+        .callStaticMethodWithArgs(_class.reference.pointer, _id_valueOf,
+            jni.JniCallType.objectType, [name.reference.pointer]).object);
   }
 }
 
@@ -3310,18 +3392,18 @@
 
   /// The type which includes information such as the signature of this class.
   static const type = $ExceptionsType();
-  static final _id_new0 =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"()V");
+  static final _id_new0 = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"<init>", r"()V");
 
   /// from: public void <init>()
   /// The returned object must be released after use, by calling the [release] method.
   factory Exceptions() {
     return Exceptions.fromRef(jni.Jni.accessors
-        .newObjectWithArgs(_class.reference, _id_new0, []).object);
+        .newObjectWithArgs(_class.reference.pointer, _id_new0, []).object);
   }
 
-  static final _id_new1 =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"(F)V");
+  static final _id_new1 = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"<init>", r"(F)V");
 
   /// from: public void <init>(float x)
   /// The returned object must be released after use, by calling the [release] method.
@@ -3329,11 +3411,11 @@
     double x,
   ) {
     return Exceptions.fromRef(jni.Jni.accessors.newObjectWithArgs(
-        _class.reference, _id_new1, [jni.JValueFloat(x)]).object);
+        _class.reference.pointer, _id_new1, [jni.JValueFloat(x)]).object);
   }
 
   static final _id_new2 = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"<init>", r"(IIIIII)V");
+      .getMethodIDOf(_class.reference.pointer, r"<init>", r"(IIIIII)V");
 
   /// from: public void <init>(int a, int b, int c, int d, int e, int f)
   /// The returned object must be released after use, by calling the [release] method.
@@ -3345,8 +3427,8 @@
     int e,
     int f,
   ) {
-    return Exceptions.fromRef(
-        jni.Jni.accessors.newObjectWithArgs(_class.reference, _id_new2, [
+    return Exceptions.fromRef(jni.Jni.accessors
+        .newObjectWithArgs(_class.reference.pointer, _id_new2, [
       jni.JValueInt(a),
       jni.JValueInt(b),
       jni.JValueInt(c),
@@ -3357,100 +3439,104 @@
   }
 
   static final _id_staticObjectMethod = jni.Jni.accessors.getStaticMethodIDOf(
-      _class.reference, r"staticObjectMethod", r"()Ljava/lang/Object;");
+      _class.reference.pointer, r"staticObjectMethod", r"()Ljava/lang/Object;");
 
   /// from: static public java.lang.Object staticObjectMethod()
   /// The returned object must be released after use, by calling the [release] method.
   static jni.JObject staticObjectMethod() {
     return const jni.JObjectType().fromRef(jni.Jni.accessors
-        .callStaticMethodWithArgs(_class.reference, _id_staticObjectMethod,
-            jni.JniCallType.objectType, []).object);
+        .callStaticMethodWithArgs(_class.reference.pointer,
+            _id_staticObjectMethod, jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_staticIntMethod = jni.Jni.accessors
-      .getStaticMethodIDOf(_class.reference, r"staticIntMethod", r"()I");
+  static final _id_staticIntMethod = jni.Jni.accessors.getStaticMethodIDOf(
+      _class.reference.pointer, r"staticIntMethod", r"()I");
 
   /// from: static public int staticIntMethod()
   static int staticIntMethod() {
-    return jni.Jni.accessors.callStaticMethodWithArgs(_class.reference,
+    return jni.Jni.accessors.callStaticMethodWithArgs(_class.reference.pointer,
         _id_staticIntMethod, jni.JniCallType.intType, []).integer;
   }
 
   static final _id_staticObjectArrayMethod = jni.Jni.accessors
-      .getStaticMethodIDOf(_class.reference, r"staticObjectArrayMethod",
+      .getStaticMethodIDOf(_class.reference.pointer, r"staticObjectArrayMethod",
           r"()[Ljava/lang/Object;");
 
   /// from: static public java.lang.Object[] staticObjectArrayMethod()
   /// The returned object must be released after use, by calling the [release] method.
   static jni.JArray<jni.JObject> staticObjectArrayMethod() {
     return const jni.JArrayType(jni.JObjectType()).fromRef(jni.Jni.accessors
-        .callStaticMethodWithArgs(_class.reference, _id_staticObjectArrayMethod,
+        .callStaticMethodWithArgs(
+            _class.reference.pointer,
+            _id_staticObjectArrayMethod,
             jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_staticIntArrayMethod = jni.Jni.accessors
-      .getStaticMethodIDOf(_class.reference, r"staticIntArrayMethod", r"()[I");
+  static final _id_staticIntArrayMethod = jni.Jni.accessors.getStaticMethodIDOf(
+      _class.reference.pointer, r"staticIntArrayMethod", r"()[I");
 
   /// from: static public int[] staticIntArrayMethod()
   /// The returned object must be released after use, by calling the [release] method.
   static jni.JArray<jni.jint> staticIntArrayMethod() {
     return const jni.JArrayType(jni.jintType()).fromRef(jni.Jni.accessors
-        .callStaticMethodWithArgs(_class.reference, _id_staticIntArrayMethod,
-            jni.JniCallType.objectType, []).object);
+        .callStaticMethodWithArgs(_class.reference.pointer,
+            _id_staticIntArrayMethod, jni.JniCallType.objectType, []).object);
   }
 
   static final _id_objectMethod = jni.Jni.accessors.getMethodIDOf(
-      _class.reference, r"objectMethod", r"()Ljava/lang/Object;");
+      _class.reference.pointer, r"objectMethod", r"()Ljava/lang/Object;");
 
   /// from: public java.lang.Object objectMethod()
   /// The returned object must be released after use, by calling the [release] method.
   jni.JObject objectMethod() {
     return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_objectMethod, jni.JniCallType.objectType, []).object);
+        reference.pointer,
+        _id_objectMethod,
+        jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_intMethod =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"intMethod", r"()I");
+  static final _id_intMethod = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"intMethod", r"()I");
 
   /// from: public int intMethod()
   int intMethod() {
     return jni.Jni.accessors.callMethodWithArgs(
-        reference, _id_intMethod, jni.JniCallType.intType, []).integer;
+        reference.pointer, _id_intMethod, jni.JniCallType.intType, []).integer;
   }
 
   static final _id_objectArrayMethod = jni.Jni.accessors.getMethodIDOf(
-      _class.reference, r"objectArrayMethod", r"()[Ljava/lang/Object;");
+      _class.reference.pointer, r"objectArrayMethod", r"()[Ljava/lang/Object;");
 
   /// from: public java.lang.Object[] objectArrayMethod()
   /// The returned object must be released after use, by calling the [release] method.
   jni.JArray<jni.JObject> objectArrayMethod() {
     return const jni.JArrayType(jni.JObjectType()).fromRef(jni.Jni.accessors
-        .callMethodWithArgs(reference, _id_objectArrayMethod,
+        .callMethodWithArgs(reference.pointer, _id_objectArrayMethod,
             jni.JniCallType.objectType, []).object);
   }
 
   static final _id_intArrayMethod = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"intArrayMethod", r"()[I");
+      .getMethodIDOf(_class.reference.pointer, r"intArrayMethod", r"()[I");
 
   /// from: public int[] intArrayMethod()
   /// The returned object must be released after use, by calling the [release] method.
   jni.JArray<jni.jint> intArrayMethod() {
     return const jni.JArrayType(jni.jintType()).fromRef(jni.Jni.accessors
-        .callMethodWithArgs(reference, _id_intArrayMethod,
+        .callMethodWithArgs(reference.pointer, _id_intArrayMethod,
             jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_throwNullPointerException = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"throwNullPointerException", r"()I");
+  static final _id_throwNullPointerException = jni.Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"throwNullPointerException", r"()I");
 
   /// from: public int throwNullPointerException()
   int throwNullPointerException() {
-    return jni.Jni.accessors.callMethodWithArgs(reference,
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
         _id_throwNullPointerException, jni.JniCallType.intType, []).integer;
   }
 
   static final _id_throwFileNotFoundException = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"throwFileNotFoundException",
       r"()Ljava/io/InputStream;");
 
@@ -3458,13 +3544,13 @@
   /// The returned object must be released after use, by calling the [release] method.
   jni.JObject throwFileNotFoundException() {
     return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_throwFileNotFoundException,
         jni.JniCallType.objectType, []).object);
   }
 
   static final _id_throwClassCastException = jni.Jni.accessors.getMethodIDOf(
-      _class.reference,
+      _class.reference.pointer,
       r"throwClassCastException",
       r"()Ljava/io/FileInputStream;");
 
@@ -3472,35 +3558,35 @@
   /// The returned object must be released after use, by calling the [release] method.
   jni.JObject throwClassCastException() {
     return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
-        reference,
+        reference.pointer,
         _id_throwClassCastException,
         jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_throwArrayIndexException = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"throwArrayIndexException", r"()I");
+  static final _id_throwArrayIndexException = jni.Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"throwArrayIndexException", r"()I");
 
   /// from: public int throwArrayIndexException()
   int throwArrayIndexException() {
-    return jni.Jni.accessors.callMethodWithArgs(reference,
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
         _id_throwArrayIndexException, jni.JniCallType.intType, []).integer;
   }
 
-  static final _id_throwArithmeticException = jni.Jni.accessors
-      .getMethodIDOf(_class.reference, r"throwArithmeticException", r"()I");
+  static final _id_throwArithmeticException = jni.Jni.accessors.getMethodIDOf(
+      _class.reference.pointer, r"throwArithmeticException", r"()I");
 
   /// from: public int throwArithmeticException()
   int throwArithmeticException() {
-    return jni.Jni.accessors.callMethodWithArgs(reference,
+    return jni.Jni.accessors.callMethodWithArgs(reference.pointer,
         _id_throwArithmeticException, jni.JniCallType.intType, []).integer;
   }
 
-  static final _id_throwLoremIpsum = jni.Jni.accessors
-      .getStaticMethodIDOf(_class.reference, r"throwLoremIpsum", r"()V");
+  static final _id_throwLoremIpsum = jni.Jni.accessors.getStaticMethodIDOf(
+      _class.reference.pointer, r"throwLoremIpsum", r"()V");
 
   /// from: static public void throwLoremIpsum()
   static void throwLoremIpsum() {
-    return jni.Jni.accessors.callStaticMethodWithArgs(_class.reference,
+    return jni.Jni.accessors.callStaticMethodWithArgs(_class.reference.pointer,
         _id_throwLoremIpsum, jni.JniCallType.voidType, []).check();
   }
 }
@@ -3545,70 +3631,74 @@
   /// The type which includes information such as the signature of this class.
   static const type = $FieldsType();
   static final _id_amount = jni.Jni.accessors.getStaticFieldIDOf(
-    _class.reference,
+    _class.reference.pointer,
     r"amount",
     r"I",
   );
 
   /// from: static public int amount
   static int get amount => jni.Jni.accessors
-      .getStaticField(_class.reference, _id_amount, jni.JniCallType.intType)
+      .getStaticField(
+          _class.reference.pointer, _id_amount, jni.JniCallType.intType)
       .integer;
 
   /// from: static public int amount
-  static set amount(int value) =>
-      jni.Jni.env.SetStaticIntField(_class.reference, _id_amount, value);
+  static set amount(int value) => jni.Jni.env
+      .SetStaticIntField(_class.reference.pointer, _id_amount, value);
 
   static final _id_pi = jni.Jni.accessors.getStaticFieldIDOf(
-    _class.reference,
+    _class.reference.pointer,
     r"pi",
     r"D",
   );
 
   /// from: static public double pi
   static double get pi => jni.Jni.accessors
-      .getStaticField(_class.reference, _id_pi, jni.JniCallType.doubleType)
+      .getStaticField(
+          _class.reference.pointer, _id_pi, jni.JniCallType.doubleType)
       .doubleFloat;
 
   /// from: static public double pi
   static set pi(double value) =>
-      jni.Jni.env.SetStaticDoubleField(_class.reference, _id_pi, value);
+      jni.Jni.env.SetStaticDoubleField(_class.reference.pointer, _id_pi, value);
 
   static final _id_asterisk = jni.Jni.accessors.getStaticFieldIDOf(
-    _class.reference,
+    _class.reference.pointer,
     r"asterisk",
     r"C",
   );
 
   /// from: static public char asterisk
   static int get asterisk => jni.Jni.accessors
-      .getStaticField(_class.reference, _id_asterisk, jni.JniCallType.charType)
+      .getStaticField(
+          _class.reference.pointer, _id_asterisk, jni.JniCallType.charType)
       .char;
 
   /// from: static public char asterisk
-  static set asterisk(int value) =>
-      jni.Jni.env.SetStaticCharField(_class.reference, _id_asterisk, value);
+  static set asterisk(int value) => jni.Jni.env
+      .SetStaticCharField(_class.reference.pointer, _id_asterisk, value);
 
   static final _id_name = jni.Jni.accessors.getStaticFieldIDOf(
-    _class.reference,
+    _class.reference.pointer,
     r"name",
     r"Ljava/lang/String;",
   );
 
   /// from: static public java.lang.String name
   /// The returned object must be released after use, by calling the [release] method.
-  static jni.JString get name => const jni.JStringType().fromRef(jni
-      .Jni.accessors
-      .getStaticField(_class.reference, _id_name, jni.JniCallType.objectType)
-      .object);
+  static jni.JString get name =>
+      const jni.JStringType().fromRef(jni.Jni.accessors
+          .getStaticField(
+              _class.reference.pointer, _id_name, jni.JniCallType.objectType)
+          .object);
 
   /// from: static public java.lang.String name
   /// The returned object must be released after use, by calling the [release] method.
-  static set name(jni.JString value) => jni.Jni.env
-      .SetStaticObjectField(_class.reference, _id_name, value.reference);
+  static set name(jni.JString value) => jni.Jni.env.SetStaticObjectField(
+      _class.reference.pointer, _id_name, value.reference.pointer);
 
   static final _id_i = jni.Jni.accessors.getFieldIDOf(
-    _class.reference,
+    _class.reference.pointer,
     r"i",
     r"Ljava/lang/Integer;",
   );
@@ -3616,64 +3706,66 @@
   /// from: public java.lang.Integer i
   /// The returned object must be released after use, by calling the [release] method.
   jni.JInteger get i => const jni.JIntegerType().fromRef(jni.Jni.accessors
-      .getField(reference, _id_i, jni.JniCallType.objectType)
+      .getField(reference.pointer, _id_i, jni.JniCallType.objectType)
       .object);
 
   /// from: public java.lang.Integer i
   /// The returned object must be released after use, by calling the [release] method.
-  set i(jni.JInteger value) =>
-      jni.Jni.env.SetObjectField(reference, _id_i, value.reference);
+  set i(jni.JInteger value) => jni.Jni.env
+      .SetObjectField(reference.pointer, _id_i, value.reference.pointer);
 
   static final _id_trillion = jni.Jni.accessors.getFieldIDOf(
-    _class.reference,
+    _class.reference.pointer,
     r"trillion",
     r"J",
   );
 
   /// from: public long trillion
   int get trillion => jni.Jni.accessors
-      .getField(reference, _id_trillion, jni.JniCallType.longType)
+      .getField(reference.pointer, _id_trillion, jni.JniCallType.longType)
       .long;
 
   /// from: public long trillion
   set trillion(int value) =>
-      jni.Jni.env.SetLongField(reference, _id_trillion, value);
+      jni.Jni.env.SetLongField(reference.pointer, _id_trillion, value);
 
   static final _id_isAchillesDead = jni.Jni.accessors.getFieldIDOf(
-    _class.reference,
+    _class.reference.pointer,
     r"isAchillesDead",
     r"Z",
   );
 
   /// from: public boolean isAchillesDead
   bool get isAchillesDead => jni.Jni.accessors
-      .getField(reference, _id_isAchillesDead, jni.JniCallType.booleanType)
+      .getField(
+          reference.pointer, _id_isAchillesDead, jni.JniCallType.booleanType)
       .boolean;
 
   /// from: public boolean isAchillesDead
-  set isAchillesDead(bool value) =>
-      jni.Jni.env.SetBooleanField(reference, _id_isAchillesDead, value ? 1 : 0);
+  set isAchillesDead(bool value) => jni.Jni.env
+      .SetBooleanField(reference.pointer, _id_isAchillesDead, value ? 1 : 0);
 
   static final _id_bestFighterInGreece = jni.Jni.accessors.getFieldIDOf(
-    _class.reference,
+    _class.reference.pointer,
     r"bestFighterInGreece",
     r"Ljava/lang/String;",
   );
 
   /// from: public java.lang.String bestFighterInGreece
   /// The returned object must be released after use, by calling the [release] method.
-  jni.JString get bestFighterInGreece => const jni.JStringType().fromRef(jni
-      .Jni.accessors
-      .getField(reference, _id_bestFighterInGreece, jni.JniCallType.objectType)
-      .object);
+  jni.JString get bestFighterInGreece =>
+      const jni.JStringType().fromRef(jni.Jni.accessors
+          .getField(reference.pointer, _id_bestFighterInGreece,
+              jni.JniCallType.objectType)
+          .object);
 
   /// from: public java.lang.String bestFighterInGreece
   /// The returned object must be released after use, by calling the [release] method.
-  set bestFighterInGreece(jni.JString value) => jni.Jni.env
-      .SetObjectField(reference, _id_bestFighterInGreece, value.reference);
+  set bestFighterInGreece(jni.JString value) => jni.Jni.env.SetObjectField(
+      reference.pointer, _id_bestFighterInGreece, value.reference.pointer);
 
   static final _id_random = jni.Jni.accessors.getFieldIDOf(
-    _class.reference,
+    _class.reference.pointer,
     r"random",
     r"Ljava/util/Random;",
   );
@@ -3681,16 +3773,16 @@
   /// from: public java.util.Random random
   /// The returned object must be released after use, by calling the [release] method.
   jni.JObject get random => const jni.JObjectType().fromRef(jni.Jni.accessors
-      .getField(reference, _id_random, jni.JniCallType.objectType)
+      .getField(reference.pointer, _id_random, jni.JniCallType.objectType)
       .object);
 
   /// from: public java.util.Random random
   /// The returned object must be released after use, by calling the [release] method.
-  set random(jni.JObject value) =>
-      jni.Jni.env.SetObjectField(reference, _id_random, value.reference);
+  set random(jni.JObject value) => jni.Jni.env
+      .SetObjectField(reference.pointer, _id_random, value.reference.pointer);
 
   static final _id_euroSymbol = jni.Jni.accessors.getStaticFieldIDOf(
-    _class.reference,
+    _class.reference.pointer,
     r"euroSymbol",
     r"C",
   );
@@ -3698,21 +3790,21 @@
   /// from: static public char euroSymbol
   static int get euroSymbol => jni.Jni.accessors
       .getStaticField(
-          _class.reference, _id_euroSymbol, jni.JniCallType.charType)
+          _class.reference.pointer, _id_euroSymbol, jni.JniCallType.charType)
       .char;
 
   /// from: static public char euroSymbol
-  static set euroSymbol(int value) =>
-      jni.Jni.env.SetStaticCharField(_class.reference, _id_euroSymbol, value);
+  static set euroSymbol(int value) => jni.Jni.env
+      .SetStaticCharField(_class.reference.pointer, _id_euroSymbol, value);
 
-  static final _id_new0 =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"()V");
+  static final _id_new0 = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"<init>", r"()V");
 
   /// from: public void <init>()
   /// The returned object must be released after use, by calling the [release] method.
   factory Fields() {
     return Fields.fromRef(jni.Jni.accessors
-        .newObjectWithArgs(_class.reference, _id_new0, []).object);
+        .newObjectWithArgs(_class.reference.pointer, _id_new0, []).object);
   }
 }
 
@@ -3756,47 +3848,47 @@
   /// The type which includes information such as the signature of this class.
   static const type = $Fields_NestedType();
   static final _id_hundred = jni.Jni.accessors.getFieldIDOf(
-    _class.reference,
+    _class.reference.pointer,
     r"hundred",
     r"J",
   );
 
   /// from: public long hundred
   int get hundred => jni.Jni.accessors
-      .getField(reference, _id_hundred, jni.JniCallType.longType)
+      .getField(reference.pointer, _id_hundred, jni.JniCallType.longType)
       .long;
 
   /// from: public long hundred
   set hundred(int value) =>
-      jni.Jni.env.SetLongField(reference, _id_hundred, value);
+      jni.Jni.env.SetLongField(reference.pointer, _id_hundred, value);
 
   static final _id_BEST_GOD = jni.Jni.accessors.getStaticFieldIDOf(
-    _class.reference,
+    _class.reference.pointer,
     r"BEST_GOD",
     r"Ljava/lang/String;",
   );
 
   /// from: static public java.lang.String BEST_GOD
   /// The returned object must be released after use, by calling the [release] method.
-  static jni.JString get BEST_GOD =>
-      const jni.JStringType().fromRef(jni.Jni.accessors
-          .getStaticField(
-              _class.reference, _id_BEST_GOD, jni.JniCallType.objectType)
-          .object);
+  static jni.JString get BEST_GOD => const jni.JStringType().fromRef(jni
+      .Jni.accessors
+      .getStaticField(
+          _class.reference.pointer, _id_BEST_GOD, jni.JniCallType.objectType)
+      .object);
 
   /// from: static public java.lang.String BEST_GOD
   /// The returned object must be released after use, by calling the [release] method.
-  static set BEST_GOD(jni.JString value) => jni.Jni.env
-      .SetStaticObjectField(_class.reference, _id_BEST_GOD, value.reference);
+  static set BEST_GOD(jni.JString value) => jni.Jni.env.SetStaticObjectField(
+      _class.reference.pointer, _id_BEST_GOD, value.reference.pointer);
 
-  static final _id_new0 =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"()V");
+  static final _id_new0 = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"<init>", r"()V");
 
   /// from: public void <init>()
   /// The returned object must be released after use, by calling the [release] method.
   factory Fields_Nested() {
     return Fields_Nested.fromRef(jni.Jni.accessors
-        .newObjectWithArgs(_class.reference, _id_new0, []).object);
+        .newObjectWithArgs(_class.reference.pointer, _id_new0, []).object);
   }
 }
 
@@ -3856,8 +3948,8 @@
     );
   }
 
-  static final _id_new0 =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"()V");
+  static final _id_new0 = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"<init>", r"()V");
 
   /// from: public void <init>()
   /// The returned object must be released after use, by calling the [release] method.
@@ -3869,7 +3961,7 @@
         S,
         K,
         jni.Jni.accessors
-            .newObjectWithArgs(_class.reference, _id_new0, []).object);
+            .newObjectWithArgs(_class.reference.pointer, _id_new0, []).object);
   }
 }
 
@@ -3923,14 +4015,14 @@
 
   /// The type which includes information such as the signature of this class.
   static const type = $StringMapType();
-  static final _id_new0 =
-      jni.Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"()V");
+  static final _id_new0 = jni.Jni.accessors
+      .getMethodIDOf(_class.reference.pointer, r"<init>", r"()V");
 
   /// from: public void <init>()
   /// The returned object must be released after use, by calling the [release] method.
   factory StringMap() {
     return StringMap.fromRef(jni.Jni.accessors
-        .newObjectWithArgs(_class.reference, _id_new0, []).object);
+        .newObjectWithArgs(_class.reference.pointer, _id_new0, []).object);
   }
 }
 
diff --git a/pkgs/jnigen/test/simple_package_test/runtime_test_registrant.dart b/pkgs/jnigen/test/simple_package_test/runtime_test_registrant.dart
index 3997584..629d95a 100644
--- a/pkgs/jnigen/test/simple_package_test/runtime_test_registrant.dart
+++ b/pkgs/jnigen/test/simple_package_test/runtime_test_registrant.dart
@@ -655,7 +655,7 @@
             }
             expect(
               Jni.env.IsInstanceOf(
-                runner.error.reference,
+                runner.error.reference.pointer,
                 Jni.findClass('java/lang/reflect/UndeclaredThrowableException'),
               ),
               isTrue,
@@ -664,7 +664,7 @@
                 'getCause', '()Ljava/lang/Throwable;', []);
             expect(
               Jni.env.IsInstanceOf(
-                cause.reference,
+                cause.reference.pointer,
                 Jni.findClass(
                     'com/github/dart_lang/jni/PortProxy\$DartException'),
               ),