[jnigen] Boxed types + Map + Set + List (https://github.com/dart-lang/jnigen/issues/271)

* make primitive types lowercased
* remove part statements
* add jset, jlist, jmap and jiterator
* add JNumber and JBoolean, JInteger and other boxed types
* increase coverage
diff --git a/pkgs/jni/CHANGELOG.md b/pkgs/jni/CHANGELOG.md
index 5847f00..c136763 100644
--- a/pkgs/jni/CHANGELOG.md
+++ b/pkgs/jni/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.5.0-dev.0
+* **Breaking Change** ([#137](https://github.com/dart-lang/jnigen/issues/137)): Java primitive types are now all lowercase like `jint`, `jshort`, ...
+* The bindings for `java.util.Set`, `java.util.Map`, `java.util.List` and the numeric types like `java.lang.Integer`, `java.lang.Boolean`, ... are now included in `package:jni`.
+
 ## 0.4.0
 * Type classes now have `superCount` and `superType` getters used for type inference.
 
diff --git a/pkgs/jni/example/integration_test/on_device_jni_test.dart b/pkgs/jni/example/integration_test/on_device_jni_test.dart
index 27be719..f9ae286 100644
--- a/pkgs/jni/example/integration_test/on_device_jni_test.dart
+++ b/pkgs/jni/example/integration_test/on_device_jni_test.dart
@@ -6,8 +6,12 @@
 
 import '../../test/global_env_test.dart' as global_env_test;
 import '../../test/exception_test.dart' as exception_test;
+import '../../test/jlist_test.dart' as jlist_test;
+import '../../test/jmap_test.dart' as jmap_test;
 import '../../test/jobject_test.dart' as jobject_test;
+import '../../test/jset_test.dart' as jset_test;
 import '../../test/jarray_test.dart' as jarray_test;
+import '../../test/boxed_test.dart' as boxed_test;
 import '../../test/type_test.dart' as type_test;
 import '../../test/load_test.dart' as load_test;
 
@@ -19,8 +23,12 @@
   final testSuites = [
     global_env_test.run,
     exception_test.run,
+    jlist_test.run,
+    jmap_test.run,
     jobject_test.run,
+    jset_test.run,
     jarray_test.run,
+    boxed_test.run,
     type_test.run,
     load_test.run,
   ];
diff --git a/pkgs/jni/lib/internal_helpers_for_jnigen.dart b/pkgs/jni/lib/internal_helpers_for_jnigen.dart
index 0ad5ce1..7e1fc8e 100644
--- a/pkgs/jni/lib/internal_helpers_for_jnigen.dart
+++ b/pkgs/jni/lib/internal_helpers_for_jnigen.dart
@@ -7,5 +7,5 @@
 library internal_helpers_for_jnigen;
 
 export 'src/jni.dart' show ProtectedJniExtensions;
-export 'src/types.dart' show JReference;
+export 'src/jreference.dart';
 export 'src/accessors.dart';
diff --git a/pkgs/jni/lib/jni.dart b/pkgs/jni/lib/jni.dart
index a4a45ec..d63fc73 100644
--- a/pkgs/jni/lib/jni.dart
+++ b/pkgs/jni/lib/jni.dart
@@ -64,7 +64,14 @@
     hide JniBindings, JniEnv, JniEnv1, JniExceptionDetails;
 export 'src/jni.dart' hide ProtectedJniExtensions;
 export 'src/jvalues.dart' hide JValueArgs, toJValues;
-export 'src/types.dart' hide JReference;
+export 'src/types.dart';
+export 'src/jarray.dart';
+export 'src/jexceptions.dart';
+export 'src/jobject.dart';
+export 'src/jprimitives.dart';
+export 'src/jreference.dart' show JReferenceUseExtension;
+export 'src/lang/lang.dart';
+export 'src/util/util.dart';
 
 export 'package:ffi/ffi.dart' show using, Arena;
 export 'dart:ffi' show nullptr;
diff --git a/pkgs/jni/lib/src/accessors.dart b/pkgs/jni/lib/src/accessors.dart
index e2bee89..b5e843c 100644
--- a/pkgs/jni/lib/src/accessors.dart
+++ b/pkgs/jni/lib/src/accessors.dart
@@ -7,9 +7,9 @@
 
 import 'package:jni/src/jvalues.dart';
 
+import 'jexceptions.dart';
 import 'third_party/generated_bindings.dart';
 import 'jni.dart';
-import 'types.dart';
 
 void _check(JThrowablePtr exception) {
   if (exception != nullptr) {
diff --git a/pkgs/jni/lib/src/jarray.dart b/pkgs/jni/lib/src/jarray.dart
index c095da7..fe92e05 100644
--- a/pkgs/jni/lib/src/jarray.dart
+++ b/pkgs/jni/lib/src/jarray.dart
@@ -2,9 +2,19 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// ignore_for_file: unnecessary_cast
+// ignore_for_file: unnecessary_cast, overridden_fields
 
-part of 'types.dart';
+import 'dart:ffi';
+
+import 'package:collection/collection.dart';
+import 'package:ffi/ffi.dart';
+import 'package:jni/src/accessors.dart';
+import 'package:jni/src/third_party/generated_bindings.dart';
+
+import 'jni.dart';
+import 'jobject.dart';
+import 'jprimitives.dart';
+import 'types.dart';
 
 class JArrayType<T> extends JObjType<JArray<T>> {
   final JType<T> elementType;
@@ -38,7 +48,7 @@
   final JType<E> elementType;
 
   @override
-  JArrayType<E> get $type => (_$type ??= type(elementType)) as JArrayType<E>;
+  late final JArrayType<E> $type = type(elementType) as JArrayType<E>;
 
   /// The type which includes information such as the signature of this class.
   static JObjType<JArray<T>> type<T>(JType<T> innerType) =>
@@ -52,18 +62,18 @@
   ///
   /// The [length] must be a non-negative integer.
   factory JArray(JType<E> type, int length) {
-    if (type._type == JniCallType.objectType && type is JObjType) {
+    if (type.callType == JniCallType.objectType && type is JObjType) {
       final clazz = (type as JObjType).getClass();
       final array = JArray<E>.fromRef(
         type,
-        _accessors.newObjectArray(length, clazz.reference, nullptr).object,
+        Jni.accessors.newObjectArray(length, clazz.reference, nullptr).object,
       );
       clazz.delete();
       return array;
     }
     return JArray.fromRef(
       type,
-      _accessors.newPrimitiveArray(length, type._type).object,
+      Jni.accessors.newPrimitiveArray(length, type.callType).object,
     );
   }
 
@@ -76,7 +86,9 @@
     final clazz = fill.getClass();
     final array = JArray<E>.fromRef(
       fill.$type as JObjType<E>,
-      _accessors.newObjectArray(length, clazz.reference, fill.reference).object,
+      Jni.accessors
+          .newObjectArray(length, clazz.reference, fill.reference)
+          .object,
     );
     clazz.delete();
     return array;
@@ -86,12 +98,12 @@
 
   JniResult elementAt(int index, int type) {
     RangeError.checkValidIndex(index, this);
-    return _accessors.getArrayElement(reference, index, type);
+    return Jni.accessors.getArrayElement(reference, index, type);
   }
 
   /// The number of elements in this array.
   int get length {
-    return _length ??= _env.GetArrayLength(reference);
+    return _length ??= Jni.env.GetArrayLength(reference);
   }
 }
 
@@ -107,7 +119,7 @@
   }
 }
 
-extension BoolArray on JArray<JBoolean> {
+extension BoolArray on JArray<jboolean> {
   bool operator [](int index) {
     return elementAt(index, JniCallType.booleanType).boolean;
   }
@@ -116,7 +128,7 @@
     RangeError.checkValidIndex(index, this);
     _allocate<JBooleanMarker>(sizeOf<JBooleanMarker>(), (ptr) {
       ptr.value = value ? 1 : 0;
-      _env.SetBooleanArrayRegion(reference, index, 1, ptr);
+      Jni.env.SetBooleanArrayRegion(reference, index, 1, ptr);
     });
   }
 
@@ -129,12 +141,12 @@
       it.forEachIndexed((index, element) {
         ptr[index] = element ? 1 : 0;
       });
-      _env.SetBooleanArrayRegion(reference, start, size, ptr);
+      Jni.env.SetBooleanArrayRegion(reference, start, size, ptr);
     });
   }
 }
 
-extension ByteArray on JArray<JByte> {
+extension ByteArray on JArray<jbyte> {
   int operator [](int index) {
     return elementAt(index, JniCallType.byteType).byte;
   }
@@ -143,7 +155,7 @@
     RangeError.checkValidIndex(index, this);
     _allocate<JByteMarker>(sizeOf<JByteMarker>(), (ptr) {
       ptr.value = value;
-      _env.SetByteArrayRegion(reference, index, 1, ptr);
+      Jni.env.SetByteArrayRegion(reference, index, 1, ptr);
     });
   }
 
@@ -156,12 +168,12 @@
       it.forEachIndexed((index, element) {
         ptr[index] = element;
       });
-      _env.SetByteArrayRegion(reference, start, size, ptr);
+      Jni.env.SetByteArrayRegion(reference, start, size, ptr);
     });
   }
 }
 
-extension CharArray on JArray<JChar> {
+extension CharArray on JArray<jchar> {
   String operator [](int index) {
     return String.fromCharCode(
       elementAt(index, JniCallType.charType).char,
@@ -172,7 +184,7 @@
     RangeError.checkValidIndex(index, this);
     _allocate<JCharMarker>(sizeOf<JCharMarker>(), (ptr) {
       ptr.value = value.codeUnits.first;
-      _env.SetCharArrayRegion(reference, index, 1, ptr);
+      Jni.env.SetCharArrayRegion(reference, index, 1, ptr);
     });
   }
 
@@ -185,12 +197,12 @@
       it.forEachIndexed((index, element) {
         ptr[index] = element.codeUnits.first;
       });
-      _env.SetCharArrayRegion(reference, start, size, ptr);
+      Jni.env.SetCharArrayRegion(reference, start, size, ptr);
     });
   }
 }
 
-extension ShortArray on JArray<JShort> {
+extension ShortArray on JArray<jshort> {
   int operator [](int index) {
     return elementAt(index, JniCallType.shortType).short;
   }
@@ -199,7 +211,7 @@
     RangeError.checkValidIndex(index, this);
     _allocate<JShortMarker>(sizeOf<JShortMarker>(), (ptr) {
       ptr.value = value;
-      _env.SetShortArrayRegion(reference, index, 1, ptr);
+      Jni.env.SetShortArrayRegion(reference, index, 1, ptr);
     });
   }
 
@@ -212,12 +224,12 @@
       it.forEachIndexed((index, element) {
         ptr[index] = element;
       });
-      _env.SetShortArrayRegion(reference, start, size, ptr);
+      Jni.env.SetShortArrayRegion(reference, start, size, ptr);
     });
   }
 }
 
-extension IntArray on JArray<JInt> {
+extension IntArray on JArray<jint> {
   int operator [](int index) {
     return elementAt(index, JniCallType.intType).integer;
   }
@@ -226,7 +238,7 @@
     RangeError.checkValidIndex(index, this);
     _allocate<JIntMarker>(sizeOf<JIntMarker>(), (ptr) {
       ptr.value = value;
-      _env.SetIntArrayRegion(reference, index, 1, ptr);
+      Jni.env.SetIntArrayRegion(reference, index, 1, ptr);
     });
   }
 
@@ -239,12 +251,12 @@
       it.forEachIndexed((index, element) {
         ptr[index] = element;
       });
-      _env.SetIntArrayRegion(reference, start, size, ptr);
+      Jni.env.SetIntArrayRegion(reference, start, size, ptr);
     });
   }
 }
 
-extension LongArray on JArray<JLong> {
+extension LongArray on JArray<jlong> {
   int operator [](int index) {
     return elementAt(index, JniCallType.longType).long;
   }
@@ -253,7 +265,7 @@
     RangeError.checkValidIndex(index, this);
     _allocate<JLongMarker>(sizeOf<JLongMarker>(), (ptr) {
       ptr.value = value;
-      _env.SetLongArrayRegion(reference, index, 1, ptr);
+      Jni.env.SetLongArrayRegion(reference, index, 1, ptr);
     });
   }
 
@@ -266,12 +278,12 @@
       it.forEachIndexed((index, element) {
         ptr[index] = element;
       });
-      _env.SetLongArrayRegion(reference, start, size, ptr);
+      Jni.env.SetLongArrayRegion(reference, start, size, ptr);
     });
   }
 }
 
-extension FloatArray on JArray<JFloat> {
+extension FloatArray on JArray<jfloat> {
   double operator [](int index) {
     return elementAt(index, JniCallType.floatType).float;
   }
@@ -280,7 +292,7 @@
     RangeError.checkValidIndex(index, this);
     _allocate<JFloatMarker>(sizeOf<JFloatMarker>(), (ptr) {
       ptr.value = value;
-      _env.SetFloatArrayRegion(reference, index, 1, ptr);
+      Jni.env.SetFloatArrayRegion(reference, index, 1, ptr);
     });
   }
 
@@ -293,12 +305,12 @@
       it.forEachIndexed((index, element) {
         ptr[index] = element;
       });
-      _env.SetFloatArrayRegion(reference, start, size, ptr);
+      Jni.env.SetFloatArrayRegion(reference, start, size, ptr);
     });
   }
 }
 
-extension DoubleArray on JArray<JDouble> {
+extension DoubleArray on JArray<jdouble> {
   double operator [](int index) {
     return elementAt(index, JniCallType.doubleType).doubleFloat;
   }
@@ -307,7 +319,7 @@
     RangeError.checkValidIndex(index, this);
     _allocate<JDoubleMarker>(sizeOf<JDoubleMarker>(), (ptr) {
       ptr.value = value;
-      _env.SetDoubleArrayRegion(reference, index, 1, ptr);
+      Jni.env.SetDoubleArrayRegion(reference, index, 1, ptr);
     });
   }
 
@@ -320,7 +332,7 @@
       it.forEachIndexed((index, element) {
         ptr[index] = element;
       });
-      _env.SetDoubleArrayRegion(reference, start, size, ptr);
+      Jni.env.SetDoubleArrayRegion(reference, start, size, ptr);
     });
   }
 }
@@ -333,7 +345,7 @@
 
   void operator []=(int index, T value) {
     RangeError.checkValidIndex(index, this);
-    _env.SetObjectArrayElement(reference, index, value.reference);
+    Jni.env.SetObjectArrayElement(reference, index, value.reference);
   }
 
   void setRange(int start, int end, Iterable<T> iterable, [int skipCount = 0]) {
diff --git a/pkgs/jni/lib/src/jexceptions.dart b/pkgs/jni/lib/src/jexceptions.dart
index 3200880..4c9cda0 100644
--- a/pkgs/jni/lib/src/jexceptions.dart
+++ b/pkgs/jni/lib/src/jexceptions.dart
@@ -2,7 +2,9 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-part of 'types.dart';
+import 'dart:ffi';
+
+import 'package:jni/src/third_party/generated_bindings.dart';
 
 abstract class JException implements Exception {}
 
diff --git a/pkgs/jni/lib/src/jni.dart b/pkgs/jni/lib/src/jni.dart
index 97ff46e..0698b84 100644
--- a/pkgs/jni/lib/src/jni.dart
+++ b/pkgs/jni/lib/src/jni.dart
@@ -9,9 +9,11 @@
 import 'package:ffi/ffi.dart';
 import 'package:path/path.dart';
 
+import 'jexceptions.dart';
+import 'jobject.dart';
+import 'jreference.dart';
 import 'third_party/generated_bindings.dart';
 import 'jvalues.dart';
-import 'types.dart';
 import 'accessors.dart';
 
 String _getLibraryFileName(String base) {
@@ -183,17 +185,13 @@
     return env;
   }
 
-  static GlobalJniEnv? _env;
-
-  /// Points to a process-wide shared instance of [GlobalJniEnvStruct].
+  /// Points to a process-wide shared instance of [GlobalJniEnv].
   ///
   /// It provides an indirection over [JniEnv] so that it can be used from
   /// any thread, and always returns global object references.
-  static GlobalJniEnv get env {
-    return _env ??= GlobalJniEnv(_fetchGlobalEnv());
-  }
+  static final env = GlobalJniEnv(_fetchGlobalEnv());
 
-  static JniAccessors get accessors => JniAccessors(_bindings.GetAccessors());
+  static final accessors = JniAccessors(_bindings.GetAccessors());
 
   /// Returns a new PortContinuation.
   static JObjectPtr newPortContinuation(ReceivePort port) {
diff --git a/pkgs/jni/lib/src/jobject.dart b/pkgs/jni/lib/src/jobject.dart
index 3eb4074..5de5bbd 100644
--- a/pkgs/jni/lib/src/jobject.dart
+++ b/pkgs/jni/lib/src/jobject.dart
@@ -2,7 +2,22 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-part of 'types.dart';
+import 'dart:ffi';
+
+import 'package:ffi/ffi.dart';
+import 'package:jni/src/accessors.dart';
+
+import 'jexceptions.dart';
+import 'jni.dart';
+import 'jreference.dart';
+import 'lang/jstring.dart';
+import 'jvalues.dart';
+import 'third_party/generated_bindings.dart';
+import 'types.dart';
+
+// This typedef is needed because void is a keyword and cannot be used in
+// type switch like a regular type.
+typedef _VoidType = void;
 
 class JObjectType extends JObjType<JObject> {
   const JObjectType();
@@ -42,7 +57,7 @@
   final result = using(
       (arena) => f(ptr, name.toNativeChars(arena), sig.toNativeChars(arena)));
   if (result.exception != nullptr) {
-    _accessors.throwException(result.exception);
+    Jni.accessors.throwException(result.exception);
   }
   return result.value.cast<T>();
 }
@@ -109,7 +124,7 @@
           callType, JniCallType.objectType, {JniCallType.objectType});
       final ref = function(finalCallType).object;
       final ctor = T == String
-          ? (ref) => _env.toDartString(ref, deleteOriginal: true)
+          ? (ref) => Jni.env.toDartString(ref, deleteOriginal: true)
           : (T == JObject ? JObject.fromRef : JString.fromRef);
       result = ctor(ref) as T;
       break;
@@ -148,8 +163,7 @@
 ///
 /// This is the base class for classes generated by `jnigen`.
 class JObject extends JReference {
-  JObjType<JObject>? _$type;
-  JObjType<JObject> get $type => _$type ??= type;
+  late final JObjType<JObject> $type = type;
 
   /// The type which includes information such as the signature of this class.
   static const JObjType<JObject> type = JObjectType();
@@ -175,40 +189,40 @@
   ///
   /// This may be a subclass of compile-time class.
   JClass getClass() {
-    _ensureNotDeleted();
-    final classRef = _env.GetObjectClass(reference);
+    ensureNotDeleted();
+    final classRef = Jni.env.GetObjectClass(reference);
     if (classRef == nullptr) {
-      _accessors.throwException(_env.ExceptionOccurred());
+      Jni.accessors.throwException(Jni.env.ExceptionOccurred());
     }
     return JClass.fromRef(classRef);
   }
 
   /// Get [JFieldIDPtr] of instance field identified by [fieldName] & [signature].
   JFieldIDPtr getFieldID(String fieldName, String signature) {
-    _ensureNotDeleted();
+    ensureNotDeleted();
     return _getID(
-        _accessors.getFieldID, _class.reference, fieldName, signature);
+        Jni.accessors.getFieldID, _class.reference, fieldName, signature);
   }
 
   /// Get [JFieldIDPtr] of static field identified by [fieldName] & [signature].
   JFieldIDPtr getStaticFieldID(String fieldName, String signature) {
-    _ensureNotDeleted();
+    ensureNotDeleted();
     return _getID<jfieldID_>(
-        _accessors.getStaticFieldID, _class.reference, fieldName, signature);
+        Jni.accessors.getStaticFieldID, _class.reference, fieldName, signature);
   }
 
   /// Get [JMethodIDPtr] of instance method [methodName] with [signature].
   JMethodIDPtr getMethodID(String methodName, String signature) {
-    _ensureNotDeleted();
+    ensureNotDeleted();
     return _getID<jmethodID_>(
-        _accessors.getMethodID, _class.reference, methodName, signature);
+        Jni.accessors.getMethodID, _class.reference, methodName, signature);
   }
 
   /// Get [JMethodIDPtr] of static method [methodName] with [signature].
   JMethodIDPtr getStaticMethodID(String methodName, String signature) {
-    _ensureNotDeleted();
-    return _getID<jmethodID_>(
-        _accessors.getStaticMethodID, _class.reference, methodName, signature);
+    ensureNotDeleted();
+    return _getID<jmethodID_>(Jni.accessors.getStaticMethodID, _class.reference,
+        methodName, signature);
   }
 
   /// Retrieve the value of the field using [fieldID].
@@ -221,12 +235,12 @@
   /// If [T] is String or [JObject], required conversions are performed and
   /// final value is returned.
   T getField<T>(JFieldIDPtr fieldID, [int? callType]) {
-    _ensureNotDeleted();
+    ensureNotDeleted();
     if (callType == JniCallType.voidType) {
       throw ArgumentError("void is not a valid field type.");
     }
     return _getField<T>(
-        callType, (ct) => _accessors.getField(reference, fieldID, ct));
+        callType, (ct) => Jni.accessors.getField(reference, fieldID, ct));
   }
 
   /// Get value of the field identified by [name] and [signature].
@@ -244,9 +258,9 @@
     if (callType == JniCallType.voidType) {
       throw ArgumentError("void is not a valid field type.");
     }
-    _ensureNotDeleted();
+    ensureNotDeleted();
     return _getField<T>(callType,
-        (ct) => _accessors.getStaticField(_class.reference, fieldID, ct));
+        (ct) => Jni.accessors.getStaticField(_class.reference, fieldID, ct));
   }
 
   /// Get value of the static field identified by [name] and [signature].
@@ -264,9 +278,9 @@
   ///
   /// See [getField] for an explanation about [callType] and return type [T].
   T callMethod<T>(JMethodIDPtr methodID, List<dynamic> args, [int? callType]) {
-    _ensureNotDeleted();
+    ensureNotDeleted();
     return _callMethod<T>(callType, args,
-        (ct, jvs) => _accessors.callMethod(reference, methodID, ct, jvs));
+        (ct, jvs) => Jni.accessors.callMethod(reference, methodID, ct, jvs));
   }
 
   /// Call instance method identified by [name] and [signature].
@@ -282,9 +296,12 @@
   /// more details about [args] and [callType].
   T callStaticMethod<T>(JMethodIDPtr methodID, List<dynamic> args,
       [int? callType]) {
-    _ensureNotDeleted();
-    return _callMethod<T>(callType, args,
-        (ct, jvs) => _accessors.callStaticMethod(reference, methodID, ct, jvs));
+    ensureNotDeleted();
+    return _callMethod<T>(
+        callType,
+        args,
+        (ct, jvs) =>
+            Jni.accessors.callStaticMethod(reference, methodID, ct, jvs));
   }
 
   /// Call static method identified by [name] and [signature].
@@ -300,12 +317,31 @@
   T castTo<T extends JObject>(JObjType<T> type, {bool deleteOriginal = false}) {
     if (deleteOriginal) {
       _jClass?.delete();
-      _setAsDeleted();
+      setAsDeleted();
       return type.fromRef(reference);
     }
-    final newRef = _env.NewGlobalRef(reference);
+    final newRef = Jni.env.NewGlobalRef(reference);
     return type.fromRef(newRef);
   }
+
+  static final _objectClass = Jni.findJClass('java/lang/Object');
+
+  static final _hashCodeId =
+      Jni.accessors.getMethodIDOf(_objectClass.reference, r"hashCode", r"()I");
+  @override
+  int get hashCode => Jni.accessors.callMethodWithArgs(
+      reference, _hashCodeId, JniCallType.intType, []).integer;
+
+  static final _equalsId = Jni.accessors.getMethodIDOf(
+      _objectClass.reference, 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;
+  }
 }
 
 /// A high level wrapper over a JNI class reference.
@@ -315,30 +351,30 @@
 
   /// Get [JFieldIDPtr] of static field [fieldName] with [signature].
   JFieldIDPtr getStaticFieldID(String fieldName, String signature) {
-    _ensureNotDeleted();
+    ensureNotDeleted();
     return _getID<jfieldID_>(
-        _accessors.getStaticFieldID, reference, fieldName, signature);
+        Jni.accessors.getStaticFieldID, reference, fieldName, signature);
   }
 
   /// Get [JMethodIDPtr] of static method [methodName] with [signature].
   JMethodIDPtr getStaticMethodID(String methodName, String signature) {
-    _ensureNotDeleted();
+    ensureNotDeleted();
     return _getID<jmethodID_>(
-        _accessors.getStaticMethodID, reference, methodName, signature);
+        Jni.accessors.getStaticMethodID, reference, methodName, signature);
   }
 
   /// Get [JFieldIDPtr] of field [fieldName] with [signature].
   JFieldIDPtr getFieldID(String fieldName, String signature) {
-    _ensureNotDeleted();
+    ensureNotDeleted();
     return _getID<jfieldID_>(
-        _accessors.getFieldID, reference, fieldName, signature);
+        Jni.accessors.getFieldID, reference, fieldName, signature);
   }
 
   /// Get [JMethodIDPtr] of method [methodName] with [signature].
   JMethodIDPtr getMethodID(String methodName, String signature) {
-    _ensureNotDeleted();
+    ensureNotDeleted();
     return _getID<jmethodID_>(
-        _accessors.getMethodID, reference, methodName, signature);
+        Jni.accessors.getMethodID, reference, methodName, signature);
   }
 
   /// Get [JMethodIDPtr] of constructor with [signature].
@@ -351,9 +387,9 @@
     if (callType == JniCallType.voidType) {
       throw ArgumentError("void is not a valid field type.");
     }
-    _ensureNotDeleted();
+    ensureNotDeleted();
     return _getField<T>(
-        callType, (ct) => _accessors.getStaticField(reference, fieldID, ct));
+        callType, (ct) => Jni.accessors.getStaticField(reference, fieldID, ct));
   }
 
   /// Get the value of static field identified by [name] and [signature].
@@ -370,9 +406,12 @@
   /// about [args] and [callType].
   T callStaticMethod<T>(JMethodIDPtr methodID, List<dynamic> args,
       [int? callType]) {
-    _ensureNotDeleted();
-    return _callMethod<T>(callType, args,
-        (ct, jvs) => _accessors.callStaticMethod(reference, methodID, ct, jvs));
+    ensureNotDeleted();
+    return _callMethod<T>(
+        callType,
+        args,
+        (ct, jvs) =>
+            Jni.accessors.callStaticMethod(reference, methodID, ct, jvs));
   }
 
   /// Call the static method identified by [name] and [signature].
@@ -386,9 +425,10 @@
 
   /// Create a new instance of this class with [ctor] and [args].
   JObject newInstance(JMethodIDPtr ctor, List<dynamic> args) => using((arena) {
-        _ensureNotDeleted();
+        ensureNotDeleted();
         final jArgs = JValueArgs(args, arena);
-        final res = _accessors.newObject(reference, ctor, jArgs.values).object;
+        final res =
+            Jni.accessors.newObject(reference, ctor, jArgs.values).object;
         return JObject.fromRef(res);
       });
 }
diff --git a/pkgs/jni/lib/src/jprimitives.dart b/pkgs/jni/lib/src/jprimitives.dart
index c83bf6d..f7f8a9a 100644
--- a/pkgs/jni/lib/src/jprimitives.dart
+++ b/pkgs/jni/lib/src/jprimitives.dart
@@ -2,117 +2,122 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-part of 'types.dart';
+// The types here are mapped to primitive types in Java, so they're all in
+// lowercase.
+// ignore_for_file: camel_case_types
+
+import 'third_party/generated_bindings.dart';
+import 'types.dart';
 
 abstract class JPrimitive {}
 
-abstract class JByte extends JPrimitive {
-  static const type = JByteType();
+abstract class jbyte extends JPrimitive {
+  static const type = jbyteType();
 }
 
-class JByteType extends JType<JByte> {
-  const JByteType();
+class jbyteType extends JType<jbyte> {
+  const jbyteType();
 
   @override
-  int get _type => JniCallType.byteType;
+  int get callType => JniCallType.byteType;
 
   @override
   String get signature => "B";
 }
 
-abstract class JBoolean extends JPrimitive {
-  static const type = JBooleanType();
+abstract class jboolean extends JPrimitive {
+  static const type = jbooleanType();
 }
 
-class JBooleanType extends JType<JBoolean> {
-  const JBooleanType();
+class jbooleanType extends JType<jboolean> {
+  const jbooleanType();
 
   @override
-  int get _type => JniCallType.booleanType;
+  int get callType => JniCallType.booleanType;
 
   @override
   String get signature => "Z";
 }
 
-abstract class JChar extends JPrimitive {
-  static const type = JCharType();
+abstract class jchar extends JPrimitive {
+  static const type = jcharType();
 }
 
-class JCharType extends JType<JChar> {
-  const JCharType();
+class jcharType extends JType<jchar> {
+  const jcharType();
 
   @override
-  int get _type => JniCallType.charType;
+  int get callType => JniCallType.charType;
 
   @override
   String get signature => "C";
 }
 
-abstract class JShort extends JPrimitive {
-  static const type = JShortType();
+abstract class jshort extends JPrimitive {
+  static const type = jshortType();
 }
 
-class JShortType extends JType<JShort> {
-  const JShortType();
+class jshortType extends JType<jshort> {
+  const jshortType();
 
   @override
-  int get _type => JniCallType.shortType;
+  int get callType => JniCallType.shortType;
 
   @override
   String get signature => "S";
 }
 
-abstract class JInt extends JPrimitive {
-  static const type = JIntType();
+abstract class jint extends JPrimitive {
+  static const type = jintType();
 }
 
-class JIntType extends JType<JInt> {
-  const JIntType();
+class jintType extends JType<jint> {
+  const jintType();
 
   @override
-  int get _type => JniCallType.intType;
+  int get callType => JniCallType.intType;
 
   @override
   String get signature => "I";
 }
 
-abstract class JLong extends JPrimitive {
-  static const type = JLongType();
+abstract class jlong extends JPrimitive {
+  static const type = jlongType();
 }
 
-class JLongType extends JType<JLong> {
-  const JLongType();
+class jlongType extends JType<jlong> {
+  const jlongType();
 
   @override
-  int get _type => JniCallType.longType;
+  int get callType => JniCallType.longType;
 
   @override
   String get signature => "J";
 }
 
-abstract class JFloat extends JPrimitive {
-  static const type = JFloatType();
+abstract class jfloat extends JPrimitive {
+  static const type = jfloatType();
 }
 
-class JFloatType extends JType<JFloat> {
-  const JFloatType();
+class jfloatType extends JType<jfloat> {
+  const jfloatType();
 
   @override
-  int get _type => JniCallType.floatType;
+  int get callType => JniCallType.floatType;
 
   @override
   String get signature => "F";
 }
 
-abstract class JDouble extends JPrimitive {
-  static const type = JDoubleType();
+abstract class jdouble extends JPrimitive {
+  static const type = jdoubleType();
 }
 
-class JDoubleType extends JType<JDouble> {
-  const JDoubleType();
+class jdoubleType extends JType<jdouble> {
+  const jdoubleType();
 
   @override
-  int get _type => JniCallType.doubleType;
+  int get callType => JniCallType.doubleType;
 
   @override
   String get signature => "D";
diff --git a/pkgs/jni/lib/src/jreference.dart b/pkgs/jni/lib/src/jreference.dart
index 3a96bb3..9430336 100644
--- a/pkgs/jni/lib/src/jreference.dart
+++ b/pkgs/jni/lib/src/jreference.dart
@@ -2,14 +2,34 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-part of 'types.dart';
+import 'dart:ffi';
+
+import 'package:ffi/ffi.dart';
+import 'package:jni/src/third_party/generated_bindings.dart';
+
+import 'jexceptions.dart';
+import 'jni.dart';
+
+extension ProtectedJReference on JReference {
+  void ensureNotDeleted() {
+    if (_deleted) throw UseAfterFreeException(this, reference);
+  }
+
+  void setAsDeleted() {
+    if (_deleted) {
+      throw DoubleFreeException(this, reference);
+    }
+    _deleted = true;
+    JReference._finalizer.detach(this);
+  }
+}
 
 /// A class which holds one or more JNI references, and has a `delete` operation
 /// which disposes the reference(s).
 abstract class JReference implements Finalizable {
   //TODO(PR): Is it safe to cast void *f (void *) to void f (void *)?
   static final _finalizer =
-      NativeFinalizer(_env.ptr.ref.DeleteGlobalRef.cast());
+      NativeFinalizer(Jni.env.ptr.ref.DeleteGlobalRef.cast());
 
   JReference.fromRef(this.reference) {
     _finalizer.attach(this, reference, detach: this);
@@ -17,29 +37,17 @@
 
   bool _deleted = false;
 
-  void _ensureNotDeleted() {
-    if (_deleted) throw UseAfterFreeException(this, reference);
-  }
-
   /// Check whether the underlying JNI reference is `null`.
   bool get isNull => reference == nullptr;
 
   /// Returns whether this object is deleted.
   bool get isDeleted => _deleted;
 
-  void _setAsDeleted() {
-    if (_deleted) {
-      throw DoubleFreeException(this, reference);
-    }
-    _deleted = true;
-    _finalizer.detach(this);
-  }
-
   /// Deletes the underlying JNI reference. Further uses will throw
   /// [UseAfterFreeException].
   void delete() {
-    _setAsDeleted();
-    _env.DeleteGlobalRef(reference);
+    setAsDeleted();
+    Jni.env.DeleteGlobalRef(reference);
   }
 
   /// The underlying JNI global object reference.
@@ -53,7 +61,7 @@
   /// Applies [callback] on [this] object and then delete the underlying JNI
   /// reference, returning the result of [callback].
   R use<R>(R Function(T) callback) {
-    _ensureNotDeleted();
+    ensureNotDeleted();
     try {
       final result = callback(this);
       delete();
diff --git a/pkgs/jni/lib/src/jvalues.dart b/pkgs/jni/lib/src/jvalues.dart
index b34e306..cc99b11 100644
--- a/pkgs/jni/lib/src/jvalues.dart
+++ b/pkgs/jni/lib/src/jvalues.dart
@@ -5,9 +5,9 @@
 import 'dart:ffi';
 import 'package:ffi/ffi.dart';
 
+import 'jobject.dart';
 import 'third_party/generated_bindings.dart';
 import 'jni.dart';
-import 'types.dart';
 
 void _fillJValue(Pointer<JValue> pos, dynamic arg) {
   if (arg is JObject) {
@@ -118,7 +118,6 @@
 class JValueArgs {
   late Pointer<JValue> values;
   final List<JObjectPtr> createdRefs = [];
-  final _env = Jni.env;
 
   JValueArgs(List<dynamic> args, Arena arena) {
     values = arena<JValue>(args.length);
@@ -126,7 +125,7 @@
       final arg = args[i];
       final ptr = values.elementAt(i);
       if (arg is String) {
-        final jstr = _env.toJStringPtr(arg);
+        final jstr = Jni.env.toJStringPtr(arg);
         ptr.ref.l = jstr;
         createdRefs.add(jstr);
       } else {
@@ -139,7 +138,7 @@
   /// Deletes temporary references such as [JStringPtr]s.
   void _dispose() {
     for (var ref in createdRefs) {
-      _env.DeleteGlobalRef(ref);
+      Jni.env.DeleteGlobalRef(ref);
     }
   }
 }
diff --git a/pkgs/jni/lib/src/lang/jboolean.dart b/pkgs/jni/lib/src/lang/jboolean.dart
new file mode 100644
index 0000000..03d5304
--- /dev/null
+++ b/pkgs/jni/lib/src/lang/jboolean.dart
@@ -0,0 +1,66 @@
+// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import '../accessors.dart';
+import '../jobject.dart';
+import '../jni.dart';
+import '../third_party/generated_bindings.dart';
+import '../types.dart';
+
+class JBooleanType extends JObjType<JBoolean> {
+  const JBooleanType();
+
+  @override
+  String get signature => r"Ljava/lang/Boolean;";
+
+  @override
+  JBoolean fromRef(JObjectPtr ref) => JBoolean.fromRef(ref);
+
+  @override
+  JObjType get superType => const JObjectType();
+
+  @override
+  final superCount = 2;
+
+  @override
+  int get hashCode => (JBooleanType).hashCode;
+
+  @override
+  bool operator ==(Object other) {
+    return other.runtimeType == JBooleanType && other is JBooleanType;
+  }
+}
+
+class JBoolean extends JObject {
+  @override
+  // ignore: overridden_fields
+  late final JObjType<JBoolean> $type = type;
+
+  JBoolean.fromRef(
+    JObjectPtr ref,
+  ) : super.fromRef(ref);
+
+  /// The type which includes information such as the signature of this class.
+  static const type = JBooleanType();
+
+  static final _class = Jni.findJClass(r"java/lang/Boolean");
+
+  static final _ctorId =
+      Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"(Z)V");
+  JBoolean(bool boolean)
+      : super.fromRef(Jni.accessors.newObjectWithArgs(
+            _class.reference, _ctorId, [boolean ? 1 : 0]).object);
+
+  static final _booleanValueId =
+      Jni.accessors.getMethodIDOf(_class.reference, r"booleanValue", r"()Z");
+
+  bool booleanValue({bool deleteOriginal = false}) {
+    final ret = Jni.accessors.callMethodWithArgs(
+        reference, _booleanValueId, JniCallType.booleanType, []).boolean;
+    if (deleteOriginal) {
+      delete();
+    }
+    return ret;
+  }
+}
diff --git a/pkgs/jni/lib/src/lang/jbyte.dart b/pkgs/jni/lib/src/lang/jbyte.dart
new file mode 100644
index 0000000..3cb9e96
--- /dev/null
+++ b/pkgs/jni/lib/src/lang/jbyte.dart
@@ -0,0 +1,55 @@
+// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import '../accessors.dart';
+import '../jni.dart';
+import '../jvalues.dart';
+import '../third_party/generated_bindings.dart';
+import '../types.dart';
+import 'jnumber.dart';
+
+class JByteType extends JObjType<JByte> {
+  const JByteType();
+
+  @override
+  String get signature => r"Ljava/lang/Byte;";
+
+  @override
+  JByte fromRef(JObjectPtr ref) => JByte.fromRef(ref);
+
+  @override
+  JObjType get superType => const JNumberType();
+
+  @override
+  final superCount = 2;
+
+  @override
+  int get hashCode => (JByteType).hashCode;
+
+  @override
+  bool operator ==(Object other) {
+    return other.runtimeType == JByteType && other is JByteType;
+  }
+}
+
+class JByte extends JNumber {
+  @override
+  // ignore: overridden_fields
+  late final JObjType<JByte> $type = type;
+
+  JByte.fromRef(
+    JObjectPtr ref,
+  ) : super.fromRef(ref);
+
+  /// The type which includes information such as the signature of this class.
+  static const type = JByteType();
+
+  static final _class = Jni.findJClass(r"java/lang/Byte");
+
+  static final _ctorId =
+      Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"(B)V");
+  JByte(int num)
+      : super.fromRef(Jni.accessors.newObjectWithArgs(
+            _class.reference, _ctorId, [JValueByte(num)]).object);
+}
diff --git a/pkgs/jni/lib/src/lang/jdouble.dart b/pkgs/jni/lib/src/lang/jdouble.dart
new file mode 100644
index 0000000..c6852a1
--- /dev/null
+++ b/pkgs/jni/lib/src/lang/jdouble.dart
@@ -0,0 +1,54 @@
+// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import '../accessors.dart';
+import '../jni.dart';
+import '../third_party/generated_bindings.dart';
+import '../types.dart';
+import 'jnumber.dart';
+
+class JDoubleType extends JObjType<JDouble> {
+  const JDoubleType();
+
+  @override
+  String get signature => r"Ljava/lang/Double;";
+
+  @override
+  JDouble fromRef(JObjectPtr ref) => JDouble.fromRef(ref);
+
+  @override
+  JObjType get superType => const JNumberType();
+
+  @override
+  final superCount = 2;
+
+  @override
+  int get hashCode => (JDoubleType).hashCode;
+
+  @override
+  bool operator ==(Object other) {
+    return other.runtimeType == JDoubleType && other is JDoubleType;
+  }
+}
+
+class JDouble extends JNumber {
+  @override
+  // ignore: overridden_fields
+  late final JObjType<JDouble> $type = type;
+
+  JDouble.fromRef(
+    JObjectPtr ref,
+  ) : super.fromRef(ref);
+
+  /// The type which includes information such as the signature of this class.
+  static const type = JDoubleType();
+
+  static final _class = Jni.findJClass(r"java/lang/Double");
+
+  static final _ctorId =
+      Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"(D)V");
+  JDouble(double num)
+      : super.fromRef(Jni.accessors
+            .newObjectWithArgs(_class.reference, _ctorId, [num]).object);
+}
diff --git a/pkgs/jni/lib/src/lang/jfloat.dart b/pkgs/jni/lib/src/lang/jfloat.dart
new file mode 100644
index 0000000..f23c237
--- /dev/null
+++ b/pkgs/jni/lib/src/lang/jfloat.dart
@@ -0,0 +1,56 @@
+// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import '../accessors.dart';
+import '../jni.dart';
+import '../jvalues.dart';
+import '../third_party/generated_bindings.dart';
+import '../types.dart';
+import 'jnumber.dart';
+
+class JFloatType extends JObjType<JFloat> {
+  const JFloatType();
+
+  @override
+  String get signature => r"Ljava/lang/Float;";
+
+  @override
+  JFloat fromRef(JObjectPtr ref) => JFloat.fromRef(ref);
+
+  @override
+  JObjType get superType => const JNumberType();
+
+  @override
+  final superCount = 2;
+
+  @override
+  int get hashCode => (JFloatType).hashCode;
+
+  @override
+  bool operator ==(Object other) {
+    return other.runtimeType == JFloatType && other is JFloatType;
+  }
+}
+
+class JFloat extends JNumber {
+  @override
+  // ignore: overridden_fields
+  late final JObjType<JFloat> $type = type;
+
+  JFloat.fromRef(
+    JObjectPtr ref,
+  ) : super.fromRef(ref);
+
+  /// The type which includes information such as the signature of this class.
+  static const type = JFloatType();
+
+  static final _class = Jni.findJClass(r"java/lang/Float");
+
+  static final _ctorId =
+      Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"(F)V");
+
+  JFloat(double num)
+      : super.fromRef(Jni.accessors.newObjectWithArgs(
+            _class.reference, _ctorId, [JValueFloat(num)]).object);
+}
diff --git a/pkgs/jni/lib/src/lang/jinteger.dart b/pkgs/jni/lib/src/lang/jinteger.dart
new file mode 100644
index 0000000..907d7ba
--- /dev/null
+++ b/pkgs/jni/lib/src/lang/jinteger.dart
@@ -0,0 +1,56 @@
+// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import '../accessors.dart';
+import '../jni.dart';
+import '../jvalues.dart';
+import '../third_party/generated_bindings.dart';
+import '../types.dart';
+import 'jnumber.dart';
+
+class JIntegerType extends JObjType<JInteger> {
+  const JIntegerType();
+
+  @override
+  String get signature => r"Ljava/lang/Integer;";
+
+  @override
+  JInteger fromRef(JObjectPtr ref) => JInteger.fromRef(ref);
+
+  @override
+  JObjType get superType => const JNumberType();
+
+  @override
+  final superCount = 2;
+
+  @override
+  int get hashCode => (JIntegerType).hashCode;
+
+  @override
+  bool operator ==(Object other) {
+    return other.runtimeType == JIntegerType && other is JIntegerType;
+  }
+}
+
+class JInteger extends JNumber {
+  @override
+  // ignore: overridden_fields
+  late final JObjType<JInteger> $type = type;
+
+  JInteger.fromRef(
+    JObjectPtr ref,
+  ) : super.fromRef(ref);
+
+  /// The type which includes information such as the signature of this class.
+  static const type = JIntegerType();
+
+  static final _class = Jni.findJClass(r"java/lang/Integer");
+
+  static final _ctorId =
+      Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"(I)V");
+
+  JInteger(int num)
+      : super.fromRef(Jni.accessors.newObjectWithArgs(
+            _class.reference, _ctorId, [JValueInt(num)]).object);
+}
diff --git a/pkgs/jni/lib/src/lang/jlong.dart b/pkgs/jni/lib/src/lang/jlong.dart
new file mode 100644
index 0000000..fb2ee80
--- /dev/null
+++ b/pkgs/jni/lib/src/lang/jlong.dart
@@ -0,0 +1,55 @@
+// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import '../accessors.dart';
+import '../jni.dart';
+import '../third_party/generated_bindings.dart';
+import '../types.dart';
+import 'jnumber.dart';
+
+class JLongType extends JObjType<JLong> {
+  const JLongType();
+
+  @override
+  String get signature => r"Ljava/lang/Long;";
+
+  @override
+  JLong fromRef(JObjectPtr ref) => JLong.fromRef(ref);
+
+  @override
+  JObjType get superType => const JNumberType();
+
+  @override
+  final superCount = 2;
+
+  @override
+  int get hashCode => (JLongType).hashCode;
+
+  @override
+  bool operator ==(Object other) {
+    return other.runtimeType == JLongType && other is JLongType;
+  }
+}
+
+class JLong extends JNumber {
+  @override
+  // ignore: overridden_fields
+  late final JObjType<JLong> $type = type;
+
+  JLong.fromRef(
+    JObjectPtr ref,
+  ) : super.fromRef(ref);
+
+  /// The type which includes information such as the signature of this class.
+  static const type = JLongType();
+
+  static final _class = Jni.findJClass(r"java/lang/Long");
+
+  static final _ctorId =
+      Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"(J)V");
+
+  JLong(int num)
+      : super.fromRef(Jni.accessors
+            .newObjectWithArgs(_class.reference, _ctorId, [num]).object);
+}
diff --git a/pkgs/jni/lib/src/lang/jnumber.dart b/pkgs/jni/lib/src/lang/jnumber.dart
new file mode 100644
index 0000000..8461f10
--- /dev/null
+++ b/pkgs/jni/lib/src/lang/jnumber.dart
@@ -0,0 +1,149 @@
+// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import '../accessors.dart';
+import '../jni.dart';
+import '../jobject.dart';
+import '../third_party/generated_bindings.dart';
+import '../types.dart';
+import 'jinteger.dart';
+import 'jshort.dart';
+import 'jlong.dart';
+import 'jdouble.dart';
+import 'jfloat.dart';
+import 'jbyte.dart';
+import 'jboolean.dart';
+
+class JNumberType extends JObjType<JNumber> {
+  const JNumberType();
+
+  @override
+  String get signature => r"Ljava/lang/Number;";
+
+  @override
+  JNumber fromRef(JObjectPtr ref) => JNumber.fromRef(ref);
+
+  @override
+  JObjType get superType => const JObjectType();
+
+  @override
+  final superCount = 1;
+
+  @override
+  int get hashCode => (JNumberType).hashCode;
+
+  @override
+  bool operator ==(Object other) {
+    return other.runtimeType == JNumberType && other is JNumberType;
+  }
+}
+
+class JNumber extends JObject {
+  @override
+  // ignore: overridden_fields
+  late final JObjType<JNumber> $type = type;
+
+  JNumber.fromRef(
+    JObjectPtr ref,
+  ) : super.fromRef(ref);
+
+  static final _class = Jni.findJClass(r"java/lang/Number");
+
+  /// 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");
+
+  JNumber()
+      : super.fromRef(Jni.accessors
+            .newObjectWithArgs(_class.reference, _ctorId, []).object);
+
+  static final _intValueId =
+      Jni.accessors.getMethodIDOf(_class.reference, r"intValue", r"()I");
+
+  int intValue({bool deleteOriginal = false}) {
+    final ret = Jni.accessors.callMethodWithArgs(
+        reference, _intValueId, JniCallType.intType, []).integer;
+    if (deleteOriginal) {
+      delete();
+    }
+    return ret;
+  }
+
+  static final _longValueId =
+      Jni.accessors.getMethodIDOf(_class.reference, r"longValue", r"()J");
+
+  int longValue({bool deleteOriginal = false}) {
+    final ret = Jni.accessors.callMethodWithArgs(
+        reference, _longValueId, JniCallType.longType, []).long;
+    if (deleteOriginal) {
+      delete();
+    }
+    return ret;
+  }
+
+  static final _floatValueId =
+      Jni.accessors.getMethodIDOf(_class.reference, r"floatValue", r"()F");
+
+  double floatValue({bool deleteOriginal = false}) {
+    final ret = Jni.accessors.callMethodWithArgs(
+        reference, _floatValueId, JniCallType.floatType, []).float;
+    if (deleteOriginal) {
+      delete();
+    }
+    return ret;
+  }
+
+  static final _doubleValueId =
+      Jni.accessors.getMethodIDOf(_class.reference, r"doubleValue", r"()D");
+
+  double doubleValue({bool deleteOriginal = false}) {
+    final ret = Jni.accessors.callMethodWithArgs(
+        reference, _doubleValueId, JniCallType.doubleType, []).doubleFloat;
+    if (deleteOriginal) {
+      delete();
+    }
+    return ret;
+  }
+
+  static final _byteValueId =
+      Jni.accessors.getMethodIDOf(_class.reference, r"byteValue", r"()B");
+
+  int byteValue({bool deleteOriginal = false}) {
+    final ret = Jni.accessors.callMethodWithArgs(
+        reference, _byteValueId, JniCallType.byteType, []).byte;
+    if (deleteOriginal) {
+      delete();
+    }
+    return ret;
+  }
+
+  static final _shortValueId =
+      Jni.accessors.getMethodIDOf(_class.reference, r"shortValue", r"()S");
+
+  int shortValue({bool deleteOriginal = false}) {
+    final ret = Jni.accessors.callMethodWithArgs(
+        reference, _shortValueId, JniCallType.shortType, []).short;
+    if (deleteOriginal) {
+      delete();
+    }
+    return ret;
+  }
+}
+
+extension IntToJava on int {
+  JByte toJByte() => JByte(this);
+  JShort toJShort() => JShort(this);
+  JInteger toJInteger() => JInteger(this);
+  JLong toJLong() => JLong(this);
+}
+
+extension DoubleToJava on double {
+  JFloat toJFloat() => JFloat(this);
+  JDouble toJDouble() => JDouble(this);
+}
+
+extension BoolToJava on bool {
+  JBoolean toJBoolean() => JBoolean(this);
+}
diff --git a/pkgs/jni/lib/src/lang/jshort.dart b/pkgs/jni/lib/src/lang/jshort.dart
new file mode 100644
index 0000000..a07ea4e
--- /dev/null
+++ b/pkgs/jni/lib/src/lang/jshort.dart
@@ -0,0 +1,56 @@
+// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import '../accessors.dart';
+import '../jni.dart';
+import '../jvalues.dart';
+import '../third_party/generated_bindings.dart';
+import '../types.dart';
+import 'jnumber.dart';
+
+class JShortType extends JObjType<JShort> {
+  const JShortType();
+
+  @override
+  String get signature => r"Ljava/lang/Short;";
+
+  @override
+  JShort fromRef(JObjectPtr ref) => JShort.fromRef(ref);
+
+  @override
+  JObjType get superType => const JNumberType();
+
+  @override
+  final superCount = 2;
+
+  @override
+  int get hashCode => (JShortType).hashCode;
+
+  @override
+  bool operator ==(Object other) {
+    return other.runtimeType == JShortType && other is JShortType;
+  }
+}
+
+class JShort extends JNumber {
+  @override
+  // ignore: overridden_fields
+  late final JObjType<JShort> $type = type;
+
+  JShort.fromRef(
+    JObjectPtr ref,
+  ) : super.fromRef(ref);
+
+  /// The type which includes information such as the signature of this class.
+  static const type = JShortType();
+
+  static final _class = Jni.findJClass(r"java/lang/Short");
+
+  static final _ctorId =
+      Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"(S)V");
+
+  JShort(int num)
+      : super.fromRef(Jni.accessors.newObjectWithArgs(
+            _class.reference, _ctorId, [JValueShort(num)]).object);
+}
diff --git a/pkgs/jni/lib/src/jstring.dart b/pkgs/jni/lib/src/lang/jstring.dart
similarity index 79%
rename from pkgs/jni/lib/src/jstring.dart
rename to pkgs/jni/lib/src/lang/jstring.dart
index 9d02df9..1361b53 100644
--- a/pkgs/jni/lib/src/jstring.dart
+++ b/pkgs/jni/lib/src/lang/jstring.dart
@@ -2,7 +2,16 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-part of 'types.dart';
+import 'dart:ffi';
+
+import 'package:ffi/ffi.dart';
+
+import '../jexceptions.dart';
+import '../jni.dart';
+import '../jobject.dart';
+import '../jreference.dart';
+import '../third_party/generated_bindings.dart';
+import '../types.dart';
 
 class JStringType extends JObjType<JString> {
   const JStringType();
@@ -30,7 +39,8 @@
 
 class JString extends JObject {
   @override
-  JObjType<JObject> get $type => _$type ??= type;
+  // ignore: overridden_fields
+  late final JObjType<JString> $type = type;
 
   /// The type which includes information such as the signature of this class.
   static const JObjType<JString> type = JStringType();
@@ -40,7 +50,7 @@
 
   static JStringPtr _toJavaString(String s) => using((arena) {
         final chars = s.toNativeUtf8(allocator: arena).cast<Char>();
-        final jstr = _env.NewStringUTF(chars);
+        final jstr = Jni.env.NewStringUTF(chars);
         if (jstr == nullptr) {
           throw 'Fatal: cannot convert string to Java string: $s';
         }
@@ -48,7 +58,7 @@
       });
 
   /// The number of Unicode characters in this Java string.
-  int get length => _env.GetStringLength(reference);
+  int get length => Jni.env.GetStringLength(reference);
 
   /// Construct a [JString] from the contents of Dart string [s].
   JString.fromString(String s) : super.fromRef(_toJavaString(s));
@@ -58,13 +68,13 @@
   /// If [deleteOriginal] is true, the underlying reference is deleted
   /// after conversion and this object will be marked as deleted.
   String toDartString({bool deleteOriginal = false}) {
-    _ensureNotDeleted();
+    ensureNotDeleted();
     if (reference == nullptr) {
       throw NullJStringException();
     }
-    final chars = _env.GetStringUTFChars(reference, nullptr);
+    final chars = Jni.env.GetStringUTFChars(reference, nullptr);
     final result = chars.cast<Utf8>().toDartString();
-    _env.ReleaseStringUTFChars(reference, chars);
+    Jni.env.ReleaseStringUTFChars(reference, chars);
     if (deleteOriginal) {
       delete();
     }
diff --git a/pkgs/jni/lib/src/lang/lang.dart b/pkgs/jni/lib/src/lang/lang.dart
new file mode 100644
index 0000000..e4c1af7
--- /dev/null
+++ b/pkgs/jni/lib/src/lang/lang.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+export 'jboolean.dart';
+export 'jbyte.dart';
+export 'jdouble.dart';
+export 'jfloat.dart';
+export 'jinteger.dart';
+export 'jlong.dart';
+export 'jnumber.dart';
+export 'jshort.dart';
+export 'jstring.dart';
diff --git a/pkgs/jni/lib/src/types.dart b/pkgs/jni/lib/src/types.dart
index 90b9378..64df75c 100644
--- a/pkgs/jni/lib/src/types.dart
+++ b/pkgs/jni/lib/src/types.dart
@@ -4,31 +4,14 @@
 
 import 'dart:ffi';
 
-import 'package:collection/collection.dart';
-import 'package:ffi/ffi.dart';
-
-import 'accessors.dart';
 import 'jni.dart';
-import 'jvalues.dart';
+import 'jobject.dart';
 import 'third_party/generated_bindings.dart';
 
-part 'jarray.dart';
-part 'jexceptions.dart';
-part 'jprimitives.dart';
-part 'jreference.dart';
-part 'jobject.dart';
-part 'jstring.dart';
-
-final JniAccessors _accessors = Jni.accessors;
-final GlobalJniEnv _env = Jni.env;
-// This typedef is needed because void is a keyword and cannot be used in
-// type switch like a regular type.
-typedef _VoidType = void;
-
 abstract class JType<T> {
   const JType();
 
-  int get _type;
+  int get callType;
 
   String get signature;
 }
@@ -42,7 +25,7 @@
   const JObjType();
 
   @override
-  int get _type => JniCallType.objectType;
+  int get callType => JniCallType.objectType;
 
   /// Creates an object from this type using the reference.
   T fromRef(Pointer<Void> ref);
diff --git a/pkgs/jni/lib/src/util/jiterator.dart b/pkgs/jni/lib/src/util/jiterator.dart
new file mode 100644
index 0000000..eab305d
--- /dev/null
+++ b/pkgs/jni/lib/src/util/jiterator.dart
@@ -0,0 +1,91 @@
+// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import '../accessors.dart';
+import '../jni.dart';
+import '../jobject.dart';
+import '../third_party/generated_bindings.dart';
+import '../types.dart';
+
+class JIteratorType<$E extends JObject> extends JObjType<JIterator<$E>> {
+  final JObjType<$E> E;
+
+  const JIteratorType(
+    this.E,
+  );
+
+  @override
+  String get signature => r"Ljava/util/Iterator;";
+
+  @override
+  JIterator<$E> fromRef(JObjectPtr ref) => JIterator.fromRef(E, ref);
+
+  @override
+  JObjType get superType => const JObjectType();
+
+  @override
+  final superCount = 1;
+
+  @override
+  int get hashCode => Object.hash(JIteratorType, E);
+
+  @override
+  bool operator ==(Object other) {
+    return other.runtimeType == (JIteratorType<$E>) &&
+        other is JIteratorType<$E> &&
+        E == other.E;
+  }
+}
+
+class JIterator<$E extends JObject> extends JObject implements Iterator<$E> {
+  @override
+  // ignore: overridden_fields
+  late final JObjType $type = type(E);
+
+  final JObjType<$E> E;
+
+  JIterator.fromRef(
+    this.E,
+    JObjectPtr ref,
+  ) : super.fromRef(ref);
+
+  static final _class = Jni.findJClass(r"java/util/Iterator");
+
+  /// The type which includes information such as the signature of this class.
+  static JIteratorType<$E> type<$E extends JObject>(
+    JObjType<$E> E,
+  ) {
+    return JIteratorType(
+      E,
+    );
+  }
+
+  $E? _current;
+
+  @override
+  $E get current => _current as $E;
+
+  static final _hasNextId =
+      Jni.accessors.getMethodIDOf(_class.reference, r"hasNext", r"()Z");
+  bool _hasNext() {
+    return Jni.accessors.callMethodWithArgs(
+        reference, _hasNextId, JniCallType.booleanType, []).boolean;
+  }
+
+  static final _nextId = Jni.accessors
+      .getMethodIDOf(_class.reference, r"next", r"()Ljava/lang/Object;");
+  $E _next() {
+    return E.fromRef(Jni.accessors.callMethodWithArgs(
+        reference, _nextId, JniCallType.objectType, []).object);
+  }
+
+  @override
+  bool moveNext() {
+    if (!_hasNext()) {
+      return false;
+    }
+    _current = _next();
+    return true;
+  }
+}
diff --git a/pkgs/jni/lib/src/util/jlist.dart b/pkgs/jni/lib/src/util/jlist.dart
new file mode 100644
index 0000000..577ef89
--- /dev/null
+++ b/pkgs/jni/lib/src/util/jlist.dart
@@ -0,0 +1,293 @@
+// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:collection';
+import 'dart:ffi';
+
+import 'package:jni/src/util/jset.dart';
+
+import '../accessors.dart';
+import '../jni.dart';
+import '../jobject.dart';
+import '../jvalues.dart';
+import '../third_party/generated_bindings.dart';
+import '../types.dart';
+import 'jiterator.dart';
+
+class JListType<$E extends JObject> extends JObjType<JList<$E>> {
+  final JObjType<$E> E;
+
+  const JListType(
+    this.E,
+  );
+
+  @override
+  String get signature => r"Ljava/util/List;";
+
+  @override
+  JList<$E> fromRef(JObjectPtr ref) => JList.fromRef(E, ref);
+
+  @override
+  JObjType get superType => const JObjectType();
+
+  @override
+  final superCount = 1;
+
+  @override
+  int get hashCode => Object.hash(JListType, E);
+
+  @override
+  bool operator ==(Object other) {
+    return other.runtimeType == JListType && other is JListType && E == other.E;
+  }
+}
+
+class JList<$E extends JObject> extends JObject with ListMixin<$E> {
+  @override
+  // ignore: overridden_fields
+  late final JObjType<JList> $type = type(E);
+
+  final JObjType<$E> E;
+
+  JList.fromRef(
+    this.E,
+    JObjectPtr ref,
+  ) : super.fromRef(ref);
+
+  static final _class = Jni.findJClass(r"java/util/List");
+
+  /// The type which includes information such as the signature of this class.
+  static JListType<$E> type<$E extends JObject>(
+    JObjType<$E> E,
+  ) {
+    return JListType(
+      E,
+    );
+  }
+
+  static final _arrayListClassRef = Jni.findJClass(r"java/util/ArrayList");
+  static final _ctorId = Jni.accessors
+      .getMethodIDOf(_arrayListClassRef.reference, r"<init>", r"()V");
+  JList.array(this.E)
+      : super.fromRef(Jni.accessors.newObjectWithArgs(
+            _arrayListClassRef.reference, _ctorId, []).object);
+
+  static final _sizeId =
+      Jni.accessors.getMethodIDOf(_class.reference, r"size", r"()I");
+  @override
+  int get length => Jni.accessors
+      .callMethodWithArgs(reference, _sizeId, JniCallType.intType, []).integer;
+
+  @override
+  set length(int newLength) {
+    RangeError.checkNotNegative(newLength);
+    while (length < newLength) {
+      add(E.fromRef(nullptr));
+    }
+    while (newLength < length) {
+      removeAt(length - 1);
+    }
+  }
+
+  static final _getId = Jni.accessors
+      .getMethodIDOf(_class.reference, 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);
+  }
+
+  static final _setId = Jni.accessors.getMethodIDOf(
+      _class.reference, 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);
+  }
+
+  static final _addId = Jni.accessors
+      .getMethodIDOf(_class.reference, r"add", r"(Ljava/lang/Object;)Z");
+  @override
+  void add($E element) {
+    Jni.accessors.callMethodWithArgs(
+        reference, _addId, JniCallType.voidType, [element.reference]).check();
+  }
+
+  static final _collectionClass = Jni.findJClass("java/util/Collection");
+  static final _addAllId = Jni.accessors
+      .getMethodIDOf(_class.reference, 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;
+      return;
+    }
+    return super.addAll(iterable);
+  }
+
+  static final _clearId =
+      Jni.accessors.getMethodIDOf(_class.reference, r"clear", r"()V");
+  @override
+  void clear() {
+    Jni.accessors.callMethodWithArgs(
+        reference, _clearId, JniCallType.voidType, []).check();
+  }
+
+  static final _containsId = Jni.accessors
+      .getMethodIDOf(_class.reference, 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;
+  }
+
+  static final _getRangeId = Jni.accessors
+      .getMethodIDOf(_class.reference, 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,
+          JniCallType.objectType, [JValueInt(start), JValueInt(end)]).object,
+    );
+  }
+
+  static final _indexOfId = Jni.accessors
+      .getMethodIDOf(_class.reference, 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(
+      getRange(start, length).reference,
+      _indexOfId,
+      JniCallType.intType,
+      [element.reference],
+    ).integer;
+  }
+
+  static final _insertId = Jni.accessors
+      .getMethodIDOf(_class.reference, 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();
+  }
+
+  static final _insertAllId = Jni.accessors.getMethodIDOf(
+      _class.reference, 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.accessors.callMethodWithArgs(
+          reference,
+          _insertAllId,
+          JniCallType.booleanType,
+          [JValueInt(index), (iterable as JObject).reference]);
+      return;
+    }
+    super.insertAll(index, iterable);
+  }
+
+  static final _isEmptyId =
+      Jni.accessors.getMethodIDOf(_class.reference, r"isEmpty", r"()Z");
+  @override
+  bool get isEmpty => Jni.accessors.callMethodWithArgs(
+      reference, _isEmptyId, JniCallType.booleanType, []).boolean;
+
+  @override
+  bool get isNotEmpty => !isEmpty;
+
+  static final _iteratorId = Jni.accessors
+      .getMethodIDOf(_class.reference, r"iterator", r"()Ljava/util/Iterator;");
+  @override
+  JIterator<$E> get iterator =>
+      JIteratorType(E).fromRef(Jni.accessors.callMethodWithArgs(
+          reference, _iteratorId, JniCallType.objectType, []).object);
+
+  static final _lastIndexOfId = Jni.accessors.getMethodIDOf(
+      _class.reference, 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;
+    }
+    final range = getRange(start, length);
+    final res = Jni.accessors.callMethodWithArgs(
+      range.reference,
+      _lastIndexOfId,
+      JniCallType.intType,
+      [element.reference],
+    ).integer;
+    range.delete();
+    return res;
+  }
+
+  static final _removeId = Jni.accessors
+      .getMethodIDOf(_class.reference, 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;
+  }
+
+  static final _removeAtId = Jni.accessors
+      .getMethodIDOf(_class.reference, 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);
+  }
+
+  @override
+  void removeRange(int start, int end) {
+    final range = getRange(start, end);
+    range.clear();
+    range.delete();
+  }
+
+  @override
+  JSet<$E> toSet() {
+    return toJSet(E);
+  }
+
+  static final _hashCodeId =
+      Jni.accessors.getMethodIDOf(_class.reference, r"hashCode", r"()I");
+  @override
+  int get hashCode => Jni.accessors.callMethodWithArgs(
+      reference, _hashCodeId, JniCallType.intType, []).integer;
+
+  static final _equalsId = Jni.accessors
+      .getMethodIDOf(_class.reference, 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;
+  }
+}
+
+extension ToJavaList<E extends JObject> on Iterable<E> {
+  JList<E> toJList(JObjType<E> type) {
+    final list = JList.array(type);
+    list.addAll(this);
+    return list;
+  }
+}
diff --git a/pkgs/jni/lib/src/util/jmap.dart b/pkgs/jni/lib/src/util/jmap.dart
new file mode 100644
index 0000000..015fea8
--- /dev/null
+++ b/pkgs/jni/lib/src/util/jmap.dart
@@ -0,0 +1,187 @@
+// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:collection';
+
+import '../accessors.dart';
+import '../jni.dart';
+import '../jobject.dart';
+import '../third_party/jni_bindings_generated.dart';
+import '../types.dart';
+import 'jset.dart';
+
+class JMapType<$K extends JObject, $V extends JObject>
+    extends JObjType<JMap<$K, $V>> {
+  final JObjType<$K> K;
+  final JObjType<$V> V;
+
+  const JMapType(
+    this.K,
+    this.V,
+  );
+
+  @override
+  String get signature => r"Ljava/util/Map;";
+
+  @override
+  JMap<$K, $V> fromRef(JObjectPtr ref) => JMap.fromRef(K, V, ref);
+
+  @override
+  JObjType get superType => const JObjectType();
+
+  @override
+  final superCount = 1;
+
+  @override
+  int get hashCode => Object.hash(JMapType, K, V);
+
+  @override
+  bool operator ==(Object other) {
+    return other.runtimeType == (JMapType<$K, $V>) &&
+        other is JMapType<$K, $V> &&
+        K == other.K &&
+        V == other.V;
+  }
+}
+
+class JMap<$K extends JObject, $V extends JObject> extends JObject
+    with MapMixin<$K, $V> {
+  @override
+  // ignore: overridden_fields
+  late final JObjType<JMap> $type = type(K, V);
+
+  final JObjType<$K> K;
+  final JObjType<$V> V;
+
+  JMap.fromRef(
+    this.K,
+    this.V,
+    JObjectPtr ref,
+  ) : super.fromRef(ref);
+
+  static final _class = Jni.findJClass(r"java/util/Map");
+
+  /// The type which includes information such as the signature of this class.
+  static JMapType<$K, $V> type<$K extends JObject, $V extends JObject>(
+    JObjType<$K> K,
+    JObjType<$V> V,
+  ) {
+    return JMapType(
+      K,
+      V,
+    );
+  }
+
+  static final _hashMapClass = Jni.findJClass(r"java/util/HashMap");
+  static final _ctorId =
+      Jni.accessors.getMethodIDOf(_hashMapClass.reference, r"<init>", r"()V");
+  JMap.hash(this.K, this.V)
+      : super.fromRef(Jni.accessors
+            .newObjectWithArgs(_hashMapClass.reference, _ctorId, []).object);
+
+  static final _getId = Jni.accessors.getMethodIDOf(
+      _class.reference, 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);
+    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;");
+  @override
+  void operator []=($K key, $V value) {
+    Jni.accessors.callMethodWithArgs(reference, _putId, JniCallType.objectType,
+        [key.reference, value.reference]).object;
+  }
+
+  static final _addAllId = Jni.accessors
+      .getMethodIDOf(_class.reference, 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();
+    } else {
+      for (final entry in other.entries) {
+        this[entry.key] = entry.value;
+      }
+    }
+  }
+
+  static final _clearId =
+      Jni.accessors.getMethodIDOf(_class.reference, r"clear", r"()V");
+  @override
+  void clear() {
+    Jni.accessors.callMethodWithArgs(
+        reference, _clearId, JniCallType.voidType, []).check();
+  }
+
+  static final _containsKeyId = Jni.accessors.getMethodIDOf(
+      _class.reference, 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;
+  }
+
+  static final _containsValueId = Jni.accessors.getMethodIDOf(
+      _class.reference, 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;
+  }
+
+  static final isEmptyId =
+      Jni.accessors.getMethodIDOf(_class.reference, r"isEmpty", r"()Z");
+  @override
+  bool get isEmpty => Jni.accessors.callMethodWithArgs(
+      reference, isEmptyId, JniCallType.booleanType, []).boolean;
+
+  @override
+  bool get isNotEmpty => !isEmpty;
+
+  static final _keysId = Jni.accessors
+      .getMethodIDOf(_class.reference, r"keySet", r"()Ljava/util/Set;");
+  @override
+  JSet<$K> get keys => JSetType(K).fromRef(Jni.accessors.callMethodWithArgs(
+      reference, _keysId, JniCallType.objectType, []).object);
+
+  static final _sizeId =
+      Jni.accessors.getMethodIDOf(_class.reference, r"size", r"()I");
+  @override
+  int get length => Jni.accessors
+      .callMethodWithArgs(reference, _sizeId, JniCallType.intType, []).integer;
+
+  static final _removeId = Jni.accessors.getMethodIDOf(
+      _class.reference, 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);
+    return value.isNull ? null : value;
+  }
+}
+
+extension ToJavaMap<K extends JObject, V extends JObject> on Map<K, V> {
+  JMap<K, V> toJMap(JObjType<K> keyType, JObjType<V> valueType) {
+    final map = JMap.hash(keyType, valueType);
+    map.addAll(this);
+    return map;
+  }
+}
diff --git a/pkgs/jni/lib/src/util/jset.dart b/pkgs/jni/lib/src/util/jset.dart
new file mode 100644
index 0000000..5300107
--- /dev/null
+++ b/pkgs/jni/lib/src/util/jset.dart
@@ -0,0 +1,228 @@
+// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:collection';
+
+import 'package:jni/src/third_party/generated_bindings.dart';
+
+import '../accessors.dart';
+import '../jni.dart';
+import '../jobject.dart';
+import '../types.dart';
+import 'jiterator.dart';
+
+class JSetType<$E extends JObject> extends JObjType<JSet<$E>> {
+  final JObjType<$E> E;
+
+  const JSetType(
+    this.E,
+  );
+
+  @override
+  String get signature => r"Ljava/util/Set;";
+
+  @override
+  JSet<$E> fromRef(JObjectPtr ref) => JSet.fromRef(E, ref);
+
+  @override
+  JObjType get superType => const JObjectType();
+
+  @override
+  final superCount = 1;
+
+  @override
+  int get hashCode => Object.hash(JSetType, E);
+
+  @override
+  bool operator ==(Object other) {
+    return other.runtimeType == (JSetType<$E>) &&
+        other is JSetType<$E> &&
+        E == other.E;
+  }
+}
+
+class JSet<$E extends JObject> extends JObject with SetMixin<$E> {
+  @override
+  // ignore: overridden_fields
+  late final JObjType<JSet> $type = type(E);
+
+  final JObjType<$E> E;
+
+  JSet.fromRef(
+    this.E,
+    JObjectPtr ref,
+  ) : super.fromRef(ref);
+
+  static final _class = Jni.findJClass(r"java/util/Set");
+
+  /// The type which includes information such as the signature of this class.
+  static JSetType<$E> type<$E extends JObject>(
+    JObjType<$E> E,
+  ) {
+    return JSetType(
+      E,
+    );
+  }
+
+  static final _hashSetClass = Jni.findJClass(r"java/util/HashSet");
+  static final _ctorId =
+      Jni.accessors.getMethodIDOf(_hashSetClass.reference, r"<init>", r"()V");
+  JSet.hash(this.E)
+      : super.fromRef(Jni.accessors
+            .newObjectWithArgs(_hashSetClass.reference, _ctorId, []).object);
+
+  static final _addId = Jni.accessors
+      .getMethodIDOf(_class.reference, r"add", r"(Ljava/lang/Object;)Z");
+  @override
+  bool add($E value) {
+    return Jni.accessors.callMethodWithArgs(
+        reference, _addId, JniCallType.booleanType, [value.reference]).boolean;
+  }
+
+  static final _addAllId = Jni.accessors
+      .getMethodIDOf(_class.reference, 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.accessors.callMethodWithArgs(
+        reference,
+        _addAllId,
+        JniCallType.booleanType,
+        [(elements as JObject).reference],
+      ).boolean;
+    }
+    return super.addAll(elements);
+  }
+
+  static final _clearId =
+      Jni.accessors.getMethodIDOf(_class.reference, r"clear", r"()V");
+  @override
+  void clear() {
+    return Jni.accessors.callMethodWithArgs(
+        reference, _clearId, JniCallType.voidType, []).check();
+  }
+
+  static final _containsId = Jni.accessors
+      .getMethodIDOf(_class.reference, 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;
+  }
+
+  static final _containsAllId = Jni.accessors.getMethodIDOf(
+      _class.reference, 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;
+    }
+    return super.containsAll(other);
+  }
+
+  static final _isEmptyId =
+      Jni.accessors.getMethodIDOf(_class.reference, r"isEmpty", r"()Z");
+  @override
+  bool get isEmpty => Jni.accessors.callMethodWithArgs(
+      reference, _isEmptyId, JniCallType.booleanType, []).boolean;
+
+  @override
+  bool get isNotEmpty => !isEmpty;
+
+  static final _iteratorId = Jni.accessors
+      .getMethodIDOf(_class.reference, r"iterator", r"()Ljava/util/Iterator;");
+  @override
+  JIterator<$E> get iterator =>
+      JIteratorType(E).fromRef(Jni.accessors.callMethodWithArgs(
+          reference, _iteratorId, JniCallType.objectType, []).object);
+
+  static final _sizeId =
+      Jni.accessors.getMethodIDOf(_class.reference, r"size", r"()I");
+  @override
+  int get length => Jni.accessors
+      .callMethodWithArgs(reference, _sizeId, JniCallType.intType, []).integer;
+
+  static final _removeId = Jni.accessors
+      .getMethodIDOf(_class.reference, 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;
+  }
+
+  static final _removeAllId = Jni.accessors.getMethodIDOf(
+      _class.reference, 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;
+    }
+    return super.removeAll(elements);
+  }
+
+  static final _retainAllId = Jni.accessors.getMethodIDOf(
+      _class.reference, 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;
+    }
+    return super.retainAll(elements);
+  }
+
+  static final _hashCodeId =
+      Jni.accessors.getMethodIDOf(_class.reference, r"hashCode", r"()I");
+  @override
+  int get hashCode => Jni.accessors.callMethodWithArgs(
+      reference, _hashCodeId, JniCallType.intType, []).integer;
+
+  static final _equalsId = Jni.accessors
+      .getMethodIDOf(_class.reference, 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;
+  }
+
+  @override
+  $E? lookup(Object? element) {
+    if (contains(element)) return element as $E;
+    return null;
+  }
+
+  @override
+  JSet<$E> toSet() {
+    return toJSet(E);
+  }
+}
+
+extension ToJavaSet<E extends JObject> on Iterable<E> {
+  JSet<E> toJSet(JObjType<E> type) {
+    final set = JSet.hash(type);
+    set.addAll(this);
+    return set;
+  }
+}
diff --git a/pkgs/jni/lib/src/util/util.dart b/pkgs/jni/lib/src/util/util.dart
new file mode 100644
index 0000000..d0a0dc5
--- /dev/null
+++ b/pkgs/jni/lib/src/util/util.dart
@@ -0,0 +1,8 @@
+// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+export 'jiterator.dart';
+export 'jlist.dart';
+export 'jmap.dart';
+export 'jset.dart';
diff --git a/pkgs/jni/pubspec.yaml b/pkgs/jni/pubspec.yaml
index 7dc42d5..6a999b6 100644
--- a/pkgs/jni/pubspec.yaml
+++ b/pkgs/jni/pubspec.yaml
@@ -1,6 +1,6 @@
 name: jni
 description: Library to access JNI from dart and flutter
-version: 0.4.0
+version: 0.5.0-dev.0
 repository: https://github.com/dart-lang/jnigen/tree/main/jni
 
 environment:
diff --git a/pkgs/jni/test/boxed_test.dart b/pkgs/jni/test/boxed_test.dart
new file mode 100644
index 0000000..43489e8
--- /dev/null
+++ b/pkgs/jni/test/boxed_test.dart
@@ -0,0 +1,130 @@
+// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:io';
+
+import 'package:jni/jni.dart';
+import 'package:test/test.dart';
+
+import 'test_util/test_util.dart';
+
+void main() {
+  // Don't forget to initialize JNI.
+  if (!Platform.isAndroid) {
+    checkDylibIsUpToDate();
+    Jni.spawnIfNotExists(dylibDir: "build/jni_libs", jvmOptions: ["-Xmx128m"]);
+  }
+  run(testRunner: test);
+}
+
+void run({required TestRunnerCallback testRunner}) {
+  testRunner('JByte', () {
+    const val = 1 << 5;
+    using((arena) {
+      expect(JByte(val).byteValue(deleteOriginal: true), val);
+      expect((-val).toJByte().byteValue(deleteOriginal: true), -val);
+    });
+  });
+  testRunner('JShort', () {
+    const val = 1 << 10;
+    using((arena) {
+      expect(JShort(val).shortValue(deleteOriginal: true), val);
+      expect((-val).toJShort().shortValue(deleteOriginal: true), -val);
+    });
+  });
+  testRunner('JInteger', () {
+    const val = 1 << 20;
+    using((arena) {
+      expect(JInteger(val).intValue(deleteOriginal: true), val);
+      expect((-val).toJInteger().intValue(deleteOriginal: true), -val);
+    });
+  });
+  testRunner('JLong', () {
+    const val = 1 << 40;
+    using((arena) {
+      expect(JLong(val).longValue(deleteOriginal: true), val);
+      expect((-val).toJLong().longValue(deleteOriginal: true), -val);
+    });
+  });
+  testRunner('JFloat', () {
+    const val = 3.14;
+    const eps = 1e-6;
+    using((arena) {
+      expect(JFloat(val).floatValue(deleteOriginal: true), closeTo(val, eps));
+      expect((-val).toJFloat().floatValue(deleteOriginal: true),
+          closeTo(-val, eps));
+    });
+  });
+  testRunner('JDouble', () {
+    const val = 3.14;
+    const eps = 1e-9;
+    using((arena) {
+      expect(JDouble(val).doubleValue(deleteOriginal: true), closeTo(val, eps));
+      expect((-val).toJDouble().doubleValue(deleteOriginal: true),
+          closeTo(-val, eps));
+    });
+  });
+  testRunner('JBoolean', () {
+    using((arena) {
+      expect(JBoolean(false).booleanValue(deleteOriginal: true), false);
+      expect(JBoolean(true).booleanValue(deleteOriginal: true), true);
+    });
+  });
+  testRunner('JByte.\$type hashCode and ==', () {
+    using((arena) {
+      final a = JByte(1)..deletedIn(arena);
+      final b = JByte(2)..deletedIn(arena);
+      expect(a.$type, b.$type);
+      expect(a.$type.hashCode, b.$type.hashCode);
+    });
+  });
+  testRunner('JShort.\$type hashCode and ==', () {
+    using((arena) {
+      final a = JShort(1)..deletedIn(arena);
+      final b = JShort(2)..deletedIn(arena);
+      expect(a.$type, b.$type);
+      expect(a.$type.hashCode, b.$type.hashCode);
+    });
+  });
+  testRunner('JInteger.\$type hashCode and ==', () {
+    using((arena) {
+      final a = JInteger(1)..deletedIn(arena);
+      final b = JInteger(2)..deletedIn(arena);
+      expect(a.$type, b.$type);
+      expect(a.$type.hashCode, b.$type.hashCode);
+    });
+  });
+  testRunner('JLong.\$type hashCode and ==', () {
+    using((arena) {
+      final a = JLong(1)..deletedIn(arena);
+      final b = JLong(2)..deletedIn(arena);
+      expect(a.$type, b.$type);
+      expect(a.$type.hashCode, b.$type.hashCode);
+    });
+  });
+  testRunner('JFloat.\$type hashCode and ==', () {
+    using((arena) {
+      final a = JFloat(1.0)..deletedIn(arena);
+      final b = JFloat(2.0)..deletedIn(arena);
+      expect(a.$type, b.$type);
+      expect(a.$type.hashCode, b.$type.hashCode);
+    });
+  });
+  testRunner('JDouble.\$type hashCode and ==', () {
+    using((arena) {
+      final a = JDouble(1.0)..deletedIn(arena);
+      final b = JDouble(2.0)..deletedIn(arena);
+      expect(a.$type, b.$type);
+      expect(a.$type.hashCode, b.$type.hashCode);
+    });
+  });
+  testRunner('JBoolean.\$type hashCode and ==', () {
+    using((arena) {
+      final a = JBoolean(true)..deletedIn(arena);
+      final b = JBoolean(false)..deletedIn(arena);
+      expect(a.$type, b.$type);
+      expect(a.$type.hashCode, b.$type.hashCode);
+    });
+  });
+}
diff --git a/pkgs/jni/test/exception_test.dart b/pkgs/jni/test/exception_test.dart
index 01acfdf..d9af254 100644
--- a/pkgs/jni/test/exception_test.dart
+++ b/pkgs/jni/test/exception_test.dart
@@ -20,11 +20,8 @@
       Jni.spawn(dylibDir: "wrong_dir");
     } on HelperNotFoundException catch (_) {
       // stderr.write("\n$_\n");
-      try {
-        Jni.spawn(dylibDir: "build/jni_libs", jvmOptions: ["-Xmx128m"]);
-      } on JvmExistsException catch (_) {
-        // TODO(#51): Support destroying and reinstantiating JVM.
-      }
+      Jni.spawnIfNotExists(
+          dylibDir: "build/jni_libs", jvmOptions: ["-Xmx128m"]);
       caught = true;
     } on JvmExistsException {
       stderr.writeln('cannot verify: HelperNotFoundException thrown');
diff --git a/pkgs/jni/test/jarray_test.dart b/pkgs/jni/test/jarray_test.dart
index 5717d53..d0bc8cf 100644
--- a/pkgs/jni/test/jarray_test.dart
+++ b/pkgs/jni/test/jarray_test.dart
@@ -21,7 +21,7 @@
 void run({required TestRunnerCallback testRunner}) {
   testRunner("Java boolean array", () {
     using((arena) {
-      final array = JArray(JBoolean.type, 3)..deletedIn(arena);
+      final array = JArray(jboolean.type, 3)..deletedIn(arena);
       expect(array.length, 3);
       array[0] = true;
       array[1] = false;
@@ -46,7 +46,7 @@
   });
   testRunner("Java char array", () {
     using((arena) {
-      final array = JArray(JChar.type, 3)..deletedIn(arena);
+      final array = JArray(jchar.type, 3)..deletedIn(arena);
       expect(array.length, 3);
       array[0] = 'Ø­';
       array[1] = '2';
@@ -71,7 +71,7 @@
   });
   testRunner("Java byte array", () {
     using((arena) {
-      final array = JArray(JByte.type, 3)..deletedIn(arena);
+      final array = JArray(jbyte.type, 3)..deletedIn(arena);
       expect(array.length, 3);
       array[0] = 1;
       array[1] = 2;
@@ -96,7 +96,7 @@
   });
   testRunner("Java short array", () {
     using((arena) {
-      final array = JArray(JShort.type, 3)..deletedIn(arena);
+      final array = JArray(jshort.type, 3)..deletedIn(arena);
       expect(array.length, 3);
       array[0] = 1;
       array[1] = 2;
@@ -121,7 +121,7 @@
   });
   testRunner("Java int array", () {
     using((arena) {
-      final array = JArray(JInt.type, 3)..deletedIn(arena);
+      final array = JArray(jint.type, 3)..deletedIn(arena);
       expect(array.length, 3);
       array[0] = 1;
       array[1] = 2;
@@ -147,7 +147,7 @@
   const epsilon = 1e-6;
   testRunner("Java float array", () {
     using((arena) {
-      final array = JArray(JFloat.type, 3)..deletedIn(arena);
+      final array = JArray(jfloat.type, 3)..deletedIn(arena);
       expect(array.length, 3);
       array[0] = 0.5;
       array[1] = 2;
@@ -172,7 +172,7 @@
   });
   testRunner("Java double array", () {
     using((arena) {
-      final array = JArray(JDouble.type, 3)..deletedIn(arena);
+      final array = JArray(jdouble.type, 3)..deletedIn(arena);
       expect(array.length, 3);
       array[0] = 0.5;
       array[1] = 2;
@@ -241,11 +241,11 @@
   });
   testRunner("Java 2d array", () {
     using((arena) {
-      final array = JArray(JInt.type, 3)..deletedIn(arena);
+      final array = JArray(jint.type, 3)..deletedIn(arena);
       array[0] = 1;
       array[1] = 2;
       array[2] = 3;
-      final twoDimArray = JArray(JArray.type(JInt.type), 3)..deletedIn(arena);
+      final twoDimArray = JArray(JArray.type(jint.type), 3)..deletedIn(arena);
       expect(twoDimArray.length, 3);
       twoDimArray[0] = array;
       twoDimArray[1] = array;
@@ -276,4 +276,71 @@
       expect(array[2].toDartString(deleteOriginal: true), "abc");
     });
   });
+  testRunner('JArray of JByte', () {
+    using((arena) {
+      final arr = JArray(JByte.type, 1)..deletedIn(arena);
+      expect((arr[0]..deletedIn(arena)).isNull, true);
+    });
+  });
+  testRunner('JArray of JShort', () {
+    using((arena) {
+      final arr = JArray(JShort.type, 1)..deletedIn(arena);
+      expect((arr[0]..deletedIn(arena)).isNull, true);
+    });
+  });
+  testRunner('JArray of JInteger', () {
+    using((arena) {
+      final arr = JArray(JInteger.type, 1)..deletedIn(arena);
+      expect((arr[0]..deletedIn(arena)).isNull, true);
+    });
+  });
+  testRunner('JArray of JLong', () {
+    using((arena) {
+      final arr = JArray(JLong.type, 1)..deletedIn(arena);
+      expect((arr[0]..deletedIn(arena)).isNull, true);
+    });
+  });
+  testRunner('JArray of JFloat', () {
+    using((arena) {
+      final arr = JArray(JFloat.type, 1)..deletedIn(arena);
+      expect((arr[0]..deletedIn(arena)).isNull, true);
+    });
+  });
+  testRunner('JArray of JDouble', () {
+    using((arena) {
+      final arr = JArray(JDouble.type, 1)..deletedIn(arena);
+      expect((arr[0]..deletedIn(arena)).isNull, true);
+    });
+  });
+  testRunner('JArray of JBoolean', () {
+    using((arena) {
+      final arr = JArray(JBoolean.type, 1)..deletedIn(arena);
+      expect((arr[0]..deletedIn(arena)).isNull, true);
+    });
+  });
+  testRunner('JArray of JSet', () {
+    using((arena) {
+      final arr = JArray(JSet.type(JString.type), 1)..deletedIn(arena);
+      expect((arr[0]..deletedIn(arena)).isNull, true);
+    });
+  });
+  testRunner('JArray of JList', () {
+    using((arena) {
+      final arr = JArray(JList.type(JString.type), 1)..deletedIn(arena);
+      expect((arr[0]..deletedIn(arena)).isNull, true);
+    });
+  });
+  testRunner('JArray of JMap', () {
+    using((arena) {
+      final arr = JArray(JMap.type(JString.type, JString.type), 1)
+        ..deletedIn(arena);
+      expect((arr[0]..deletedIn(arena)).isNull, true);
+    });
+  });
+  testRunner('JArray of JIterator', () {
+    using((arena) {
+      final arr = JArray(JIterator.type(JString.type), 1)..deletedIn(arena);
+      expect((arr[0]..deletedIn(arena)).isNull, true);
+    });
+  });
 }
diff --git a/pkgs/jni/test/jlist_test.dart b/pkgs/jni/test/jlist_test.dart
new file mode 100644
index 0000000..c483d53
--- /dev/null
+++ b/pkgs/jni/test/jlist_test.dart
@@ -0,0 +1,216 @@
+// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:io';
+
+import 'package:jni/jni.dart';
+import 'package:test/test.dart';
+
+import 'test_util/test_util.dart';
+
+void main() {
+  // Don't forget to initialize JNI.
+  if (!Platform.isAndroid) {
+    checkDylibIsUpToDate();
+    Jni.spawnIfNotExists(dylibDir: "build/jni_libs", jvmOptions: ["-Xmx128m"]);
+  }
+  run(testRunner: test);
+}
+
+void run({required TestRunnerCallback testRunner}) {
+  JList<JString> testDataList(Arena arena) {
+    return [
+      "1".toJString()..deletedIn(arena),
+      "2".toJString()..deletedIn(arena),
+      "3".toJString()..deletedIn(arena),
+    ].toJList(JString.type)
+      ..deletedIn(arena);
+  }
+
+  testRunner('length get', () {
+    using((arena) {
+      final list = testDataList(arena);
+      expect(list.length, 3);
+    });
+  });
+  testRunner('length set', () {
+    using((arena) {
+      final list = testDataList(arena);
+      list.length = 2;
+      expect(list.length, 2);
+      list.length = 3;
+      expect(list.length, 3);
+      expect(list.last.isNull, true);
+    });
+  });
+  testRunner('[]', () {
+    using((arena) {
+      final list = testDataList(arena);
+      expect(list[0].toDartString(deleteOriginal: true), "1");
+      expect(list[1].toDartString(deleteOriginal: true), "2");
+      expect(list[2].toDartString(deleteOriginal: true), "3");
+    });
+  });
+  testRunner('[]=', () {
+    using((arena) {
+      final list = testDataList(arena);
+      expect(list[0].toDartString(deleteOriginal: true), "1");
+      list[0] = "2".toJString()..deletedIn(arena);
+      expect(list[0].toDartString(deleteOriginal: true), "2");
+    });
+  });
+  testRunner('add', () {
+    using((arena) {
+      final list = testDataList(arena);
+      list.add("4".toJString()..deletedIn(arena));
+      expect(list.length, 4);
+      expect(list[3].toDartString(deleteOriginal: true), "4");
+    });
+  });
+  testRunner('addAll', () {
+    using((arena) {
+      final list = testDataList(arena);
+      final toAppend = testDataList(arena);
+      list.addAll(toAppend);
+      expect(list.length, 6);
+      list.addAll(["4".toJString()..deletedIn(arena)]);
+      expect(list.length, 7);
+    });
+  });
+  testRunner('clear, isEmpty, isNotEmpty', () {
+    using((arena) {
+      final list = testDataList(arena);
+      expect(list.isNotEmpty, true);
+      expect(list.isEmpty, false);
+      list.clear();
+      expect(list.isNotEmpty, false);
+      expect(list.isEmpty, true);
+    });
+  });
+  testRunner('contains', () {
+    using((arena) {
+      final list = testDataList(arena);
+      // ignore: iterable_contains_unrelated_type
+      expect(list.contains("1"), false);
+      expect(list.contains("1".toJString()..deletedIn(arena)), true);
+      expect(list.contains("4".toJString()..deletedIn(arena)), false);
+    });
+  });
+  testRunner('getRange', () {
+    using((arena) {
+      final list = testDataList(arena);
+      // ignore: iterable_contains_unrelated_type
+      final range = list.getRange(1, 2)..deletedIn(arena);
+      expect(range.length, 1);
+      expect(range.first.toDartString(deleteOriginal: true), "2");
+    });
+  });
+  testRunner('indexOf', () {
+    using((arena) {
+      final list = testDataList(arena);
+      expect(list.indexOf(1), -1);
+      expect(list.indexOf("1".toJString()..toDartString()), 0);
+      expect(list.indexOf("2".toJString()..toDartString()), 1);
+      expect(list.indexOf("1".toJString()..toDartString(), 1), -1);
+      expect(list.indexOf("1".toJString()..toDartString(), -1), 0);
+    });
+  });
+  testRunner('insert', () {
+    using((arena) {
+      final list = testDataList(arena);
+      list.insert(1, "0".toJString()..deletedIn(arena));
+      expect(list.length, 4);
+      expect(list[1].toDartString(deleteOriginal: true), "0");
+    });
+  });
+  testRunner('insertAll', () {
+    using((arena) {
+      final list = testDataList(arena);
+      final toInsert = testDataList(arena);
+      list.insertAll(1, toInsert);
+      expect(list[1].toDartString(deleteOriginal: true), "1");
+      expect(list.length, 6);
+      list.insertAll(1, ["4".toJString()..deletedIn(arena)]);
+      expect(list.length, 7);
+      expect(list[1].toDartString(deleteOriginal: true), "4");
+    });
+  });
+  testRunner('iterator', () {
+    using((arena) {
+      final list = testDataList(arena);
+      final it = list.iterator;
+      expect(it.moveNext(), true);
+      expect(it.current.toDartString(deleteOriginal: true), "1");
+      expect(it.moveNext(), true);
+      expect(it.current.toDartString(deleteOriginal: true), "2");
+      expect(it.moveNext(), true);
+      expect(it.current.toDartString(deleteOriginal: true), "3");
+      expect(it.moveNext(), false);
+    });
+  });
+  testRunner('remove', () {
+    using((arena) {
+      final list = testDataList(arena);
+      expect(list.remove("3".toJString()..deletedIn(arena)), true);
+      expect(list.length, 2);
+      expect(list.remove("4".toJString()..deletedIn(arena)), false);
+      // ignore: list_remove_unrelated_type
+      expect(list.remove(1), false);
+    });
+  });
+  testRunner('removeAt', () {
+    using((arena) {
+      final list = testDataList(arena);
+      expect(list.removeAt(0).toDartString(deleteOriginal: true), "1");
+      expect(list.removeAt(1).toDartString(deleteOriginal: true), "3");
+    });
+  });
+  testRunner('removeRange', () {
+    using((arena) {
+      final list = testDataList(arena);
+      list.removeRange(0, 2);
+      expect(list.single.toDartString(deleteOriginal: true), "3");
+    });
+  });
+  testRunner('==, hashCode', () {
+    using((arena) {
+      final a = testDataList(arena);
+      final b = testDataList(arena);
+      expect(a.hashCode, b.hashCode);
+      expect(a, b);
+      b.add("4".toJString()..deletedIn(arena));
+      expect(a.hashCode, isNot(b.hashCode));
+      expect(a, isNot(b));
+    });
+  });
+  testRunner('toSet', () {
+    using((arena) {
+      final list = testDataList(arena);
+      final set = list.toSet()..deletedIn(arena);
+      expect(set.length, 3);
+    });
+  });
+  testRunner('type hashCode, ==', () {
+    using((arena) {
+      final a = testDataList(arena);
+      final b = testDataList(arena);
+      expect(a.$type, b.$type);
+      expect(a.$type.hashCode, b.$type.hashCode);
+      final c = JList.array(JObject.type)..deletedIn(arena);
+      expect(a.$type, isNot(c.$type));
+      expect(a.$type.hashCode, isNot(c.$type.hashCode));
+    });
+  });
+  testRunner('JIterator type hashCode, ==', () {
+    using((arena) {
+      final a = testDataList(arena);
+      final b = testDataList(arena);
+      expect(a.iterator.$type, b.iterator.$type);
+      expect(a.iterator.$type.hashCode, b.iterator.$type.hashCode);
+      final c = JList.array(JObject.type)..deletedIn(arena);
+      expect(a.iterator.$type, isNot(c.iterator.$type));
+      expect(a.iterator.$type.hashCode, isNot(c.iterator.$type.hashCode));
+    });
+  });
+}
diff --git a/pkgs/jni/test/jmap_test.dart b/pkgs/jni/test/jmap_test.dart
new file mode 100644
index 0000000..23edb22
--- /dev/null
+++ b/pkgs/jni/test/jmap_test.dart
@@ -0,0 +1,166 @@
+// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:io';
+
+import 'package:jni/jni.dart';
+import 'package:test/test.dart';
+
+import 'test_util/test_util.dart';
+
+void main() {
+  // Don't forget to initialize JNI.
+  if (!Platform.isAndroid) {
+    Jni.spawnIfNotExists(dylibDir: "build/jni_libs", jvmOptions: ["-Xmx128m"]);
+  }
+  run(testRunner: test);
+}
+
+void run({required TestRunnerCallback testRunner}) {
+  JMap<JString, JString> testDataMap(Arena arena) {
+    return {
+      "1".toJString()..deletedIn(arena): "One".toJString()..deletedIn(arena),
+      "2".toJString()..deletedIn(arena): "Two".toJString()..deletedIn(arena),
+      "3".toJString()..deletedIn(arena): "Three".toJString()..deletedIn(arena),
+    }.toJMap(JString.type, JString.type)
+      ..deletedIn(arena);
+  }
+
+  testRunner('length', () {
+    using((arena) {
+      final map = testDataMap(arena);
+      expect(map.length, 3);
+    });
+  });
+  testRunner('[]', () {
+    using((arena) {
+      final map = testDataMap(arena);
+      // ignore: collection_methods_unrelated_type
+      expect(map[1], null);
+      expect(
+        map["1".toJString()..deletedIn(arena)]
+            ?.toDartString(deleteOriginal: true),
+        "One",
+      );
+      expect(
+        map["4".toJString()..deletedIn(arena)],
+        null,
+      );
+    });
+  });
+  testRunner('[]=', () {
+    using((arena) {
+      final map = testDataMap(arena);
+      map["0".toJString()..deletedIn(arena)] = "Zero".toJString()
+        ..deletedIn(arena);
+      expect(
+        map["0".toJString()..deletedIn(arena)]
+            ?.toDartString(deleteOriginal: true),
+        "Zero",
+      );
+      expect(map.length, 4);
+      map["1".toJString()..deletedIn(arena)] = "one!".toJString()
+        ..deletedIn(arena);
+      expect(
+        map["1".toJString()..deletedIn(arena)]
+            ?.toDartString(deleteOriginal: true),
+        "one!",
+      );
+      expect(map.length, 4);
+    });
+  });
+  testRunner('addAll', () {
+    using((arena) {
+      final map = testDataMap(arena);
+      final toAdd = {
+        "0".toJString()..deletedIn(arena): "Zero".toJString()..deletedIn(arena),
+        "1".toJString()..deletedIn(arena): "one!".toJString()..deletedIn(arena),
+      }.toJMap(JString.type, JString.type);
+      map.addAll(toAdd);
+      expect(map.length, 4);
+      expect(
+        map["0".toJString()..deletedIn(arena)]
+            ?.toDartString(deleteOriginal: true),
+        "Zero",
+      );
+      expect(
+        map["1".toJString()..deletedIn(arena)]
+            ?.toDartString(deleteOriginal: true),
+        "one!",
+      );
+      map.addAll({
+        "4".toJString()..deletedIn(arena): "Four".toJString()..deletedIn(arena)
+      });
+      expect(map.length, 5);
+    });
+  });
+  testRunner('clear, isEmpty, isNotEmpty', () {
+    using((arena) {
+      final map = testDataMap(arena);
+      expect(map.isEmpty, false);
+      expect(map.isNotEmpty, true);
+      map.clear();
+      expect(map.isEmpty, true);
+      expect(map.isNotEmpty, false);
+    });
+  });
+  testRunner('containsKey', () {
+    using((arena) {
+      final map = testDataMap(arena);
+      // ignore: iterable_contains_unrelated_type
+      expect(map.containsKey(1), false);
+      expect(map.containsKey("1".toJString()..deletedIn(arena)), true);
+      expect(map.containsKey("4".toJString()..deletedIn(arena)), false);
+    });
+  });
+  testRunner('containsValue', () {
+    using((arena) {
+      final map = testDataMap(arena);
+      // ignore: iterable_contains_unrelated_type
+      expect(map.containsValue(1), false);
+      expect(map.containsValue("One".toJString()..deletedIn(arena)), true);
+      expect(map.containsValue("Four".toJString()..deletedIn(arena)), false);
+    });
+  });
+  testRunner('keys', () {
+    using((arena) {
+      final map = testDataMap(arena);
+      final keys = map.keys;
+      expect(
+        keys
+            .map((element) => element.toDartString(deleteOriginal: true))
+            .toSet(),
+        {"1", "2", "3"},
+      );
+    });
+  });
+  testRunner('remove', () {
+    using((arena) {
+      final map = testDataMap(arena);
+      // ignore: collection_methods_unrelated_type
+      expect(map.remove(1), null);
+      expect(map.remove("4".toJString()..deletedIn(arena)), null);
+      expect(map.length, 3);
+      expect(
+        map
+            .remove("3".toJString()..deletedIn(arena))
+            ?.toDartString(deleteOriginal: true),
+        "Three",
+      );
+      expect(map.length, 2);
+    });
+  });
+  testRunner('type hashCode, ==', () {
+    using((arena) {
+      final a = testDataMap(arena);
+      final b = testDataMap(arena);
+      expect(a.$type, b.$type);
+      expect(a.$type, b.$type);
+      expect(a.$type.hashCode, b.$type.hashCode);
+      final c = JMap.hash(JObject.type, JObject.type)..deletedIn(arena);
+      expect(a.$type, isNot(c.$type));
+      expect(a.$type.hashCode, isNot(c.$type.hashCode));
+    });
+  });
+}
diff --git a/pkgs/jni/test/jset_test.dart b/pkgs/jni/test/jset_test.dart
new file mode 100644
index 0000000..92aaa0c
--- /dev/null
+++ b/pkgs/jni/test/jset_test.dart
@@ -0,0 +1,202 @@
+// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:io';
+
+import 'package:jni/jni.dart';
+import 'package:test/test.dart';
+
+import 'test_util/test_util.dart';
+
+void main() {
+  // Don't forget to initialize JNI.
+  if (!Platform.isAndroid) {
+    checkDylibIsUpToDate();
+    Jni.spawnIfNotExists(dylibDir: "build/jni_libs", jvmOptions: ["-Xmx128m"]);
+  }
+  run(testRunner: test);
+}
+
+void run({required TestRunnerCallback testRunner}) {
+  JSet<JString> testDataSet(Arena arena) {
+    return {
+      "1".toJString()..deletedIn(arena),
+      "2".toJString()..deletedIn(arena),
+      "3".toJString()..deletedIn(arena),
+    }.toJSet(JString.type)
+      ..deletedIn(arena);
+  }
+
+  testRunner('length', () {
+    using((arena) {
+      final set = testDataSet(arena);
+      expect(set.length, 3);
+    });
+  });
+  testRunner('add', () {
+    using((arena) {
+      final set = testDataSet(arena);
+      set.add("1".toJString()..deletedIn(arena));
+      expect(set.length, 3);
+      set.add("4".toJString()..deletedIn(arena));
+      expect(set.length, 4);
+    });
+  });
+  testRunner('addAll', () {
+    using((arena) {
+      final set = testDataSet(arena);
+      final toAdd = testDataSet(arena);
+      toAdd.add("4".toJString()..deletedIn(arena));
+      set.addAll(toAdd);
+      expect(set.length, 4);
+      set.addAll([
+        "1".toJString()..deletedIn(arena),
+        "5".toJString()..deletedIn(arena),
+      ]);
+      expect(set.length, 5);
+    });
+  });
+  testRunner('clear, isEmpty, isNotEmpty', () {
+    using((arena) {
+      final set = testDataSet(arena);
+      set.clear();
+      expect(set.isEmpty, true);
+      expect(set.isNotEmpty, false);
+    });
+  });
+  testRunner('contains', () {
+    using((arena) {
+      final set = testDataSet(arena);
+      // ignore: iterable_contains_unrelated_type
+      expect(set.contains(1), false);
+      expect(set.contains("1".toJString()..deletedIn(arena)), true);
+      expect(set.contains("4".toJString()..deletedIn(arena)), false);
+    });
+  });
+  testRunner('containsAll', () {
+    using((arena) {
+      final set = testDataSet(arena);
+      expect(set.containsAll(set), true);
+      expect(
+        set.containsAll([
+          "1".toJString()..deletedIn(arena),
+          "2".toJString()..deletedIn(arena),
+        ]),
+        true,
+      );
+      final testSet = testDataSet(arena);
+      testSet.add("4".toJString()..deletedIn(arena));
+      expect(set.containsAll(testSet), false);
+      expect(set.containsAll(["4".toJString()..deletedIn(arena)]), false);
+    });
+  });
+  testRunner('iterator', () {
+    using((arena) {
+      final set = testDataSet(arena);
+      final it = set.iterator;
+      // There are no order guarantees in a hashset.
+      final dartSet = <String>{};
+      expect(it.moveNext(), true);
+      dartSet.add(it.current.toDartString(deleteOriginal: true));
+      expect(it.moveNext(), true);
+      dartSet.add(it.current.toDartString(deleteOriginal: true));
+      expect(it.moveNext(), true);
+      dartSet.add(it.current.toDartString(deleteOriginal: true));
+      expect(it.moveNext(), false);
+      // So we just check if the elements have appeared in some order.
+      expect(dartSet, {"1", "2", "3"});
+    });
+  });
+  testRunner('remove', () {
+    using((arena) {
+      final set = testDataSet(arena);
+      // ignore: collection_methods_unrelated_type
+      expect(set.remove(1), false);
+      expect(set.remove("4".toJString()..deletedIn(arena)), false);
+      expect(set.length, 3);
+      expect(set.remove("3".toJString()..deletedIn(arena)), true);
+      expect(set.length, 2);
+    });
+  });
+  testRunner('removeAll', () {
+    using((arena) {
+      final set = testDataSet(arena);
+      final toRemoveExclusive = {"4".toJString()..deletedIn(arena)}
+          .toJSet(JString.type)
+        ..deletedIn(arena);
+      set.removeAll(toRemoveExclusive);
+      expect(set.length, 3);
+      final toRemoveInclusive = {
+        "1".toJString()..deletedIn(arena),
+        "4".toJString()..deletedIn(arena),
+      }.toJSet(JString.type)
+        ..deletedIn(arena);
+      set.removeAll(toRemoveInclusive);
+      expect(set.length, 2);
+      set.removeAll(["2".toJString()..deletedIn(arena)]);
+      expect(set.length, 1);
+    });
+  });
+  testRunner('retainAll', () {
+    using((arena) {
+      final set = testDataSet(arena);
+      final toRetain = {
+        "1".toJString()..deletedIn(arena),
+        "3".toJString()..deletedIn(arena),
+        "4".toJString()..deletedIn(arena),
+      };
+      set.retainAll(set);
+      expect(set.length, 3);
+      set.retainAll(toRetain);
+      expect(set.length, 2);
+      final toRetainJSet = toRetain.toJSet(JString.type)..deletedIn(arena);
+      set.retainAll(toRetainJSet);
+      expect(set.length, 2);
+    });
+  });
+  testRunner('==, hashCode', () {
+    using((arena) {
+      final a = testDataSet(arena);
+      final b = testDataSet(arena);
+      expect(a.hashCode, b.hashCode);
+      expect(a, b);
+      b.add("4".toJString()..deletedIn(arena));
+      expect(a.hashCode, isNot(b.hashCode));
+      expect(a, isNot(b));
+    });
+  });
+  testRunner('lookup', () {
+    using((arena) {
+      final set = testDataSet(arena);
+      // ignore: iterable_contains_unrelated_type
+      expect(set.lookup(1), null);
+      expect(
+        set.lookup("1".toJString())?.toDartString(deleteOriginal: true),
+        "1",
+      );
+      expect(set.lookup("4".toJString()..deletedIn(arena)), null);
+    });
+  });
+  testRunner('toSet', () {
+    using((arena) {
+      // Test if the set gets copied.
+      final set = testDataSet(arena);
+      final setCopy = set.toSet()..deletedIn(arena);
+      expect(set, setCopy);
+      set.add("4".toJString()..deletedIn(arena));
+      expect(set, isNot(setCopy));
+    });
+  });
+  testRunner('type hashCode, ==', () {
+    using((arena) {
+      final a = testDataSet(arena);
+      final b = testDataSet(arena);
+      expect(a.$type, b.$type);
+      expect(a.$type.hashCode, b.$type.hashCode);
+      final c = JSet.hash(JObject.type)..deletedIn(arena);
+      expect(a.$type, isNot(c.$type));
+      expect(a.$type.hashCode, isNot(c.$type.hashCode));
+    });
+  });
+}
diff --git a/pkgs/jni/test/type_test.dart b/pkgs/jni/test/type_test.dart
index 68693a5..ffc11d6 100644
--- a/pkgs/jni/test/type_test.dart
+++ b/pkgs/jni/test/type_test.dart
@@ -217,10 +217,58 @@
     expect(lowestCommonSuperType([JString.type]), JString.type);
     expect(lowestCommonSuperType([JObject.type, JObject.type]), JObject.type);
     expect(lowestCommonSuperType([JString.type, JString.type]), JString.type);
-    expect(lowestCommonSuperType([JString.type, JArray.type(JLong.type)]),
+    expect(lowestCommonSuperType([JString.type, JArray.type(jlong.type)]),
         JObject.type);
   });
 
+  testRunner('Boxed types', () {
+    expect(
+      lowestCommonSuperType([
+        JByte.type,
+        JInteger.type,
+        JLong.type,
+        JShort.type,
+        JDouble.type,
+        JFloat.type,
+      ]),
+      JNumber.type,
+    );
+    expect(lowestCommonSuperType([JByte.type, JBoolean.type]), JObject.type);
+  });
+
+  testRunner('util types', () {
+    using((arena) {
+      expect(
+        lowestCommonSuperType([
+          JList.type(JObject.type),
+          JList.type(JObject.type),
+        ]),
+        JList.type(JObject.type),
+      );
+      expect(
+        lowestCommonSuperType([
+          JList.type(JObject.type),
+          JList.type(JString.type),
+        ]),
+        JObject.type,
+      );
+      expect(
+        lowestCommonSuperType([
+          JList.type(JObject.type),
+          JMap.type(JObject.type, JObject.type),
+        ]),
+        JObject.type,
+      );
+      expect(
+        lowestCommonSuperType([
+          JSet.type(JObject.type),
+          JIterator.type(JObject.type),
+        ]),
+        JObject.type,
+      );
+    });
+  });
+
   testRunner('Mocked type tree', () {
     // As a reminder, this is how the type tree looks like:
     //   JObject
diff --git a/pkgs/jnigen/CHANGELOG.md b/pkgs/jnigen/CHANGELOG.md
index 5c8b9ca..23c1e26 100644
--- a/pkgs/jnigen/CHANGELOG.md
+++ b/pkgs/jnigen/CHANGELOG.md
@@ -1,3 +1,6 @@
+## 0.5.0-dev.0
+* No JNIGen changes (yet), but keeping version in lockstep with `package:jni`.
+
 ## 0.4.0
 * **Breaking Change** ([#145](https://github.com/dart-lang/jnigen/issues/145)): Type arguments are now named instead of positional.
 * Type parameters can now be inferred when possible.
diff --git a/pkgs/jnigen/analysis_options.yaml b/pkgs/jnigen/analysis_options.yaml
index 063bacc..4bebf0e 100644
--- a/pkgs/jnigen/analysis_options.yaml
+++ b/pkgs/jnigen/analysis_options.yaml
@@ -17,4 +17,3 @@
     - unawaited_futures
     - prefer_const_constructors
     - prefer_relative_imports
-
diff --git a/pkgs/jnigen/android_test_runner/lib/main.dart b/pkgs/jnigen/android_test_runner/lib/main.dart
index 8e88928..ee6f2d8 100644
--- a/pkgs/jnigen/android_test_runner/lib/main.dart
+++ b/pkgs/jnigen/android_test_runner/lib/main.dart
@@ -40,7 +40,7 @@
       body: Center(
         child: Column(
           mainAxisAlignment: MainAxisAlignment.center,
-          children: const <Widget>[
+          children: const [
             Text(
               'This app should be run as flutter integration test',
             ),
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 5925b92..50e1e76 100644
--- a/pkgs/jnigen/example/in_app_java/lib/android_utils.dart
+++ b/pkgs/jnigen/example/in_app_java/lib/android_utils.dart
@@ -27,7 +27,7 @@
 /// from: com.example.in_app_java.AndroidUtils
 class AndroidUtils extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<AndroidUtils> $type = type;
 
   AndroidUtils.fromRef(
     jni.JObjectPtr ref,
@@ -73,7 +73,8 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $AndroidUtilsType && other is $AndroidUtilsType;
+    return other.runtimeType == ($AndroidUtilsType) &&
+        other is $AndroidUtilsType;
   }
 }
 
@@ -128,7 +129,7 @@
 /// <p/>
 class EmojiCompat extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<EmojiCompat> $type = type;
 
   EmojiCompat.fromRef(
     jni.JObjectPtr ref,
@@ -1044,7 +1045,7 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $EmojiCompatType && other is $EmojiCompatType;
+    return other.runtimeType == ($EmojiCompatType) && other is $EmojiCompatType;
   }
 }
 
@@ -1055,7 +1056,7 @@
 ///@see \#init(EmojiCompat.Config)
 class EmojiCompat_Config extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<EmojiCompat_Config> $type = type;
 
   EmojiCompat_Config.fromRef(
     jni.JObjectPtr ref,
@@ -1379,7 +1380,7 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $EmojiCompat_ConfigType &&
+    return other.runtimeType == ($EmojiCompat_ConfigType) &&
         other is $EmojiCompat_ConfigType;
   }
 }
@@ -1390,7 +1391,7 @@
 /// MetadataRepoLoader during MetadataRepoLoader\#load(MetadataRepoLoaderCallback) call.
 class EmojiCompat_MetadataRepoLoaderCallback extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<EmojiCompat_MetadataRepoLoaderCallback> $type = type;
 
   EmojiCompat_MetadataRepoLoaderCallback.fromRef(
     jni.JObjectPtr ref,
@@ -1470,7 +1471,7 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $EmojiCompat_MetadataRepoLoaderCallbackType &&
+    return other.runtimeType == ($EmojiCompat_MetadataRepoLoaderCallbackType) &&
         other is $EmojiCompat_MetadataRepoLoaderCallbackType;
   }
 }
@@ -1480,7 +1481,7 @@
 /// Interface to check if a given emoji exists on the system.
 class EmojiCompat_GlyphChecker extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<EmojiCompat_GlyphChecker> $type = type;
 
   EmojiCompat_GlyphChecker.fromRef(
     jni.JObjectPtr ref,
@@ -1570,7 +1571,7 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $EmojiCompat_GlyphCheckerType &&
+    return other.runtimeType == ($EmojiCompat_GlyphCheckerType) &&
         other is $EmojiCompat_GlyphCheckerType;
   }
 }
@@ -1580,7 +1581,7 @@
 /// Interface to load emoji metadata.
 class EmojiCompat_MetadataRepoLoader extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<EmojiCompat_MetadataRepoLoader> $type = type;
 
   EmojiCompat_MetadataRepoLoader.fromRef(
     jni.JObjectPtr ref,
@@ -1633,7 +1634,7 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $EmojiCompat_MetadataRepoLoaderType &&
+    return other.runtimeType == ($EmojiCompat_MetadataRepoLoaderType) &&
         other is $EmojiCompat_MetadataRepoLoaderType;
   }
 }
@@ -1643,7 +1644,7 @@
 /// Listener class for the initialization of the EmojiCompat.
 class EmojiCompat_InitCallback extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<EmojiCompat_InitCallback> $type = type;
 
   EmojiCompat_InitCallback.fromRef(
     jni.JObjectPtr ref,
@@ -1716,7 +1717,7 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $EmojiCompat_InitCallbackType &&
+    return other.runtimeType == ($EmojiCompat_InitCallbackType) &&
         other is $EmojiCompat_InitCallbackType;
   }
 }
@@ -1726,7 +1727,7 @@
 /// @hide
 class EmojiCompat_DefaultSpanFactory extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<EmojiCompat_DefaultSpanFactory> $type = type;
 
   EmojiCompat_DefaultSpanFactory.fromRef(
     jni.JObjectPtr ref,
@@ -1791,7 +1792,7 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $EmojiCompat_DefaultSpanFactoryType &&
+    return other.runtimeType == ($EmojiCompat_DefaultSpanFactoryType) &&
         other is $EmojiCompat_DefaultSpanFactoryType;
   }
 }
@@ -1806,7 +1807,7 @@
 /// emoji display (for example, resizing or repositioning emoji).
 class EmojiCompat_SpanFactory extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<EmojiCompat_SpanFactory> $type = type;
 
   EmojiCompat_SpanFactory.fromRef(
     jni.JObjectPtr ref,
@@ -1860,7 +1861,7 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $EmojiCompat_SpanFactoryType &&
+    return other.runtimeType == ($EmojiCompat_SpanFactoryType) &&
         other is $EmojiCompat_SpanFactoryType;
   }
 }
@@ -1903,7 +1904,7 @@
 /// </ol>
 class DefaultEmojiCompatConfig extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<DefaultEmojiCompatConfig> $type = type;
 
   DefaultEmojiCompatConfig.fromRef(
     jni.JObjectPtr ref,
@@ -1958,7 +1959,7 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $DefaultEmojiCompatConfigType &&
+    return other.runtimeType == ($DefaultEmojiCompatConfigType) &&
         other is $DefaultEmojiCompatConfigType;
   }
 }
@@ -1970,7 +1971,9 @@
 class DefaultEmojiCompatConfig_DefaultEmojiCompatConfigHelper_API28
     extends DefaultEmojiCompatConfig_DefaultEmojiCompatConfigHelper_API19 {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<
+          DefaultEmojiCompatConfig_DefaultEmojiCompatConfigHelper_API28> $type =
+      type;
 
   DefaultEmojiCompatConfig_DefaultEmojiCompatConfigHelper_API28.fromRef(
     jni.JObjectPtr ref,
@@ -2042,7 +2045,7 @@
   @override
   bool operator ==(Object other) {
     return other.runtimeType ==
-            $DefaultEmojiCompatConfig_DefaultEmojiCompatConfigHelper_API28Type &&
+            ($DefaultEmojiCompatConfig_DefaultEmojiCompatConfigHelper_API28Type) &&
         other
             is $DefaultEmojiCompatConfig_DefaultEmojiCompatConfigHelper_API28Type;
   }
@@ -2055,7 +2058,9 @@
 class DefaultEmojiCompatConfig_DefaultEmojiCompatConfigHelper_API19
     extends DefaultEmojiCompatConfig_DefaultEmojiCompatConfigHelper {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<
+          DefaultEmojiCompatConfig_DefaultEmojiCompatConfigHelper_API19> $type =
+      type;
 
   DefaultEmojiCompatConfig_DefaultEmojiCompatConfigHelper_API19.fromRef(
     jni.JObjectPtr ref,
@@ -2148,7 +2153,7 @@
   @override
   bool operator ==(Object other) {
     return other.runtimeType ==
-            $DefaultEmojiCompatConfig_DefaultEmojiCompatConfigHelper_API19Type &&
+            ($DefaultEmojiCompatConfig_DefaultEmojiCompatConfigHelper_API19Type) &&
         other
             is $DefaultEmojiCompatConfig_DefaultEmojiCompatConfigHelper_API19Type;
   }
@@ -2161,7 +2166,9 @@
 class DefaultEmojiCompatConfig_DefaultEmojiCompatConfigHelper
     extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni
+          .JObjType<DefaultEmojiCompatConfig_DefaultEmojiCompatConfigHelper>
+      $type = type;
 
   DefaultEmojiCompatConfig_DefaultEmojiCompatConfigHelper.fromRef(
     jni.JObjectPtr ref,
@@ -2279,7 +2286,7 @@
   @override
   bool operator ==(Object other) {
     return other.runtimeType ==
-            $DefaultEmojiCompatConfig_DefaultEmojiCompatConfigHelperType &&
+            ($DefaultEmojiCompatConfig_DefaultEmojiCompatConfigHelperType) &&
         other is $DefaultEmojiCompatConfig_DefaultEmojiCompatConfigHelperType;
   }
 }
@@ -2292,7 +2299,9 @@
 class DefaultEmojiCompatConfig_DefaultEmojiCompatConfigFactory
     extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni
+          .JObjType<DefaultEmojiCompatConfig_DefaultEmojiCompatConfigFactory>
+      $type = type;
 
   DefaultEmojiCompatConfig_DefaultEmojiCompatConfigFactory.fromRef(
     jni.JObjectPtr ref,
@@ -2366,7 +2375,7 @@
   @override
   bool operator ==(Object other) {
     return other.runtimeType ==
-            $DefaultEmojiCompatConfig_DefaultEmojiCompatConfigFactoryType &&
+            ($DefaultEmojiCompatConfig_DefaultEmojiCompatConfigFactoryType) &&
         other is $DefaultEmojiCompatConfig_DefaultEmojiCompatConfigFactoryType;
   }
 }
@@ -2374,7 +2383,7 @@
 /// from: android.os.Build
 class Build extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<Build> $type = type;
 
   Build.fromRef(
     jni.JObjectPtr ref,
@@ -2714,7 +2723,7 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $BuildType && other is $BuildType;
+    return other.runtimeType == ($BuildType) && other is $BuildType;
   }
 }
 
@@ -2722,7 +2731,7 @@
 class HashMap<$K extends jni.JObject, $V extends jni.JObject>
     extends jni.JObject {
   @override
-  late final jni.JObjType $type = type(K, V);
+  late final jni.JObjType<HashMap<$K, $V>> $type = type(K, V);
 
   final jni.JObjType<$K> K;
   final jni.JObjType<$V> V;
@@ -3220,8 +3229,8 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $HashMapType &&
-        other is $HashMapType &&
+    return other.runtimeType == ($HashMapType<$K, $V>) &&
+        other is $HashMapType<$K, $V> &&
         K == other.K &&
         V == other.V;
   }
diff --git a/pkgs/jnigen/example/kotlin_plugin/lib/kotlin_bindings.dart b/pkgs/jnigen/example/kotlin_plugin/lib/kotlin_bindings.dart
index 25cd604..78a7ded 100644
--- a/pkgs/jnigen/example/kotlin_plugin/lib/kotlin_bindings.dart
+++ b/pkgs/jnigen/example/kotlin_plugin/lib/kotlin_bindings.dart
@@ -27,7 +27,7 @@
 /// from: Example
 class Example extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<Example> $type = type;
 
   Example.fromRef(
     jni.JObjectPtr ref,
@@ -88,6 +88,6 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $ExampleType && other is $ExampleType;
+    return other.runtimeType == ($ExampleType) && other is $ExampleType;
   }
 }
diff --git a/pkgs/jnigen/example/notification_plugin/lib/notifications.dart b/pkgs/jnigen/example/notification_plugin/lib/notifications.dart
index 5a4d559..c95f3e6 100644
--- a/pkgs/jnigen/example/notification_plugin/lib/notifications.dart
+++ b/pkgs/jnigen/example/notification_plugin/lib/notifications.dart
@@ -31,7 +31,7 @@
 /// from: com.example.notification_plugin.Notifications
 class Notifications extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<Notifications> $type = type;
 
   Notifications.fromRef(
     jni.JObjectPtr ref,
@@ -93,7 +93,7 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $NotificationsType &&
+    return other.runtimeType == ($NotificationsType) &&
         other is $NotificationsType;
   }
 }
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 ec0d860..25d1146 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
@@ -47,7 +47,7 @@
 ///@author Ben Litchfield
 class PDDocument extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<PDDocument> $type = type;
 
   PDDocument.fromRef(
     jni.JObjectPtr ref,
@@ -968,7 +968,7 @@
   ///@throws InvalidPasswordException If the PDF required a non-empty password.
   ///@throws IOException In case of a reading or parsing error.
   static PDDocument load12(
-    jni.JArray<jni.JByte> input,
+    jni.JArray<jni.jbyte> input,
   ) {
     return const $PDDocumentType().fromRef(_load12(input.reference).object);
   }
@@ -991,7 +991,7 @@
   ///@throws InvalidPasswordException If the password is incorrect.
   ///@throws IOException In case of a reading or parsing error.
   static PDDocument load13(
-    jni.JArray<jni.JByte> input,
+    jni.JArray<jni.jbyte> input,
     jni.JString password,
   ) {
     return const $PDDocumentType()
@@ -1021,7 +1021,7 @@
   ///@throws InvalidPasswordException If the password is incorrect.
   ///@throws IOException In case of a reading or parsing error.
   static PDDocument load14(
-    jni.JArray<jni.JByte> input,
+    jni.JArray<jni.jbyte> input,
     jni.JString password,
     jni.JObject keyStore,
     jni.JString alias,
@@ -1060,7 +1060,7 @@
   ///@throws InvalidPasswordException If the password is incorrect.
   ///@throws IOException In case of a reading or parsing error.
   static PDDocument load15(
-    jni.JArray<jni.JByte> input,
+    jni.JArray<jni.jbyte> input,
     jni.JString password,
     jni.JObject keyStore,
     jni.JString alias,
@@ -1528,6 +1528,6 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $PDDocumentType && other is $PDDocumentType;
+    return other.runtimeType == ($PDDocumentType) && other is $PDDocumentType;
   }
 }
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 90134bc..0b23541 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
@@ -48,7 +48,7 @@
 ///@author Gerardo Ortiz
 class PDDocumentInformation extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<PDDocumentInformation> $type = type;
 
   PDDocumentInformation.fromRef(
     jni.JObjectPtr ref,
@@ -514,7 +514,7 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $PDDocumentInformationType &&
+    return other.runtimeType == ($PDDocumentInformationType) &&
         other is $PDDocumentInformationType;
   }
 }
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 59c7919..eb39129 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
@@ -51,7 +51,7 @@
 ///@author Ben Litchfield
 class PDFTextStripper extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<PDFTextStripper> $type = type;
 
   PDFTextStripper.fromRef(
     jni.JObjectPtr ref,
@@ -1416,7 +1416,7 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $PDFTextStripperType &&
+    return other.runtimeType == ($PDFTextStripperType) &&
         other is $PDFTextStripperType;
   }
 }
diff --git a/pkgs/jnigen/lib/src/bindings/dart_generator.dart b/pkgs/jnigen/lib/src/bindings/dart_generator.dart
index c221529..326069a 100644
--- a/pkgs/jnigen/lib/src/bindings/dart_generator.dart
+++ b/pkgs/jnigen/lib/src/bindings/dart_generator.dart
@@ -36,9 +36,9 @@
 const _typeClassSuffix = 'Type';
 
 // Misc.
-const _classRef = '_classRef';
-const _env = 'jniEnv';
-const _accessors = 'jniAccessors';
+const _classRef = '_class.reference';
+const _env = '$_jni.Jni.env';
+const _accessors = '$_jni.Jni.accessors';
 const _lookup = 'jniLookup';
 const _selfPointer = 'reference';
 
@@ -145,17 +145,6 @@
 
 ''';
 
-  static const dartOnlyInitImport = 'import "package:jni/jni.dart" as jni;\n';
-
-  static const dartOnlyInitCode = '''
-// Auto-generated initialization code.
-
-final $_env = $_jni.Jni.env;
-final $_accessors = $_jni.Jni.accessors;
-
-
-''';
-
   static const autoGeneratedNotice = '// Autogenerated by jnigen. '
       'DO NOT EDIT!\n\n';
   static const defaultImports = '''
@@ -201,8 +190,6 @@
       s.writeln(defaultImports);
       if (cBased) {
         s.writeln(cInitCode);
-      } else {
-        s.writeln(dartOnlyInitCode);
       }
       final classGenerator = _ClassGenerator(config, s);
       node.decls.values.accept(classGenerator).toList();
@@ -224,14 +211,16 @@
 
     log.info("Using dart root = $root");
     const initFileName = '_init.dart';
-    final initFileUri = root.resolve(initFileName);
-    final initFile = File.fromUri(initFileUri);
-    await initFile.create(recursive: true);
-    final initStream = initFile.openWrite();
-    initStream.writeln(preamble);
-    initStream.writeln(cBased ? cInitImport : dartOnlyInitImport);
-    initStream.writeln(cBased ? cInitCode : dartOnlyInitCode);
-    await initStream.close();
+    if (cBased) {
+      final initFileUri = root.resolve(initFileName);
+      final initFile = File.fromUri(initFileUri);
+      await initFile.create(recursive: true);
+      final initStream = initFile.openWrite();
+      initStream.writeln(preamble);
+      initStream.writeln(cInitImport);
+      initStream.writeln(cInitCode);
+      await initStream.close();
+    }
     for (var fileClassName in files.keys) {
       final relativeFileName = '${fileClassName.replaceAll('.', '/')}.dart';
       final dartFileUri = root.resolve(relativeFileName);
@@ -245,12 +234,14 @@
       dartFileStream.writeln(defaultLintSuppressions);
       dartFileStream.writeln(defaultImports);
       final s = StringBuffer();
-      final initFilePath = ('../' *
-              relativeFileName.codeUnits
-                  .where((cu) => cu == '/'.codeUnitAt(0))
-                  .length) +
-          initFileName;
-      s.write('import "$initFilePath";');
+      if (cBased) {
+        final initFilePath = ('../' *
+                relativeFileName.codeUnits
+                    .where((cu) => cu == '/'.codeUnitAt(0))
+                    .length) +
+            initFileName;
+        s.write('import "$initFilePath";');
+      }
       final resolver = Resolver(
         importMap: config.importMap ?? {},
         currentClass: fileClassName,
@@ -342,7 +333,7 @@
     s.write('''
 class $name$typeParamsDef extends $superName {
   @override
-  late final $_jType $instanceTypeGetter = $staticTypeGetter$staticTypeGetterCallArgs;
+  late final $_jType<$name$typeParamsCall> $instanceTypeGetter = $staticTypeGetter$staticTypeGetterCallArgs;
 
   $typeClassDefinitions
 
@@ -359,7 +350,7 @@
     if (isDartOnly) {
       final internalName = node.internalName;
       s.write('''
-  static final $_classRef = $_accessors.getClassOf(r"$internalName");
+  static final _class = $_jni.Jni.findJClass(r"$internalName");
 
 ''');
     }
@@ -409,7 +400,7 @@
     final superTypeClass = superClass.accept(_TypeClassGenerator(resolver));
     final hashCodeTypeClasses = typeParams.join(', ');
     final equalityTypeClasses = typeParams
-        .map((typeParam) => ' && $typeParam == other.$typeParam')
+        .map((typeParam) => ' &&\n        $typeParam == other.$typeParam')
         .join();
     final hashCode = typeParams.isEmpty
         ? '($typeClassName).hashCode'
@@ -442,7 +433,8 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $typeClassName && other is $typeClassName$equalityTypeClasses;
+    return other.runtimeType == ($typeClassName$typeParamsCall) &&
+        other is $typeClassName$typeParamsCall$equalityTypeClasses;
   }
 }
 
diff --git a/pkgs/jnigen/lib/src/elements/elements.dart b/pkgs/jnigen/lib/src/elements/elements.dart
index 4c3ce2a..2e4a9f5 100644
--- a/pkgs/jnigen/lib/src/elements/elements.dart
+++ b/pkgs/jnigen/lib/src/elements/elements.dart
@@ -261,7 +261,7 @@
       name: 'byte',
       signature: 'B',
       dartType: 'int',
-      jniType: 'JByte',
+      jniType: 'jbyte',
       cType: 'int8_t',
       ffiType: 'Int8',
     ),
@@ -269,7 +269,7 @@
       name: 'short',
       signature: 'S',
       dartType: 'int',
-      jniType: 'JShort',
+      jniType: 'jshort',
       cType: 'int16_t',
       ffiType: 'Int16',
     ),
@@ -277,7 +277,7 @@
       name: 'char',
       signature: 'C',
       dartType: 'int',
-      jniType: 'JChar',
+      jniType: 'jchar',
       cType: 'char',
       ffiType: 'Uint16',
     ),
@@ -285,7 +285,7 @@
       name: 'int',
       signature: 'I',
       dartType: 'int',
-      jniType: 'JInt',
+      jniType: 'jint',
       cType: 'int32_t',
       ffiType: 'Int32',
     ),
@@ -293,7 +293,7 @@
       name: 'long',
       signature: 'J',
       dartType: 'int',
-      jniType: 'JLong',
+      jniType: 'jlong',
       cType: 'int64_t',
       ffiType: 'Int64',
     ),
@@ -301,7 +301,7 @@
       name: 'float',
       signature: 'F',
       dartType: 'double',
-      jniType: 'JFloat',
+      jniType: 'jfloat',
       cType: 'float',
       ffiType: 'Float',
     ),
@@ -309,7 +309,7 @@
       name: 'double',
       signature: 'D',
       dartType: 'double',
-      jniType: 'JDouble',
+      jniType: 'jdouble',
       cType: 'double',
       ffiType: 'Double',
     ),
@@ -317,7 +317,7 @@
       name: 'boolean',
       signature: 'Z',
       dartType: 'bool',
-      jniType: 'JBoolean',
+      jniType: 'jboolean',
       cType: 'uint8_t',
       ffiType: 'Uint8',
     ),
@@ -325,7 +325,7 @@
       name: 'void',
       signature: 'V',
       dartType: 'void',
-      jniType: 'JVoid', // Never used
+      jniType: 'jvoid', // Never used
       cType: 'void',
       ffiType: 'Void',
     ),
diff --git a/pkgs/jnigen/pubspec.yaml b/pkgs/jnigen/pubspec.yaml
index 1da9c68..5cde347 100644
--- a/pkgs/jnigen/pubspec.yaml
+++ b/pkgs/jnigen/pubspec.yaml
@@ -3,7 +3,7 @@
 # BSD-style license that can be found in the LICENSE file.
 
 name: jnigen
-version: 0.4.0
+version: 0.5.0-dev.0
 description: Experimental generator for FFI+JNI bindings.
 repository: https://github.com/dart-lang/jnigen/tree/main/jnigen
 
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 4389ac3..0b91b29 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
@@ -60,7 +60,7 @@
 ///@author Tatu Saloranta
 class JsonFactory extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<JsonFactory> $type = type;
 
   JsonFactory.fromRef(
     jni.JObjectPtr ref,
@@ -1208,7 +1208,7 @@
   /// the contents of given byte array.
   ///@since 2.1
   jsonparser_.JsonParser createParser4(
-    jni.JArray<jni.JByte> data,
+    jni.JArray<jni.jbyte> data,
   ) {
     return const jsonparser_.$JsonParserType()
         .fromRef(_createParser4(reference, data.reference).object);
@@ -1235,7 +1235,7 @@
   ///@param len Length of contents to parse within buffer
   ///@since 2.1
   jsonparser_.JsonParser createParser5(
-    jni.JArray<jni.JByte> data,
+    jni.JArray<jni.jbyte> data,
     int offset,
     int len,
   ) {
@@ -1279,7 +1279,7 @@
   /// contents of given char array.
   ///@since 2.4
   jsonparser_.JsonParser createParser7(
-    jni.JArray<jni.JChar> content,
+    jni.JArray<jni.jchar> content,
   ) {
     return const jsonparser_.$JsonParserType()
         .fromRef(_createParser7(reference, content.reference).object);
@@ -1302,7 +1302,7 @@
   /// Method for constructing parser for parsing contents of given char array.
   ///@since 2.4
   jsonparser_.JsonParser createParser8(
-    jni.JArray<jni.JChar> content,
+    jni.JArray<jni.jchar> content,
     int offset,
     int len,
   ) {
@@ -1690,7 +1690,7 @@
   ///@throws JsonParseException if parser initialization fails due to content decoding problem
   ///@deprecated Since 2.2, use \#createParser(byte[]) instead.
   jsonparser_.JsonParser createJsonParser4(
-    jni.JArray<jni.JByte> data,
+    jni.JArray<jni.jbyte> data,
   ) {
     return const jsonparser_.$JsonParserType()
         .fromRef(_createJsonParser4(reference, data.reference).object);
@@ -1720,7 +1720,7 @@
   ///@throws JsonParseException if parser initialization fails due to content decoding problem
   ///@deprecated Since 2.2, use \#createParser(byte[],int,int) instead.
   jsonparser_.JsonParser createJsonParser5(
-    jni.JArray<jni.JByte> data,
+    jni.JArray<jni.jbyte> data,
     int offset,
     int len,
   ) {
@@ -1872,7 +1872,7 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $JsonFactoryType && other is $JsonFactoryType;
+    return other.runtimeType == ($JsonFactoryType) && other is $JsonFactoryType;
   }
 }
 
@@ -1882,7 +1882,7 @@
 /// changed for JsonFactory.
 class JsonFactory_Feature extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<JsonFactory_Feature> $type = type;
 
   JsonFactory_Feature.fromRef(
     jni.JObjectPtr ref,
@@ -1988,7 +1988,7 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $JsonFactory_FeatureType &&
+    return other.runtimeType == ($JsonFactory_FeatureType) &&
         other is $JsonFactory_FeatureType;
   }
 }
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 54e45f8..562f0dd 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
@@ -47,7 +47,7 @@
 ///@author Tatu Saloranta
 class JsonParser extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<JsonParser> $type = type;
 
   JsonParser.fromRef(
     jni.JObjectPtr ref,
@@ -193,7 +193,7 @@
   ///@param charset Character encoding for (lazily) decoding payload
   ///@since 2.8
   void setRequestPayloadOnError1(
-    jni.JArray<jni.JByte> payload,
+    jni.JArray<jni.jbyte> payload,
     jni.JString charset,
   ) {
     return _setRequestPayloadOnError1(
@@ -1593,8 +1593,8 @@
   ///    at offset 0, and not necessarily until the end of buffer)
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
-  jni.JArray<jni.JChar> getTextCharacters() {
-    return const jni.JArrayType(jni.JCharType())
+  jni.JArray<jni.jchar> getTextCharacters() {
+    return const jni.JArrayType(jni.jcharType())
         .fromRef(_getTextCharacters(reference).object);
   }
 
@@ -2030,10 +2030,10 @@
   ///@return Decoded binary data
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
-  jni.JArray<jni.JByte> getBinaryValue(
+  jni.JArray<jni.jbyte> getBinaryValue(
     jni.JObject bv,
   ) {
-    return const jni.JArrayType(jni.JByteType())
+    return const jni.JArrayType(jni.jbyteType())
         .fromRef(_getBinaryValue(reference, bv.reference).object);
   }
 
@@ -2052,8 +2052,8 @@
   ///@return Decoded binary data
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
-  jni.JArray<jni.JByte> getBinaryValue1() {
-    return const jni.JArrayType(jni.JByteType())
+  jni.JArray<jni.jbyte> getBinaryValue1() {
+    return const jni.JArrayType(jni.jbyteType())
         .fromRef(_getBinaryValue1(reference).object);
   }
 
@@ -2653,7 +2653,7 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $JsonParserType && other is $JsonParserType;
+    return other.runtimeType == ($JsonParserType) && other is $JsonParserType;
   }
 }
 
@@ -2662,7 +2662,7 @@
 /// Enumeration that defines all on/off features for parsers.
 class JsonParser_Feature extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<JsonParser_Feature> $type = type;
 
   JsonParser_Feature.fromRef(
     jni.JObjectPtr ref,
@@ -2768,7 +2768,7 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $JsonParser_FeatureType &&
+    return other.runtimeType == ($JsonParser_FeatureType) &&
         other is $JsonParser_FeatureType;
   }
 }
@@ -2779,7 +2779,7 @@
 /// used for numbers.
 class JsonParser_NumberType extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<JsonParser_NumberType> $type = type;
 
   JsonParser_NumberType.fromRef(
     jni.JObjectPtr ref,
@@ -2836,7 +2836,7 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $JsonParser_NumberTypeType &&
+    return other.runtimeType == ($JsonParser_NumberTypeType) &&
         other is $JsonParser_NumberTypeType;
   }
 }
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 0714344..fe8cf88 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
@@ -44,7 +44,7 @@
 /// of parsing JSON content.
 class JsonToken extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<JsonToken> $type = type;
 
   JsonToken.fromRef(
     jni.JObjectPtr ref,
@@ -107,8 +107,8 @@
 
   /// from: public final char[] asCharArray()
   /// The returned object must be deleted after use, by calling the `delete` method.
-  jni.JArray<jni.JChar> asCharArray() {
-    return const jni.JArrayType(jni.JCharType())
+  jni.JArray<jni.jchar> asCharArray() {
+    return const jni.JArrayType(jni.jcharType())
         .fromRef(_asCharArray(reference).object);
   }
 
@@ -120,8 +120,8 @@
 
   /// from: public final byte[] asByteArray()
   /// The returned object must be deleted after use, by calling the `delete` method.
-  jni.JArray<jni.JByte> asByteArray() {
-    return const jni.JArrayType(jni.JByteType())
+  jni.JArray<jni.jbyte> asByteArray() {
+    return const jni.JArrayType(jni.jbyteType())
         .fromRef(_asByteArray(reference).object);
   }
 
@@ -230,6 +230,6 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $JsonTokenType && other is $JsonTokenType;
+    return other.runtimeType == ($JsonTokenType) && other is $JsonTokenType;
   }
 }
diff --git a/pkgs/jnigen/test/jackson_core_test/third_party/dart_only/dart_bindings/_init.dart b/pkgs/jnigen/test/jackson_core_test/third_party/dart_only/dart_bindings/_init.dart
deleted file mode 100644
index eec3a8c..0000000
--- a/pkgs/jnigen/test/jackson_core_test/third_party/dart_only/dart_bindings/_init.dart
+++ /dev/null
@@ -1,23 +0,0 @@
-// Generated from jackson-core which is licensed under the Apache License 2.0.
-// The following copyright from the original authors applies.
-// See https://github.com/FasterXML/jackson-core/blob/2.14/LICENSE
-//
-// Copyright (c) 2007 - The Jackson Project Authors
-// Licensed under the Apache License, Version 2.0 (the "License")
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-import "package:jni/jni.dart" as jni;
-
-// Auto-generated initialization code.
-
-final jniEnv = jni.Jni.env;
-final jniAccessors = jni.Jni.accessors;
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 2ceb324..c58fb97 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
@@ -37,7 +37,6 @@
 import "package:jni/jni.dart" as jni;
 
 import "JsonParser.dart" as jsonparser_;
-import "../../../../_init.dart";
 
 /// from: com.fasterxml.jackson.core.JsonFactory
 ///
@@ -60,14 +59,14 @@
 ///@author Tatu Saloranta
 class JsonFactory extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<JsonFactory> $type = type;
 
   JsonFactory.fromRef(
     jni.JObjectPtr ref,
   ) : super.fromRef(ref);
 
-  static final _classRef =
-      jniAccessors.getClassOf(r"com/fasterxml/jackson/core/JsonFactory");
+  static final _class =
+      jni.Jni.findJClass(r"com/fasterxml/jackson/core/JsonFactory");
 
   /// The type which includes information such as the signature of this class.
   static const type = $JsonFactoryType();
@@ -79,8 +78,8 @@
   static const FORMAT_NAME_JSON = r"""JSON""";
 
   static final _id_DEFAULT_FACTORY_FEATURE_FLAGS =
-      jniAccessors.getStaticFieldIDOf(
-    _classRef,
+      jni.Jni.accessors.getStaticFieldIDOf(
+    _class.reference,
     r"DEFAULT_FACTORY_FEATURE_FLAGS",
     r"I",
   );
@@ -88,14 +87,14 @@
   /// from: static protected final int DEFAULT_FACTORY_FEATURE_FLAGS
   ///
   /// Bitfield (set of flags) of all factory features that are enabled by default.
-  static int get DEFAULT_FACTORY_FEATURE_FLAGS => jniAccessors
-      .getStaticField(
-          _classRef, _id_DEFAULT_FACTORY_FEATURE_FLAGS, jni.JniCallType.intType)
+  static int get DEFAULT_FACTORY_FEATURE_FLAGS => jni.Jni.accessors
+      .getStaticField(_class.reference, _id_DEFAULT_FACTORY_FEATURE_FLAGS,
+          jni.JniCallType.intType)
       .integer;
 
   static final _id_DEFAULT_PARSER_FEATURE_FLAGS =
-      jniAccessors.getStaticFieldIDOf(
-    _classRef,
+      jni.Jni.accessors.getStaticFieldIDOf(
+    _class.reference,
     r"DEFAULT_PARSER_FEATURE_FLAGS",
     r"I",
   );
@@ -104,14 +103,14 @@
   ///
   /// Bitfield (set of flags) of all parser features that are enabled
   /// by default.
-  static int get DEFAULT_PARSER_FEATURE_FLAGS => jniAccessors
-      .getStaticField(
-          _classRef, _id_DEFAULT_PARSER_FEATURE_FLAGS, jni.JniCallType.intType)
+  static int get DEFAULT_PARSER_FEATURE_FLAGS => jni.Jni.accessors
+      .getStaticField(_class.reference, _id_DEFAULT_PARSER_FEATURE_FLAGS,
+          jni.JniCallType.intType)
       .integer;
 
   static final _id_DEFAULT_GENERATOR_FEATURE_FLAGS =
-      jniAccessors.getStaticFieldIDOf(
-    _classRef,
+      jni.Jni.accessors.getStaticFieldIDOf(
+    _class.reference,
     r"DEFAULT_GENERATOR_FEATURE_FLAGS",
     r"I",
   );
@@ -120,14 +119,14 @@
   ///
   /// Bitfield (set of flags) of all generator features that are enabled
   /// by default.
-  static int get DEFAULT_GENERATOR_FEATURE_FLAGS => jniAccessors
-      .getStaticField(_classRef, _id_DEFAULT_GENERATOR_FEATURE_FLAGS,
+  static int get DEFAULT_GENERATOR_FEATURE_FLAGS => jni.Jni.accessors
+      .getStaticField(_class.reference, _id_DEFAULT_GENERATOR_FEATURE_FLAGS,
           jni.JniCallType.intType)
       .integer;
 
   static final _id_DEFAULT_ROOT_VALUE_SEPARATOR =
-      jniAccessors.getStaticFieldIDOf(
-    _classRef,
+      jni.Jni.accessors.getStaticFieldIDOf(
+    _class.reference,
     r"DEFAULT_ROOT_VALUE_SEPARATOR",
     r"Lcom/fasterxml/jackson/core/SerializableString;",
   );
@@ -135,13 +134,13 @@
   /// from: static public final com.fasterxml.jackson.core.SerializableString DEFAULT_ROOT_VALUE_SEPARATOR
   /// The returned object must be deleted after use, by calling the `delete` method.
   static jni.JObject get DEFAULT_ROOT_VALUE_SEPARATOR =>
-      const jni.JObjectType().fromRef(jniAccessors
-          .getStaticField(_classRef, _id_DEFAULT_ROOT_VALUE_SEPARATOR,
+      const jni.JObjectType().fromRef(jni.Jni.accessors
+          .getStaticField(_class.reference, _id_DEFAULT_ROOT_VALUE_SEPARATOR,
               jni.JniCallType.objectType)
           .object);
 
   static final _id_ctor =
-      jniAccessors.getMethodIDOf(_classRef, r"<init>", r"()V");
+      jni.Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"()V");
 
   /// from: public void <init>()
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -155,23 +154,25 @@
   /// and this reuse only works within context of a single
   /// factory instance.
   factory JsonFactory() {
-    return JsonFactory.fromRef(
-        jniAccessors.newObjectWithArgs(_classRef, _id_ctor, []).object);
+    return JsonFactory.fromRef(jni.Jni.accessors
+        .newObjectWithArgs(_class.reference, _id_ctor, []).object);
   }
 
-  static final _id_ctor1 = jniAccessors.getMethodIDOf(
-      _classRef, r"<init>", r"(Lcom/fasterxml/jackson/core/ObjectCodec;)V");
+  static final _id_ctor1 = jni.Jni.accessors.getMethodIDOf(_class.reference,
+      r"<init>", r"(Lcom/fasterxml/jackson/core/ObjectCodec;)V");
 
   /// from: public void <init>(com.fasterxml.jackson.core.ObjectCodec oc)
   /// The returned object must be deleted after use, by calling the `delete` method.
   factory JsonFactory.ctor1(
     jni.JObject oc,
   ) {
-    return JsonFactory.fromRef(jniAccessors
-        .newObjectWithArgs(_classRef, _id_ctor1, [oc.reference]).object);
+    return JsonFactory.fromRef(jni.Jni.accessors
+        .newObjectWithArgs(_class.reference, _id_ctor1, [oc.reference]).object);
   }
 
-  static final _id_ctor2 = jniAccessors.getMethodIDOf(_classRef, r"<init>",
+  static final _id_ctor2 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
+      r"<init>",
       r"(Lcom/fasterxml/jackson/core/JsonFactory;Lcom/fasterxml/jackson/core/ObjectCodec;)V");
 
   /// from: protected void <init>(com.fasterxml.jackson.core.JsonFactory src, com.fasterxml.jackson.core.ObjectCodec codec)
@@ -185,12 +186,12 @@
     JsonFactory src,
     jni.JObject codec,
   ) {
-    return JsonFactory.fromRef(jniAccessors.newObjectWithArgs(
-        _classRef, _id_ctor2, [src.reference, codec.reference]).object);
+    return JsonFactory.fromRef(jni.Jni.accessors.newObjectWithArgs(
+        _class.reference, _id_ctor2, [src.reference, codec.reference]).object);
   }
 
-  static final _id_ctor3 = jniAccessors.getMethodIDOf(_classRef, r"<init>",
-      r"(Lcom/fasterxml/jackson/core/JsonFactoryBuilder;)V");
+  static final _id_ctor3 = jni.Jni.accessors.getMethodIDOf(_class.reference,
+      r"<init>", r"(Lcom/fasterxml/jackson/core/JsonFactoryBuilder;)V");
 
   /// from: public void <init>(com.fasterxml.jackson.core.JsonFactoryBuilder b)
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -201,12 +202,12 @@
   factory JsonFactory.ctor3(
     jni.JObject b,
   ) {
-    return JsonFactory.fromRef(jniAccessors
-        .newObjectWithArgs(_classRef, _id_ctor3, [b.reference]).object);
+    return JsonFactory.fromRef(jni.Jni.accessors
+        .newObjectWithArgs(_class.reference, _id_ctor3, [b.reference]).object);
   }
 
-  static final _id_ctor4 = jniAccessors.getMethodIDOf(
-      _classRef, r"<init>", r"(Lcom/fasterxml/jackson/core/TSFBuilder;Z)V");
+  static final _id_ctor4 = jni.Jni.accessors.getMethodIDOf(_class.reference,
+      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 deleted after use, by calling the `delete` method.
@@ -220,12 +221,12 @@
     jni.JObject b,
     bool bogus,
   ) {
-    return JsonFactory.fromRef(jniAccessors.newObjectWithArgs(
-        _classRef, _id_ctor4, [b.reference, bogus ? 1 : 0]).object);
+    return JsonFactory.fromRef(jni.Jni.accessors.newObjectWithArgs(
+        _class.reference, _id_ctor4, [b.reference, bogus ? 1 : 0]).object);
   }
 
-  static final _id_rebuild = jniAccessors.getMethodIDOf(
-      _classRef, r"rebuild", r"()Lcom/fasterxml/jackson/core/TSFBuilder;");
+  static final _id_rebuild = jni.Jni.accessors.getMethodIDOf(_class.reference,
+      r"rebuild", r"()Lcom/fasterxml/jackson/core/TSFBuilder;");
 
   /// from: public com.fasterxml.jackson.core.TSFBuilder<?,?> rebuild()
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -235,12 +236,14 @@
   ///@return Builder instance to use
   ///@since 2.10
   jni.JObject rebuild() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference, _id_rebuild, jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_builder = jniAccessors.getStaticMethodIDOf(
-      _classRef, r"builder", r"()Lcom/fasterxml/jackson/core/TSFBuilder;");
+  static final _id_builder = jni.Jni.accessors.getStaticMethodIDOf(
+      _class.reference,
+      r"builder",
+      r"()Lcom/fasterxml/jackson/core/TSFBuilder;");
 
   /// from: static public com.fasterxml.jackson.core.TSFBuilder<?,?> builder()
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -254,13 +257,13 @@
   /// will be fixed in 3.0.
   ///@return Builder instance to use
   static jni.JObject builder() {
-    return const jni.JObjectType().fromRef(jniAccessors
-        .callStaticMethodWithArgs(
-            _classRef, _id_builder, jni.JniCallType.objectType, []).object);
+    return const jni.JObjectType().fromRef(jni.Jni.accessors
+        .callStaticMethodWithArgs(_class.reference, _id_builder,
+            jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_copy = jniAccessors.getMethodIDOf(
-      _classRef, r"copy", r"()Lcom/fasterxml/jackson/core/JsonFactory;");
+  static final _id_copy = jni.Jni.accessors.getMethodIDOf(
+      _class.reference, r"copy", r"()Lcom/fasterxml/jackson/core/JsonFactory;");
 
   /// from: public com.fasterxml.jackson.core.JsonFactory copy()
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -278,12 +281,13 @@
   ///@return Copy of this factory instance
   ///@since 2.1
   JsonFactory copy() {
-    return const $JsonFactoryType().fromRef(jniAccessors.callMethodWithArgs(
-        reference, _id_copy, jni.JniCallType.objectType, []).object);
+    return const $JsonFactoryType().fromRef(jni.Jni.accessors
+        .callMethodWithArgs(
+            reference, _id_copy, jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_readResolve = jniAccessors.getMethodIDOf(
-      _classRef, r"readResolve", r"()Ljava/lang/Object;");
+  static final _id_readResolve = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"readResolve", r"()Ljava/lang/Object;");
 
   /// from: protected java.lang.Object readResolve()
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -295,12 +299,12 @@
   /// Note: must be overridden by sub-classes as well.
   ///@return Newly constructed instance
   jni.JObject readResolve() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference, _id_readResolve, jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_requiresPropertyOrdering = jniAccessors.getMethodIDOf(
-      _classRef, r"requiresPropertyOrdering", r"()Z");
+  static final _id_requiresPropertyOrdering = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"requiresPropertyOrdering", r"()Z");
 
   /// from: public boolean requiresPropertyOrdering()
   ///
@@ -319,12 +323,12 @@
   ///   requires Object properties to be ordered.
   ///@since 2.3
   bool requiresPropertyOrdering() {
-    return jniAccessors.callMethodWithArgs(reference,
+    return jni.Jni.accessors.callMethodWithArgs(reference,
         _id_requiresPropertyOrdering, jni.JniCallType.booleanType, []).boolean;
   }
 
-  static final _id_canHandleBinaryNatively =
-      jniAccessors.getMethodIDOf(_classRef, r"canHandleBinaryNatively", r"()Z");
+  static final _id_canHandleBinaryNatively = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"canHandleBinaryNatively", r"()Z");
 
   /// from: public boolean canHandleBinaryNatively()
   ///
@@ -340,12 +344,12 @@
   ///    supports native binary content
   ///@since 2.3
   bool canHandleBinaryNatively() {
-    return jniAccessors.callMethodWithArgs(reference,
+    return jni.Jni.accessors.callMethodWithArgs(reference,
         _id_canHandleBinaryNatively, jni.JniCallType.booleanType, []).boolean;
   }
 
-  static final _id_canUseCharArrays =
-      jniAccessors.getMethodIDOf(_classRef, r"canUseCharArrays", r"()Z");
+  static final _id_canUseCharArrays = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"canUseCharArrays", r"()Z");
 
   /// from: public boolean canUseCharArrays()
   ///
@@ -361,12 +365,12 @@
   ///   accessed using parser method {@code getTextCharacters()}.
   ///@since 2.4
   bool canUseCharArrays() {
-    return jniAccessors.callMethodWithArgs(reference, _id_canUseCharArrays,
+    return jni.Jni.accessors.callMethodWithArgs(reference, _id_canUseCharArrays,
         jni.JniCallType.booleanType, []).boolean;
   }
 
-  static final _id_canParseAsync =
-      jniAccessors.getMethodIDOf(_classRef, r"canParseAsync", r"()Z");
+  static final _id_canParseAsync = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"canParseAsync", r"()Z");
 
   /// from: public boolean canParseAsync()
   ///
@@ -378,36 +382,38 @@
   ///    not (and consequently whether {@code createNonBlockingXxx()} method(s) work)
   ///@since 2.9
   bool canParseAsync() {
-    return jniAccessors.callMethodWithArgs(
+    return jni.Jni.accessors.callMethodWithArgs(
         reference, _id_canParseAsync, jni.JniCallType.booleanType, []).boolean;
   }
 
-  static final _id_getFormatReadFeatureType = jniAccessors.getMethodIDOf(
-      _classRef, r"getFormatReadFeatureType", r"()Ljava/lang/Class;");
+  static final _id_getFormatReadFeatureType = jni.Jni.accessors.getMethodIDOf(
+      _class.reference, r"getFormatReadFeatureType", r"()Ljava/lang/Class;");
 
   /// from: public java.lang.Class<? extends com.fasterxml.jackson.core.FormatFeature> getFormatReadFeatureType()
   /// The returned object must be deleted after use, by calling the `delete` method.
   jni.JObject getFormatReadFeatureType() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference,
         _id_getFormatReadFeatureType,
         jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_getFormatWriteFeatureType = jniAccessors.getMethodIDOf(
-      _classRef, r"getFormatWriteFeatureType", r"()Ljava/lang/Class;");
+  static final _id_getFormatWriteFeatureType = jni.Jni.accessors.getMethodIDOf(
+      _class.reference, r"getFormatWriteFeatureType", r"()Ljava/lang/Class;");
 
   /// from: public java.lang.Class<? extends com.fasterxml.jackson.core.FormatFeature> getFormatWriteFeatureType()
   /// The returned object must be deleted after use, by calling the `delete` method.
   jni.JObject getFormatWriteFeatureType() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference,
         _id_getFormatWriteFeatureType,
         jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_canUseSchema = jniAccessors.getMethodIDOf(_classRef,
-      r"canUseSchema", r"(Lcom/fasterxml/jackson/core/FormatSchema;)Z");
+  static final _id_canUseSchema = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
+      r"canUseSchema",
+      r"(Lcom/fasterxml/jackson/core/FormatSchema;)Z");
 
   /// from: public boolean canUseSchema(com.fasterxml.jackson.core.FormatSchema schema)
   ///
@@ -423,12 +429,12 @@
   bool canUseSchema(
     jni.JObject schema,
   ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_canUseSchema,
+    return jni.Jni.accessors.callMethodWithArgs(reference, _id_canUseSchema,
         jni.JniCallType.booleanType, [schema.reference]).boolean;
   }
 
-  static final _id_getFormatName = jniAccessors.getMethodIDOf(
-      _classRef, r"getFormatName", r"()Ljava/lang/String;");
+  static final _id_getFormatName = jni.Jni.accessors.getMethodIDOf(
+      _class.reference, r"getFormatName", r"()Ljava/lang/String;");
 
   /// from: public java.lang.String getFormatName()
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -440,12 +446,12 @@
   /// 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(jniAccessors.callMethodWithArgs(
+    return const jni.JStringType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference, _id_getFormatName, jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_hasFormat = jniAccessors.getMethodIDOf(
-      _classRef,
+  static final _id_hasFormat = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
       r"hasFormat",
       r"(Lcom/fasterxml/jackson/core/format/InputAccessor;)Lcom/fasterxml/jackson/core/format/MatchStrength;");
 
@@ -454,15 +460,15 @@
   jni.JObject hasFormat(
     jni.JObject acc,
   ) {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference,
         _id_hasFormat,
         jni.JniCallType.objectType,
         [acc.reference]).object);
   }
 
-  static final _id_requiresCustomCodec =
-      jniAccessors.getMethodIDOf(_classRef, r"requiresCustomCodec", r"()Z");
+  static final _id_requiresCustomCodec = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"requiresCustomCodec", r"()Z");
 
   /// from: public boolean requiresCustomCodec()
   ///
@@ -476,12 +482,12 @@
   ///   ObjectCodec is enough
   ///@since 2.1
   bool requiresCustomCodec() {
-    return jniAccessors.callMethodWithArgs(reference, _id_requiresCustomCodec,
-        jni.JniCallType.booleanType, []).boolean;
+    return jni.Jni.accessors.callMethodWithArgs(reference,
+        _id_requiresCustomCodec, jni.JniCallType.booleanType, []).boolean;
   }
 
-  static final _id_hasJSONFormat = jniAccessors.getMethodIDOf(
-      _classRef,
+  static final _id_hasJSONFormat = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
       r"hasJSONFormat",
       r"(Lcom/fasterxml/jackson/core/format/InputAccessor;)Lcom/fasterxml/jackson/core/format/MatchStrength;");
 
@@ -490,25 +496,25 @@
   jni.JObject hasJSONFormat(
     jni.JObject acc,
   ) {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference,
         _id_hasJSONFormat,
         jni.JniCallType.objectType,
         [acc.reference]).object);
   }
 
-  static final _id_version = jniAccessors.getMethodIDOf(
-      _classRef, r"version", r"()Lcom/fasterxml/jackson/core/Version;");
+  static final _id_version = jni.Jni.accessors.getMethodIDOf(
+      _class.reference, r"version", r"()Lcom/fasterxml/jackson/core/Version;");
 
   /// from: public com.fasterxml.jackson.core.Version version()
   /// The returned object must be deleted after use, by calling the `delete` method.
   jni.JObject version() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference, _id_version, jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_configure = jniAccessors.getMethodIDOf(
-      _classRef,
+  static final _id_configure = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
       r"configure",
       r"(Lcom/fasterxml/jackson/core/JsonFactory$Feature;Z)Lcom/fasterxml/jackson/core/JsonFactory;");
 
@@ -525,14 +531,14 @@
     JsonFactory_Feature f,
     bool state,
   ) {
-    return const $JsonFactoryType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_configure,
-        jni.JniCallType.objectType,
-        [f.reference, state ? 1 : 0]).object);
+    return const $JsonFactoryType().fromRef(jni.Jni.accessors
+        .callMethodWithArgs(reference, _id_configure,
+            jni.JniCallType.objectType, [f.reference, state ? 1 : 0]).object);
   }
 
-  static final _id_enable = jniAccessors.getMethodIDOf(_classRef, r"enable",
+  static final _id_enable = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
+      r"enable",
       r"(Lcom/fasterxml/jackson/core/JsonFactory$Feature;)Lcom/fasterxml/jackson/core/JsonFactory;");
 
   /// from: public com.fasterxml.jackson.core.JsonFactory enable(com.fasterxml.jackson.core.JsonFactory.Feature f)
@@ -546,14 +552,14 @@
   JsonFactory enable(
     JsonFactory_Feature f,
   ) {
-    return const $JsonFactoryType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_enable,
-        jni.JniCallType.objectType,
-        [f.reference]).object);
+    return const $JsonFactoryType().fromRef(jni.Jni.accessors
+        .callMethodWithArgs(reference, _id_enable, jni.JniCallType.objectType,
+            [f.reference]).object);
   }
 
-  static final _id_disable = jniAccessors.getMethodIDOf(_classRef, r"disable",
+  static final _id_disable = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
+      r"disable",
       r"(Lcom/fasterxml/jackson/core/JsonFactory$Feature;)Lcom/fasterxml/jackson/core/JsonFactory;");
 
   /// from: public com.fasterxml.jackson.core.JsonFactory disable(com.fasterxml.jackson.core.JsonFactory.Feature f)
@@ -567,14 +573,12 @@
   JsonFactory disable(
     JsonFactory_Feature f,
   ) {
-    return const $JsonFactoryType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_disable,
-        jni.JniCallType.objectType,
-        [f.reference]).object);
+    return const $JsonFactoryType().fromRef(jni.Jni.accessors
+        .callMethodWithArgs(reference, _id_disable, jni.JniCallType.objectType,
+            [f.reference]).object);
   }
 
-  static final _id_isEnabled = jniAccessors.getMethodIDOf(_classRef,
+  static final _id_isEnabled = jni.Jni.accessors.getMethodIDOf(_class.reference,
       r"isEnabled", r"(Lcom/fasterxml/jackson/core/JsonFactory$Feature;)Z");
 
   /// from: public final boolean isEnabled(com.fasterxml.jackson.core.JsonFactory.Feature f)
@@ -585,48 +589,48 @@
   bool isEnabled(
     JsonFactory_Feature f,
   ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_isEnabled,
+    return jni.Jni.accessors.callMethodWithArgs(reference, _id_isEnabled,
         jni.JniCallType.booleanType, [f.reference]).boolean;
   }
 
-  static final _id_getParserFeatures =
-      jniAccessors.getMethodIDOf(_classRef, r"getParserFeatures", r"()I");
+  static final _id_getParserFeatures = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"getParserFeatures", r"()I");
 
   /// from: public final int getParserFeatures()
   int getParserFeatures() {
-    return jniAccessors.callMethodWithArgs(
+    return jni.Jni.accessors.callMethodWithArgs(
         reference, _id_getParserFeatures, jni.JniCallType.intType, []).integer;
   }
 
-  static final _id_getGeneratorFeatures =
-      jniAccessors.getMethodIDOf(_classRef, r"getGeneratorFeatures", r"()I");
+  static final _id_getGeneratorFeatures = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"getGeneratorFeatures", r"()I");
 
   /// from: public final int getGeneratorFeatures()
   int getGeneratorFeatures() {
-    return jniAccessors.callMethodWithArgs(reference, _id_getGeneratorFeatures,
-        jni.JniCallType.intType, []).integer;
+    return jni.Jni.accessors.callMethodWithArgs(reference,
+        _id_getGeneratorFeatures, jni.JniCallType.intType, []).integer;
   }
 
-  static final _id_getFormatParserFeatures =
-      jniAccessors.getMethodIDOf(_classRef, r"getFormatParserFeatures", r"()I");
+  static final _id_getFormatParserFeatures = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"getFormatParserFeatures", r"()I");
 
   /// from: public int getFormatParserFeatures()
   int getFormatParserFeatures() {
-    return jniAccessors.callMethodWithArgs(reference,
+    return jni.Jni.accessors.callMethodWithArgs(reference,
         _id_getFormatParserFeatures, jni.JniCallType.intType, []).integer;
   }
 
-  static final _id_getFormatGeneratorFeatures = jniAccessors.getMethodIDOf(
-      _classRef, r"getFormatGeneratorFeatures", r"()I");
+  static final _id_getFormatGeneratorFeatures = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"getFormatGeneratorFeatures", r"()I");
 
   /// from: public int getFormatGeneratorFeatures()
   int getFormatGeneratorFeatures() {
-    return jniAccessors.callMethodWithArgs(reference,
+    return jni.Jni.accessors.callMethodWithArgs(reference,
         _id_getFormatGeneratorFeatures, jni.JniCallType.intType, []).integer;
   }
 
-  static final _id_configure1 = jniAccessors.getMethodIDOf(
-      _classRef,
+  static final _id_configure1 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
       r"configure",
       r"(Lcom/fasterxml/jackson/core/JsonParser$Feature;Z)Lcom/fasterxml/jackson/core/JsonFactory;");
 
@@ -642,14 +646,14 @@
     jsonparser_.JsonParser_Feature f,
     bool state,
   ) {
-    return const $JsonFactoryType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_configure1,
-        jni.JniCallType.objectType,
-        [f.reference, state ? 1 : 0]).object);
+    return const $JsonFactoryType().fromRef(jni.Jni.accessors
+        .callMethodWithArgs(reference, _id_configure1,
+            jni.JniCallType.objectType, [f.reference, state ? 1 : 0]).object);
   }
 
-  static final _id_enable1 = jniAccessors.getMethodIDOf(_classRef, r"enable",
+  static final _id_enable1 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
+      r"enable",
       r"(Lcom/fasterxml/jackson/core/JsonParser$Feature;)Lcom/fasterxml/jackson/core/JsonFactory;");
 
   /// from: public com.fasterxml.jackson.core.JsonFactory enable(com.fasterxml.jackson.core.JsonParser.Feature f)
@@ -662,14 +666,14 @@
   JsonFactory enable1(
     jsonparser_.JsonParser_Feature f,
   ) {
-    return const $JsonFactoryType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_enable1,
-        jni.JniCallType.objectType,
-        [f.reference]).object);
+    return const $JsonFactoryType().fromRef(jni.Jni.accessors
+        .callMethodWithArgs(reference, _id_enable1, jni.JniCallType.objectType,
+            [f.reference]).object);
   }
 
-  static final _id_disable1 = jniAccessors.getMethodIDOf(_classRef, r"disable",
+  static final _id_disable1 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
+      r"disable",
       r"(Lcom/fasterxml/jackson/core/JsonParser$Feature;)Lcom/fasterxml/jackson/core/JsonFactory;");
 
   /// from: public com.fasterxml.jackson.core.JsonFactory disable(com.fasterxml.jackson.core.JsonParser.Feature f)
@@ -682,15 +686,15 @@
   JsonFactory disable1(
     jsonparser_.JsonParser_Feature f,
   ) {
-    return const $JsonFactoryType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_disable1,
-        jni.JniCallType.objectType,
-        [f.reference]).object);
+    return const $JsonFactoryType().fromRef(jni.Jni.accessors
+        .callMethodWithArgs(reference, _id_disable1, jni.JniCallType.objectType,
+            [f.reference]).object);
   }
 
-  static final _id_isEnabled1 = jniAccessors.getMethodIDOf(_classRef,
-      r"isEnabled", r"(Lcom/fasterxml/jackson/core/JsonParser$Feature;)Z");
+  static final _id_isEnabled1 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
+      r"isEnabled",
+      r"(Lcom/fasterxml/jackson/core/JsonParser$Feature;)Z");
 
   /// from: public final boolean isEnabled(com.fasterxml.jackson.core.JsonParser.Feature f)
   ///
@@ -700,12 +704,14 @@
   bool isEnabled1(
     jsonparser_.JsonParser_Feature f,
   ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_isEnabled1,
+    return jni.Jni.accessors.callMethodWithArgs(reference, _id_isEnabled1,
         jni.JniCallType.booleanType, [f.reference]).boolean;
   }
 
-  static final _id_isEnabled2 = jniAccessors.getMethodIDOf(_classRef,
-      r"isEnabled", r"(Lcom/fasterxml/jackson/core/StreamReadFeature;)Z");
+  static final _id_isEnabled2 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
+      r"isEnabled",
+      r"(Lcom/fasterxml/jackson/core/StreamReadFeature;)Z");
 
   /// from: public final boolean isEnabled(com.fasterxml.jackson.core.StreamReadFeature f)
   ///
@@ -716,12 +722,12 @@
   bool isEnabled2(
     jni.JObject f,
   ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_isEnabled2,
+    return jni.Jni.accessors.callMethodWithArgs(reference, _id_isEnabled2,
         jni.JniCallType.booleanType, [f.reference]).boolean;
   }
 
-  static final _id_getInputDecorator = jniAccessors.getMethodIDOf(
-      _classRef,
+  static final _id_getInputDecorator = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
       r"getInputDecorator",
       r"()Lcom/fasterxml/jackson/core/io/InputDecorator;");
 
@@ -732,14 +738,14 @@
   /// there is no default decorator).
   ///@return InputDecorator configured, if any
   jni.JObject getInputDecorator() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference,
         _id_getInputDecorator,
         jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_setInputDecorator = jniAccessors.getMethodIDOf(
-      _classRef,
+  static final _id_setInputDecorator = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
       r"setInputDecorator",
       r"(Lcom/fasterxml/jackson/core/io/InputDecorator;)Lcom/fasterxml/jackson/core/JsonFactory;");
 
@@ -753,15 +759,13 @@
   JsonFactory setInputDecorator(
     jni.JObject d,
   ) {
-    return const $JsonFactoryType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_setInputDecorator,
-        jni.JniCallType.objectType,
-        [d.reference]).object);
+    return const $JsonFactoryType().fromRef(jni.Jni.accessors
+        .callMethodWithArgs(reference, _id_setInputDecorator,
+            jni.JniCallType.objectType, [d.reference]).object);
   }
 
-  static final _id_configure2 = jniAccessors.getMethodIDOf(
-      _classRef,
+  static final _id_configure2 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
       r"configure",
       r"(Lcom/fasterxml/jackson/core/JsonGenerator$Feature;Z)Lcom/fasterxml/jackson/core/JsonFactory;");
 
@@ -777,14 +781,14 @@
     jni.JObject f,
     bool state,
   ) {
-    return const $JsonFactoryType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_configure2,
-        jni.JniCallType.objectType,
-        [f.reference, state ? 1 : 0]).object);
+    return const $JsonFactoryType().fromRef(jni.Jni.accessors
+        .callMethodWithArgs(reference, _id_configure2,
+            jni.JniCallType.objectType, [f.reference, state ? 1 : 0]).object);
   }
 
-  static final _id_enable2 = jniAccessors.getMethodIDOf(_classRef, r"enable",
+  static final _id_enable2 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
+      r"enable",
       r"(Lcom/fasterxml/jackson/core/JsonGenerator$Feature;)Lcom/fasterxml/jackson/core/JsonFactory;");
 
   /// from: public com.fasterxml.jackson.core.JsonFactory enable(com.fasterxml.jackson.core.JsonGenerator.Feature f)
@@ -797,14 +801,14 @@
   JsonFactory enable2(
     jni.JObject f,
   ) {
-    return const $JsonFactoryType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_enable2,
-        jni.JniCallType.objectType,
-        [f.reference]).object);
+    return const $JsonFactoryType().fromRef(jni.Jni.accessors
+        .callMethodWithArgs(reference, _id_enable2, jni.JniCallType.objectType,
+            [f.reference]).object);
   }
 
-  static final _id_disable2 = jniAccessors.getMethodIDOf(_classRef, r"disable",
+  static final _id_disable2 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
+      r"disable",
       r"(Lcom/fasterxml/jackson/core/JsonGenerator$Feature;)Lcom/fasterxml/jackson/core/JsonFactory;");
 
   /// from: public com.fasterxml.jackson.core.JsonFactory disable(com.fasterxml.jackson.core.JsonGenerator.Feature f)
@@ -817,15 +821,15 @@
   JsonFactory disable2(
     jni.JObject f,
   ) {
-    return const $JsonFactoryType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_disable2,
-        jni.JniCallType.objectType,
-        [f.reference]).object);
+    return const $JsonFactoryType().fromRef(jni.Jni.accessors
+        .callMethodWithArgs(reference, _id_disable2, jni.JniCallType.objectType,
+            [f.reference]).object);
   }
 
-  static final _id_isEnabled3 = jniAccessors.getMethodIDOf(_classRef,
-      r"isEnabled", r"(Lcom/fasterxml/jackson/core/JsonGenerator$Feature;)Z");
+  static final _id_isEnabled3 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
+      r"isEnabled",
+      r"(Lcom/fasterxml/jackson/core/JsonGenerator$Feature;)Z");
 
   /// from: public final boolean isEnabled(com.fasterxml.jackson.core.JsonGenerator.Feature f)
   ///
@@ -835,12 +839,14 @@
   bool isEnabled3(
     jni.JObject f,
   ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_isEnabled3,
+    return jni.Jni.accessors.callMethodWithArgs(reference, _id_isEnabled3,
         jni.JniCallType.booleanType, [f.reference]).boolean;
   }
 
-  static final _id_isEnabled4 = jniAccessors.getMethodIDOf(_classRef,
-      r"isEnabled", r"(Lcom/fasterxml/jackson/core/StreamWriteFeature;)Z");
+  static final _id_isEnabled4 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
+      r"isEnabled",
+      r"(Lcom/fasterxml/jackson/core/StreamWriteFeature;)Z");
 
   /// from: public final boolean isEnabled(com.fasterxml.jackson.core.StreamWriteFeature f)
   ///
@@ -851,12 +857,12 @@
   bool isEnabled4(
     jni.JObject f,
   ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_isEnabled4,
+    return jni.Jni.accessors.callMethodWithArgs(reference, _id_isEnabled4,
         jni.JniCallType.booleanType, [f.reference]).boolean;
   }
 
-  static final _id_getCharacterEscapes = jniAccessors.getMethodIDOf(
-      _classRef,
+  static final _id_getCharacterEscapes = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
       r"getCharacterEscapes",
       r"()Lcom/fasterxml/jackson/core/io/CharacterEscapes;");
 
@@ -867,14 +873,14 @@
   /// it creates.
   ///@return Configured {@code CharacterEscapes}, if any; {@code null} if none
   jni.JObject getCharacterEscapes() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference,
         _id_getCharacterEscapes,
         jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_setCharacterEscapes = jniAccessors.getMethodIDOf(
-      _classRef,
+  static final _id_setCharacterEscapes = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
       r"setCharacterEscapes",
       r"(Lcom/fasterxml/jackson/core/io/CharacterEscapes;)Lcom/fasterxml/jackson/core/JsonFactory;");
 
@@ -888,15 +894,13 @@
   JsonFactory setCharacterEscapes(
     jni.JObject esc,
   ) {
-    return const $JsonFactoryType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_setCharacterEscapes,
-        jni.JniCallType.objectType,
-        [esc.reference]).object);
+    return const $JsonFactoryType().fromRef(jni.Jni.accessors
+        .callMethodWithArgs(reference, _id_setCharacterEscapes,
+            jni.JniCallType.objectType, [esc.reference]).object);
   }
 
-  static final _id_getOutputDecorator = jniAccessors.getMethodIDOf(
-      _classRef,
+  static final _id_getOutputDecorator = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
       r"getOutputDecorator",
       r"()Lcom/fasterxml/jackson/core/io/OutputDecorator;");
 
@@ -908,14 +912,14 @@
   ///@return OutputDecorator configured for generators factory creates, if any;
   ///    {@code null} if none.
   jni.JObject getOutputDecorator() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference,
         _id_getOutputDecorator,
         jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_setOutputDecorator = jniAccessors.getMethodIDOf(
-      _classRef,
+  static final _id_setOutputDecorator = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
       r"setOutputDecorator",
       r"(Lcom/fasterxml/jackson/core/io/OutputDecorator;)Lcom/fasterxml/jackson/core/JsonFactory;");
 
@@ -929,15 +933,13 @@
   JsonFactory setOutputDecorator(
     jni.JObject d,
   ) {
-    return const $JsonFactoryType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_setOutputDecorator,
-        jni.JniCallType.objectType,
-        [d.reference]).object);
+    return const $JsonFactoryType().fromRef(jni.Jni.accessors
+        .callMethodWithArgs(reference, _id_setOutputDecorator,
+            jni.JniCallType.objectType, [d.reference]).object);
   }
 
-  static final _id_setRootValueSeparator = jniAccessors.getMethodIDOf(
-      _classRef,
+  static final _id_setRootValueSeparator = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
       r"setRootValueSeparator",
       r"(Ljava/lang/String;)Lcom/fasterxml/jackson/core/JsonFactory;");
 
@@ -952,28 +954,28 @@
   JsonFactory setRootValueSeparator(
     jni.JString sep,
   ) {
-    return const $JsonFactoryType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_setRootValueSeparator,
-        jni.JniCallType.objectType,
-        [sep.reference]).object);
+    return const $JsonFactoryType().fromRef(jni.Jni.accessors
+        .callMethodWithArgs(reference, _id_setRootValueSeparator,
+            jni.JniCallType.objectType, [sep.reference]).object);
   }
 
-  static final _id_getRootValueSeparator = jniAccessors.getMethodIDOf(
-      _classRef, r"getRootValueSeparator", r"()Ljava/lang/String;");
+  static final _id_getRootValueSeparator = jni.Jni.accessors.getMethodIDOf(
+      _class.reference, r"getRootValueSeparator", r"()Ljava/lang/String;");
 
   /// from: public java.lang.String getRootValueSeparator()
   /// The returned object must be deleted after use, by calling the `delete` method.
   ///
   /// @return Root value separator configured, if any
   jni.JString getRootValueSeparator() {
-    return const jni.JStringType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JStringType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference,
         _id_getRootValueSeparator,
         jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_setCodec = jniAccessors.getMethodIDOf(_classRef, r"setCodec",
+  static final _id_setCodec = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
+      r"setCodec",
       r"(Lcom/fasterxml/jackson/core/ObjectCodec;)Lcom/fasterxml/jackson/core/JsonFactory;");
 
   /// from: public com.fasterxml.jackson.core.JsonFactory setCodec(com.fasterxml.jackson.core.ObjectCodec oc)
@@ -989,25 +991,23 @@
   JsonFactory setCodec(
     jni.JObject oc,
   ) {
-    return const $JsonFactoryType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_setCodec,
-        jni.JniCallType.objectType,
-        [oc.reference]).object);
+    return const $JsonFactoryType().fromRef(jni.Jni.accessors
+        .callMethodWithArgs(reference, _id_setCodec, jni.JniCallType.objectType,
+            [oc.reference]).object);
   }
 
-  static final _id_getCodec = jniAccessors.getMethodIDOf(
-      _classRef, r"getCodec", r"()Lcom/fasterxml/jackson/core/ObjectCodec;");
+  static final _id_getCodec = jni.Jni.accessors.getMethodIDOf(_class.reference,
+      r"getCodec", r"()Lcom/fasterxml/jackson/core/ObjectCodec;");
 
   /// from: public com.fasterxml.jackson.core.ObjectCodec getCodec()
   /// The returned object must be deleted after use, by calling the `delete` method.
   jni.JObject getCodec() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference, _id_getCodec, jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_createParser = jniAccessors.getMethodIDOf(
-      _classRef,
+  static final _id_createParser = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
       r"createParser",
       r"(Ljava/io/File;)Lcom/fasterxml/jackson/core/JsonParser;");
 
@@ -1033,13 +1033,13 @@
   jsonparser_.JsonParser createParser(
     jni.JObject f,
   ) {
-    return const jsonparser_.$JsonParserType().fromRef(jniAccessors
+    return const jsonparser_.$JsonParserType().fromRef(jni.Jni.accessors
         .callMethodWithArgs(reference, _id_createParser,
             jni.JniCallType.objectType, [f.reference]).object);
   }
 
-  static final _id_createParser1 = jniAccessors.getMethodIDOf(
-      _classRef,
+  static final _id_createParser1 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
       r"createParser",
       r"(Ljava/net/URL;)Lcom/fasterxml/jackson/core/JsonParser;");
 
@@ -1063,13 +1063,13 @@
   jsonparser_.JsonParser createParser1(
     jni.JObject url,
   ) {
-    return const jsonparser_.$JsonParserType().fromRef(jniAccessors
+    return const jsonparser_.$JsonParserType().fromRef(jni.Jni.accessors
         .callMethodWithArgs(reference, _id_createParser1,
             jni.JniCallType.objectType, [url.reference]).object);
   }
 
-  static final _id_createParser2 = jniAccessors.getMethodIDOf(
-      _classRef,
+  static final _id_createParser2 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
       r"createParser",
       r"(Ljava/io/InputStream;)Lcom/fasterxml/jackson/core/JsonParser;");
 
@@ -1096,13 +1096,13 @@
   jsonparser_.JsonParser createParser2(
     jni.JObject in0,
   ) {
-    return const jsonparser_.$JsonParserType().fromRef(jniAccessors
+    return const jsonparser_.$JsonParserType().fromRef(jni.Jni.accessors
         .callMethodWithArgs(reference, _id_createParser2,
             jni.JniCallType.objectType, [in0.reference]).object);
   }
 
-  static final _id_createParser3 = jniAccessors.getMethodIDOf(
-      _classRef,
+  static final _id_createParser3 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
       r"createParser",
       r"(Ljava/io/Reader;)Lcom/fasterxml/jackson/core/JsonParser;");
 
@@ -1122,13 +1122,15 @@
   jsonparser_.JsonParser createParser3(
     jni.JObject r,
   ) {
-    return const jsonparser_.$JsonParserType().fromRef(jniAccessors
+    return const jsonparser_.$JsonParserType().fromRef(jni.Jni.accessors
         .callMethodWithArgs(reference, _id_createParser3,
             jni.JniCallType.objectType, [r.reference]).object);
   }
 
-  static final _id_createParser4 = jniAccessors.getMethodIDOf(_classRef,
-      r"createParser", r"([B)Lcom/fasterxml/jackson/core/JsonParser;");
+  static final _id_createParser4 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
+      r"createParser",
+      r"([B)Lcom/fasterxml/jackson/core/JsonParser;");
 
   /// from: public com.fasterxml.jackson.core.JsonParser createParser(byte[] data)
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -1137,15 +1139,17 @@
   /// the contents of given byte array.
   ///@since 2.1
   jsonparser_.JsonParser createParser4(
-    jni.JArray<jni.JByte> data,
+    jni.JArray<jni.jbyte> data,
   ) {
-    return const jsonparser_.$JsonParserType().fromRef(jniAccessors
+    return const jsonparser_.$JsonParserType().fromRef(jni.Jni.accessors
         .callMethodWithArgs(reference, _id_createParser4,
             jni.JniCallType.objectType, [data.reference]).object);
   }
 
-  static final _id_createParser5 = jniAccessors.getMethodIDOf(_classRef,
-      r"createParser", r"([BII)Lcom/fasterxml/jackson/core/JsonParser;");
+  static final _id_createParser5 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
+      r"createParser",
+      r"([BII)Lcom/fasterxml/jackson/core/JsonParser;");
 
   /// from: public com.fasterxml.jackson.core.JsonParser createParser(byte[] data, int offset, int len)
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -1157,11 +1161,11 @@
   ///@param len Length of contents to parse within buffer
   ///@since 2.1
   jsonparser_.JsonParser createParser5(
-    jni.JArray<jni.JByte> data,
+    jni.JArray<jni.jbyte> data,
     int offset,
     int len,
   ) {
-    return const jsonparser_.$JsonParserType().fromRef(jniAccessors
+    return const jsonparser_.$JsonParserType().fromRef(jni.Jni.accessors
         .callMethodWithArgs(
             reference, _id_createParser5, jni.JniCallType.objectType, [
       data.reference,
@@ -1170,8 +1174,8 @@
     ]).object);
   }
 
-  static final _id_createParser6 = jniAccessors.getMethodIDOf(
-      _classRef,
+  static final _id_createParser6 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
       r"createParser",
       r"(Ljava/lang/String;)Lcom/fasterxml/jackson/core/JsonParser;");
 
@@ -1184,13 +1188,15 @@
   jsonparser_.JsonParser createParser6(
     jni.JString content,
   ) {
-    return const jsonparser_.$JsonParserType().fromRef(jniAccessors
+    return const jsonparser_.$JsonParserType().fromRef(jni.Jni.accessors
         .callMethodWithArgs(reference, _id_createParser6,
             jni.JniCallType.objectType, [content.reference]).object);
   }
 
-  static final _id_createParser7 = jniAccessors.getMethodIDOf(_classRef,
-      r"createParser", r"([C)Lcom/fasterxml/jackson/core/JsonParser;");
+  static final _id_createParser7 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
+      r"createParser",
+      r"([C)Lcom/fasterxml/jackson/core/JsonParser;");
 
   /// from: public com.fasterxml.jackson.core.JsonParser createParser(char[] content)
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -1199,15 +1205,17 @@
   /// contents of given char array.
   ///@since 2.4
   jsonparser_.JsonParser createParser7(
-    jni.JArray<jni.JChar> content,
+    jni.JArray<jni.jchar> content,
   ) {
-    return const jsonparser_.$JsonParserType().fromRef(jniAccessors
+    return const jsonparser_.$JsonParserType().fromRef(jni.Jni.accessors
         .callMethodWithArgs(reference, _id_createParser7,
             jni.JniCallType.objectType, [content.reference]).object);
   }
 
-  static final _id_createParser8 = jniAccessors.getMethodIDOf(_classRef,
-      r"createParser", r"([CII)Lcom/fasterxml/jackson/core/JsonParser;");
+  static final _id_createParser8 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
+      r"createParser",
+      r"([CII)Lcom/fasterxml/jackson/core/JsonParser;");
 
   /// from: public com.fasterxml.jackson.core.JsonParser createParser(char[] content, int offset, int len)
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -1215,11 +1223,11 @@
   /// Method for constructing parser for parsing contents of given char array.
   ///@since 2.4
   jsonparser_.JsonParser createParser8(
-    jni.JArray<jni.JChar> content,
+    jni.JArray<jni.jchar> content,
     int offset,
     int len,
   ) {
-    return const jsonparser_.$JsonParserType().fromRef(jniAccessors
+    return const jsonparser_.$JsonParserType().fromRef(jni.Jni.accessors
         .callMethodWithArgs(
             reference, _id_createParser8, jni.JniCallType.objectType, [
       content.reference,
@@ -1228,8 +1236,8 @@
     ]).object);
   }
 
-  static final _id_createParser9 = jniAccessors.getMethodIDOf(
-      _classRef,
+  static final _id_createParser9 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
       r"createParser",
       r"(Ljava/io/DataInput;)Lcom/fasterxml/jackson/core/JsonParser;");
 
@@ -1245,13 +1253,13 @@
   jsonparser_.JsonParser createParser9(
     jni.JObject in0,
   ) {
-    return const jsonparser_.$JsonParserType().fromRef(jniAccessors
+    return const jsonparser_.$JsonParserType().fromRef(jni.Jni.accessors
         .callMethodWithArgs(reference, _id_createParser9,
             jni.JniCallType.objectType, [in0.reference]).object);
   }
 
-  static final _id_createNonBlockingByteArrayParser =
-      jniAccessors.getMethodIDOf(_classRef, r"createNonBlockingByteArrayParser",
+  static final _id_createNonBlockingByteArrayParser = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"createNonBlockingByteArrayParser",
           r"()Lcom/fasterxml/jackson/core/JsonParser;");
 
   /// from: public com.fasterxml.jackson.core.JsonParser createNonBlockingByteArrayParser()
@@ -1271,13 +1279,13 @@
   /// at this point.
   ///@since 2.9
   jsonparser_.JsonParser createNonBlockingByteArrayParser() {
-    return const jsonparser_.$JsonParserType().fromRef(jniAccessors
+    return const jsonparser_.$JsonParserType().fromRef(jni.Jni.accessors
         .callMethodWithArgs(reference, _id_createNonBlockingByteArrayParser,
             jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_createGenerator = jniAccessors.getMethodIDOf(
-      _classRef,
+  static final _id_createGenerator = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
       r"createGenerator",
       r"(Ljava/io/OutputStream;Lcom/fasterxml/jackson/core/JsonEncoding;)Lcom/fasterxml/jackson/core/JsonGenerator;");
 
@@ -1306,15 +1314,15 @@
     jni.JObject out,
     jni.JObject enc,
   ) {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference,
         _id_createGenerator,
         jni.JniCallType.objectType,
         [out.reference, enc.reference]).object);
   }
 
-  static final _id_createGenerator1 = jniAccessors.getMethodIDOf(
-      _classRef,
+  static final _id_createGenerator1 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
       r"createGenerator",
       r"(Ljava/io/OutputStream;)Lcom/fasterxml/jackson/core/JsonGenerator;");
 
@@ -1329,15 +1337,15 @@
   jni.JObject createGenerator1(
     jni.JObject out,
   ) {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference,
         _id_createGenerator1,
         jni.JniCallType.objectType,
         [out.reference]).object);
   }
 
-  static final _id_createGenerator2 = jniAccessors.getMethodIDOf(
-      _classRef,
+  static final _id_createGenerator2 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
       r"createGenerator",
       r"(Ljava/io/Writer;)Lcom/fasterxml/jackson/core/JsonGenerator;");
 
@@ -1358,15 +1366,15 @@
   jni.JObject createGenerator2(
     jni.JObject w,
   ) {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference,
         _id_createGenerator2,
         jni.JniCallType.objectType,
         [w.reference]).object);
   }
 
-  static final _id_createGenerator3 = jniAccessors.getMethodIDOf(
-      _classRef,
+  static final _id_createGenerator3 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
       r"createGenerator",
       r"(Ljava/io/File;Lcom/fasterxml/jackson/core/JsonEncoding;)Lcom/fasterxml/jackson/core/JsonGenerator;");
 
@@ -1389,15 +1397,15 @@
     jni.JObject f,
     jni.JObject enc,
   ) {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference,
         _id_createGenerator3,
         jni.JniCallType.objectType,
         [f.reference, enc.reference]).object);
   }
 
-  static final _id_createGenerator4 = jniAccessors.getMethodIDOf(
-      _classRef,
+  static final _id_createGenerator4 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
       r"createGenerator",
       r"(Ljava/io/DataOutput;Lcom/fasterxml/jackson/core/JsonEncoding;)Lcom/fasterxml/jackson/core/JsonGenerator;");
 
@@ -1411,15 +1419,15 @@
     jni.JObject out,
     jni.JObject enc,
   ) {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference,
         _id_createGenerator4,
         jni.JniCallType.objectType,
         [out.reference, enc.reference]).object);
   }
 
-  static final _id_createGenerator5 = jniAccessors.getMethodIDOf(
-      _classRef,
+  static final _id_createGenerator5 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
       r"createGenerator",
       r"(Ljava/io/DataOutput;)Lcom/fasterxml/jackson/core/JsonGenerator;");
 
@@ -1434,15 +1442,15 @@
   jni.JObject createGenerator5(
     jni.JObject out,
   ) {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference,
         _id_createGenerator5,
         jni.JniCallType.objectType,
         [out.reference]).object);
   }
 
-  static final _id_createJsonParser = jniAccessors.getMethodIDOf(
-      _classRef,
+  static final _id_createJsonParser = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
       r"createJsonParser",
       r"(Ljava/io/File;)Lcom/fasterxml/jackson/core/JsonParser;");
 
@@ -1470,13 +1478,13 @@
   jsonparser_.JsonParser createJsonParser(
     jni.JObject f,
   ) {
-    return const jsonparser_.$JsonParserType().fromRef(jniAccessors
+    return const jsonparser_.$JsonParserType().fromRef(jni.Jni.accessors
         .callMethodWithArgs(reference, _id_createJsonParser,
             jni.JniCallType.objectType, [f.reference]).object);
   }
 
-  static final _id_createJsonParser1 = jniAccessors.getMethodIDOf(
-      _classRef,
+  static final _id_createJsonParser1 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
       r"createJsonParser",
       r"(Ljava/net/URL;)Lcom/fasterxml/jackson/core/JsonParser;");
 
@@ -1503,13 +1511,13 @@
   jsonparser_.JsonParser createJsonParser1(
     jni.JObject url,
   ) {
-    return const jsonparser_.$JsonParserType().fromRef(jniAccessors
+    return const jsonparser_.$JsonParserType().fromRef(jni.Jni.accessors
         .callMethodWithArgs(reference, _id_createJsonParser1,
             jni.JniCallType.objectType, [url.reference]).object);
   }
 
-  static final _id_createJsonParser2 = jniAccessors.getMethodIDOf(
-      _classRef,
+  static final _id_createJsonParser2 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
       r"createJsonParser",
       r"(Ljava/io/InputStream;)Lcom/fasterxml/jackson/core/JsonParser;");
 
@@ -1539,13 +1547,13 @@
   jsonparser_.JsonParser createJsonParser2(
     jni.JObject in0,
   ) {
-    return const jsonparser_.$JsonParserType().fromRef(jniAccessors
+    return const jsonparser_.$JsonParserType().fromRef(jni.Jni.accessors
         .callMethodWithArgs(reference, _id_createJsonParser2,
             jni.JniCallType.objectType, [in0.reference]).object);
   }
 
-  static final _id_createJsonParser3 = jniAccessors.getMethodIDOf(
-      _classRef,
+  static final _id_createJsonParser3 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
       r"createJsonParser",
       r"(Ljava/io/Reader;)Lcom/fasterxml/jackson/core/JsonParser;");
 
@@ -1568,13 +1576,15 @@
   jsonparser_.JsonParser createJsonParser3(
     jni.JObject r,
   ) {
-    return const jsonparser_.$JsonParserType().fromRef(jniAccessors
+    return const jsonparser_.$JsonParserType().fromRef(jni.Jni.accessors
         .callMethodWithArgs(reference, _id_createJsonParser3,
             jni.JniCallType.objectType, [r.reference]).object);
   }
 
-  static final _id_createJsonParser4 = jniAccessors.getMethodIDOf(_classRef,
-      r"createJsonParser", r"([B)Lcom/fasterxml/jackson/core/JsonParser;");
+  static final _id_createJsonParser4 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
+      r"createJsonParser",
+      r"([B)Lcom/fasterxml/jackson/core/JsonParser;");
 
   /// from: public com.fasterxml.jackson.core.JsonParser createJsonParser(byte[] data)
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -1586,15 +1596,17 @@
   ///@throws JsonParseException if parser initialization fails due to content decoding problem
   ///@deprecated Since 2.2, use \#createParser(byte[]) instead.
   jsonparser_.JsonParser createJsonParser4(
-    jni.JArray<jni.JByte> data,
+    jni.JArray<jni.jbyte> data,
   ) {
-    return const jsonparser_.$JsonParserType().fromRef(jniAccessors
+    return const jsonparser_.$JsonParserType().fromRef(jni.Jni.accessors
         .callMethodWithArgs(reference, _id_createJsonParser4,
             jni.JniCallType.objectType, [data.reference]).object);
   }
 
-  static final _id_createJsonParser5 = jniAccessors.getMethodIDOf(_classRef,
-      r"createJsonParser", r"([BII)Lcom/fasterxml/jackson/core/JsonParser;");
+  static final _id_createJsonParser5 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
+      r"createJsonParser",
+      r"([BII)Lcom/fasterxml/jackson/core/JsonParser;");
 
   /// from: public com.fasterxml.jackson.core.JsonParser createJsonParser(byte[] data, int offset, int len)
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -1609,11 +1621,11 @@
   ///@throws JsonParseException if parser initialization fails due to content decoding problem
   ///@deprecated Since 2.2, use \#createParser(byte[],int,int) instead.
   jsonparser_.JsonParser createJsonParser5(
-    jni.JArray<jni.JByte> data,
+    jni.JArray<jni.jbyte> data,
     int offset,
     int len,
   ) {
-    return const jsonparser_.$JsonParserType().fromRef(jniAccessors
+    return const jsonparser_.$JsonParserType().fromRef(jni.Jni.accessors
         .callMethodWithArgs(
             reference, _id_createJsonParser5, jni.JniCallType.objectType, [
       data.reference,
@@ -1622,8 +1634,8 @@
     ]).object);
   }
 
-  static final _id_createJsonParser6 = jniAccessors.getMethodIDOf(
-      _classRef,
+  static final _id_createJsonParser6 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
       r"createJsonParser",
       r"(Ljava/lang/String;)Lcom/fasterxml/jackson/core/JsonParser;");
 
@@ -1640,13 +1652,13 @@
   jsonparser_.JsonParser createJsonParser6(
     jni.JString content,
   ) {
-    return const jsonparser_.$JsonParserType().fromRef(jniAccessors
+    return const jsonparser_.$JsonParserType().fromRef(jni.Jni.accessors
         .callMethodWithArgs(reference, _id_createJsonParser6,
             jni.JniCallType.objectType, [content.reference]).object);
   }
 
-  static final _id_createJsonGenerator = jniAccessors.getMethodIDOf(
-      _classRef,
+  static final _id_createJsonGenerator = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
       r"createJsonGenerator",
       r"(Ljava/io/OutputStream;Lcom/fasterxml/jackson/core/JsonEncoding;)Lcom/fasterxml/jackson/core/JsonGenerator;");
 
@@ -1677,15 +1689,15 @@
     jni.JObject out,
     jni.JObject enc,
   ) {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference,
         _id_createJsonGenerator,
         jni.JniCallType.objectType,
         [out.reference, enc.reference]).object);
   }
 
-  static final _id_createJsonGenerator1 = jniAccessors.getMethodIDOf(
-      _classRef,
+  static final _id_createJsonGenerator1 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
       r"createJsonGenerator",
       r"(Ljava/io/Writer;)Lcom/fasterxml/jackson/core/JsonGenerator;");
 
@@ -1708,15 +1720,15 @@
   jni.JObject createJsonGenerator1(
     jni.JObject out,
   ) {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference,
         _id_createJsonGenerator1,
         jni.JniCallType.objectType,
         [out.reference]).object);
   }
 
-  static final _id_createJsonGenerator2 = jniAccessors.getMethodIDOf(
-      _classRef,
+  static final _id_createJsonGenerator2 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
       r"createJsonGenerator",
       r"(Ljava/io/OutputStream;)Lcom/fasterxml/jackson/core/JsonGenerator;");
 
@@ -1734,7 +1746,7 @@
   jni.JObject createJsonGenerator2(
     jni.JObject out,
   ) {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference,
         _id_createJsonGenerator2,
         jni.JniCallType.objectType,
@@ -1762,7 +1774,7 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $JsonFactoryType && other is $JsonFactoryType;
+    return other.runtimeType == ($JsonFactoryType) && other is $JsonFactoryType;
   }
 }
 
@@ -1772,30 +1784,32 @@
 /// changed for JsonFactory.
 class JsonFactory_Feature extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<JsonFactory_Feature> $type = type;
 
   JsonFactory_Feature.fromRef(
     jni.JObjectPtr ref,
   ) : super.fromRef(ref);
 
-  static final _classRef = jniAccessors
-      .getClassOf(r"com/fasterxml/jackson/core/JsonFactory$Feature");
+  static final _class =
+      jni.Jni.findJClass(r"com/fasterxml/jackson/core/JsonFactory$Feature");
 
   /// The type which includes information such as the signature of this class.
   static const type = $JsonFactory_FeatureType();
-  static final _id_values = jniAccessors.getStaticMethodIDOf(_classRef,
-      r"values", r"()[Lcom/fasterxml/jackson/core/JsonFactory$Feature;");
+  static final _id_values = jni.Jni.accessors.getStaticMethodIDOf(
+      _class.reference,
+      r"values",
+      r"()[Lcom/fasterxml/jackson/core/JsonFactory$Feature;");
 
   /// from: static public com.fasterxml.jackson.core.JsonFactory.Feature[] values()
   /// The returned object must be deleted after use, by calling the `delete` method.
   static jni.JArray<JsonFactory_Feature> values() {
-    return const jni.JArrayType($JsonFactory_FeatureType()).fromRef(jniAccessors
-        .callStaticMethodWithArgs(
-            _classRef, _id_values, jni.JniCallType.objectType, []).object);
+    return const jni.JArrayType($JsonFactory_FeatureType()).fromRef(
+        jni.Jni.accessors.callStaticMethodWithArgs(_class.reference, _id_values,
+            jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_valueOf = jniAccessors.getStaticMethodIDOf(
-      _classRef,
+  static final _id_valueOf = jni.Jni.accessors.getStaticMethodIDOf(
+      _class.reference,
       r"valueOf",
       r"(Ljava/lang/String;)Lcom/fasterxml/jackson/core/JsonFactory$Feature;");
 
@@ -1804,13 +1818,13 @@
   static JsonFactory_Feature valueOf(
     jni.JString name,
   ) {
-    return const $JsonFactory_FeatureType().fromRef(jniAccessors
-        .callStaticMethodWithArgs(_classRef, _id_valueOf,
+    return const $JsonFactory_FeatureType().fromRef(jni.Jni.accessors
+        .callStaticMethodWithArgs(_class.reference, _id_valueOf,
             jni.JniCallType.objectType, [name.reference]).object);
   }
 
-  static final _id_collectDefaults =
-      jniAccessors.getStaticMethodIDOf(_classRef, r"collectDefaults", r"()I");
+  static final _id_collectDefaults = jni.Jni.accessors
+      .getStaticMethodIDOf(_class.reference, r"collectDefaults", r"()I");
 
   /// from: static public int collectDefaults()
   ///
@@ -1818,36 +1832,36 @@
   /// are enabled by default.
   ///@return Bit field of features enabled by default
   static int collectDefaults() {
-    return jniAccessors.callStaticMethodWithArgs(
-        _classRef, _id_collectDefaults, jni.JniCallType.intType, []).integer;
+    return jni.Jni.accessors.callStaticMethodWithArgs(_class.reference,
+        _id_collectDefaults, jni.JniCallType.intType, []).integer;
   }
 
-  static final _id_enabledByDefault =
-      jniAccessors.getMethodIDOf(_classRef, r"enabledByDefault", r"()Z");
+  static final _id_enabledByDefault = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"enabledByDefault", r"()Z");
 
   /// from: public boolean enabledByDefault()
   bool enabledByDefault() {
-    return jniAccessors.callMethodWithArgs(reference, _id_enabledByDefault,
+    return jni.Jni.accessors.callMethodWithArgs(reference, _id_enabledByDefault,
         jni.JniCallType.booleanType, []).boolean;
   }
 
   static final _id_enabledIn =
-      jniAccessors.getMethodIDOf(_classRef, r"enabledIn", r"(I)Z");
+      jni.Jni.accessors.getMethodIDOf(_class.reference, r"enabledIn", r"(I)Z");
 
   /// from: public boolean enabledIn(int flags)
   bool enabledIn(
     int flags,
   ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_enabledIn,
+    return jni.Jni.accessors.callMethodWithArgs(reference, _id_enabledIn,
         jni.JniCallType.booleanType, [jni.JValueInt(flags)]).boolean;
   }
 
   static final _id_getMask =
-      jniAccessors.getMethodIDOf(_classRef, r"getMask", r"()I");
+      jni.Jni.accessors.getMethodIDOf(_class.reference, r"getMask", r"()I");
 
   /// from: public int getMask()
   int getMask() {
-    return jniAccessors.callMethodWithArgs(
+    return jni.Jni.accessors.callMethodWithArgs(
         reference, _id_getMask, jni.JniCallType.intType, []).integer;
   }
 }
@@ -1873,7 +1887,7 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $JsonFactory_FeatureType &&
+    return other.runtimeType == ($JsonFactory_FeatureType) &&
         other is $JsonFactory_FeatureType;
   }
 }
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 e8caa42..89a9aff 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
@@ -37,7 +37,6 @@
 import "package:jni/jni.dart" as jni;
 
 import "JsonToken.dart" as jsontoken_;
-import "../../../../_init.dart";
 
 /// from: com.fasterxml.jackson.core.JsonParser
 ///
@@ -47,19 +46,20 @@
 ///@author Tatu Saloranta
 class JsonParser extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<JsonParser> $type = type;
 
   JsonParser.fromRef(
     jni.JObjectPtr ref,
   ) : super.fromRef(ref);
 
-  static final _classRef =
-      jniAccessors.getClassOf(r"com/fasterxml/jackson/core/JsonParser");
+  static final _class =
+      jni.Jni.findJClass(r"com/fasterxml/jackson/core/JsonParser");
 
   /// The type which includes information such as the signature of this class.
   static const type = $JsonParserType();
-  static final _id_DEFAULT_READ_CAPABILITIES = jniAccessors.getStaticFieldIDOf(
-    _classRef,
+  static final _id_DEFAULT_READ_CAPABILITIES =
+      jni.Jni.accessors.getStaticFieldIDOf(
+    _class.reference,
     r"DEFAULT_READ_CAPABILITIES",
     r"Lcom/fasterxml/jackson/core/util/JacksonFeatureSet;",
   );
@@ -72,35 +72,35 @@
   /// set needs to be passed).
   ///@since 2.12
   static jni.JObject get DEFAULT_READ_CAPABILITIES =>
-      const jni.JObjectType().fromRef(jniAccessors
-          .getStaticField(_classRef, _id_DEFAULT_READ_CAPABILITIES,
+      const jni.JObjectType().fromRef(jni.Jni.accessors
+          .getStaticField(_class.reference, _id_DEFAULT_READ_CAPABILITIES,
               jni.JniCallType.objectType)
           .object);
 
   static final _id_ctor =
-      jniAccessors.getMethodIDOf(_classRef, r"<init>", r"()V");
+      jni.Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"()V");
 
   /// from: protected void <init>()
   /// The returned object must be deleted after use, by calling the `delete` method.
   factory JsonParser() {
-    return JsonParser.fromRef(
-        jniAccessors.newObjectWithArgs(_classRef, _id_ctor, []).object);
+    return JsonParser.fromRef(jni.Jni.accessors
+        .newObjectWithArgs(_class.reference, _id_ctor, []).object);
   }
 
   static final _id_ctor1 =
-      jniAccessors.getMethodIDOf(_classRef, r"<init>", r"(I)V");
+      jni.Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"(I)V");
 
   /// from: protected void <init>(int features)
   /// The returned object must be deleted after use, by calling the `delete` method.
   factory JsonParser.ctor1(
     int features,
   ) {
-    return JsonParser.fromRef(jniAccessors.newObjectWithArgs(
-        _classRef, _id_ctor1, [jni.JValueInt(features)]).object);
+    return JsonParser.fromRef(jni.Jni.accessors.newObjectWithArgs(
+        _class.reference, _id_ctor1, [jni.JValueInt(features)]).object);
   }
 
-  static final _id_getCodec = jniAccessors.getMethodIDOf(
-      _classRef, r"getCodec", r"()Lcom/fasterxml/jackson/core/ObjectCodec;");
+  static final _id_getCodec = jni.Jni.accessors.getMethodIDOf(_class.reference,
+      r"getCodec", r"()Lcom/fasterxml/jackson/core/ObjectCodec;");
 
   /// from: public abstract com.fasterxml.jackson.core.ObjectCodec getCodec()
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -110,12 +110,12 @@
   /// method (and its variants).
   ///@return Codec assigned to this parser, if any; {@code null} if none
   jni.JObject getCodec() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference, _id_getCodec, jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_setCodec = jniAccessors.getMethodIDOf(
-      _classRef, r"setCodec", r"(Lcom/fasterxml/jackson/core/ObjectCodec;)V");
+  static final _id_setCodec = jni.Jni.accessors.getMethodIDOf(_class.reference,
+      r"setCodec", r"(Lcom/fasterxml/jackson/core/ObjectCodec;)V");
 
   /// from: public abstract void setCodec(com.fasterxml.jackson.core.ObjectCodec oc)
   ///
@@ -126,12 +126,12 @@
   void setCodec(
     jni.JObject oc,
   ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_setCodec,
+    return jni.Jni.accessors.callMethodWithArgs(reference, _id_setCodec,
         jni.JniCallType.voidType, [oc.reference]).check();
   }
 
-  static final _id_getInputSource = jniAccessors.getMethodIDOf(
-      _classRef, r"getInputSource", r"()Ljava/lang/Object;");
+  static final _id_getInputSource = jni.Jni.accessors.getMethodIDOf(
+      _class.reference, r"getInputSource", r"()Ljava/lang/Object;");
 
   /// from: public java.lang.Object getInputSource()
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -151,12 +151,12 @@
   /// "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(jniAccessors.callMethodWithArgs(
+    return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference, _id_getInputSource, jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_setRequestPayloadOnError = jniAccessors.getMethodIDOf(
-      _classRef,
+  static final _id_setRequestPayloadOnError = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
       r"setRequestPayloadOnError",
       r"(Lcom/fasterxml/jackson/core/util/RequestPayload;)V");
 
@@ -168,15 +168,17 @@
   void setRequestPayloadOnError(
     jni.JObject payload,
   ) {
-    return jniAccessors.callMethodWithArgs(
+    return jni.Jni.accessors.callMethodWithArgs(
         reference,
         _id_setRequestPayloadOnError,
         jni.JniCallType.voidType,
         [payload.reference]).check();
   }
 
-  static final _id_setRequestPayloadOnError1 = jniAccessors.getMethodIDOf(
-      _classRef, r"setRequestPayloadOnError", r"([BLjava/lang/String;)V");
+  static final _id_setRequestPayloadOnError1 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
+      r"setRequestPayloadOnError",
+      r"([BLjava/lang/String;)V");
 
   /// from: public void setRequestPayloadOnError(byte[] payload, java.lang.String charset)
   ///
@@ -185,18 +187,18 @@
   ///@param charset Character encoding for (lazily) decoding payload
   ///@since 2.8
   void setRequestPayloadOnError1(
-    jni.JArray<jni.JByte> payload,
+    jni.JArray<jni.jbyte> payload,
     jni.JString charset,
   ) {
-    return jniAccessors.callMethodWithArgs(
+    return jni.Jni.accessors.callMethodWithArgs(
         reference,
         _id_setRequestPayloadOnError1,
         jni.JniCallType.voidType,
         [payload.reference, charset.reference]).check();
   }
 
-  static final _id_setRequestPayloadOnError2 = jniAccessors.getMethodIDOf(
-      _classRef, r"setRequestPayloadOnError", r"(Ljava/lang/String;)V");
+  static final _id_setRequestPayloadOnError2 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference, r"setRequestPayloadOnError", r"(Ljava/lang/String;)V");
 
   /// from: public void setRequestPayloadOnError(java.lang.String payload)
   ///
@@ -206,15 +208,15 @@
   void setRequestPayloadOnError2(
     jni.JString payload,
   ) {
-    return jniAccessors.callMethodWithArgs(
+    return jni.Jni.accessors.callMethodWithArgs(
         reference,
         _id_setRequestPayloadOnError2,
         jni.JniCallType.voidType,
         [payload.reference]).check();
   }
 
-  static final _id_setSchema = jniAccessors.getMethodIDOf(
-      _classRef, r"setSchema", r"(Lcom/fasterxml/jackson/core/FormatSchema;)V");
+  static final _id_setSchema = jni.Jni.accessors.getMethodIDOf(_class.reference,
+      r"setSchema", r"(Lcom/fasterxml/jackson/core/FormatSchema;)V");
 
   /// from: public void setSchema(com.fasterxml.jackson.core.FormatSchema schema)
   ///
@@ -231,12 +233,12 @@
   void setSchema(
     jni.JObject schema,
   ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_setSchema,
+    return jni.Jni.accessors.callMethodWithArgs(reference, _id_setSchema,
         jni.JniCallType.voidType, [schema.reference]).check();
   }
 
-  static final _id_getSchema = jniAccessors.getMethodIDOf(
-      _classRef, r"getSchema", r"()Lcom/fasterxml/jackson/core/FormatSchema;");
+  static final _id_getSchema = jni.Jni.accessors.getMethodIDOf(_class.reference,
+      r"getSchema", r"()Lcom/fasterxml/jackson/core/FormatSchema;");
 
   /// from: public com.fasterxml.jackson.core.FormatSchema getSchema()
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -246,12 +248,14 @@
   ///@return Schema in use by this parser, if any; {@code null} if none
   ///@since 2.1
   jni.JObject getSchema() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference, _id_getSchema, jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_canUseSchema = jniAccessors.getMethodIDOf(_classRef,
-      r"canUseSchema", r"(Lcom/fasterxml/jackson/core/FormatSchema;)Z");
+  static final _id_canUseSchema = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
+      r"canUseSchema",
+      r"(Lcom/fasterxml/jackson/core/FormatSchema;)Z");
 
   /// from: public boolean canUseSchema(com.fasterxml.jackson.core.FormatSchema schema)
   ///
@@ -262,12 +266,12 @@
   bool canUseSchema(
     jni.JObject schema,
   ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_canUseSchema,
+    return jni.Jni.accessors.callMethodWithArgs(reference, _id_canUseSchema,
         jni.JniCallType.booleanType, [schema.reference]).boolean;
   }
 
-  static final _id_requiresCustomCodec =
-      jniAccessors.getMethodIDOf(_classRef, r"requiresCustomCodec", r"()Z");
+  static final _id_requiresCustomCodec = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"requiresCustomCodec", r"()Z");
 
   /// from: public boolean requiresCustomCodec()
   ///
@@ -280,12 +284,12 @@
   ///   ObjectCodec is enough
   ///@since 2.1
   bool requiresCustomCodec() {
-    return jniAccessors.callMethodWithArgs(reference, _id_requiresCustomCodec,
-        jni.JniCallType.booleanType, []).boolean;
+    return jni.Jni.accessors.callMethodWithArgs(reference,
+        _id_requiresCustomCodec, jni.JniCallType.booleanType, []).boolean;
   }
 
-  static final _id_canParseAsync =
-      jniAccessors.getMethodIDOf(_classRef, r"canParseAsync", r"()Z");
+  static final _id_canParseAsync = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"canParseAsync", r"()Z");
 
   /// from: public boolean canParseAsync()
   ///
@@ -301,12 +305,12 @@
   ///@return True if this is a non-blocking ("asynchronous") parser
   ///@since 2.9
   bool canParseAsync() {
-    return jniAccessors.callMethodWithArgs(
+    return jni.Jni.accessors.callMethodWithArgs(
         reference, _id_canParseAsync, jni.JniCallType.booleanType, []).boolean;
   }
 
-  static final _id_getNonBlockingInputFeeder = jniAccessors.getMethodIDOf(
-      _classRef,
+  static final _id_getNonBlockingInputFeeder = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
       r"getNonBlockingInputFeeder",
       r"()Lcom/fasterxml/jackson/core/async/NonBlockingInputFeeder;");
 
@@ -319,14 +323,14 @@
   ///@return Input feeder to use with non-blocking (async) parsing
   ///@since 2.9
   jni.JObject getNonBlockingInputFeeder() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference,
         _id_getNonBlockingInputFeeder,
         jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_getReadCapabilities = jniAccessors.getMethodIDOf(
-      _classRef,
+  static final _id_getReadCapabilities = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
       r"getReadCapabilities",
       r"()Lcom/fasterxml/jackson/core/util/JacksonFeatureSet;");
 
@@ -338,14 +342,14 @@
   ///@return Set of read capabilities for content to read via this parser
   ///@since 2.12
   jni.JObject getReadCapabilities() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference,
         _id_getReadCapabilities,
         jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_version = jniAccessors.getMethodIDOf(
-      _classRef, r"version", r"()Lcom/fasterxml/jackson/core/Version;");
+  static final _id_version = jni.Jni.accessors.getMethodIDOf(
+      _class.reference, r"version", r"()Lcom/fasterxml/jackson/core/Version;");
 
   /// from: public abstract com.fasterxml.jackson.core.Version version()
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -355,12 +359,12 @@
   ///@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(jniAccessors.callMethodWithArgs(
+    return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference, _id_version, jni.JniCallType.objectType, []).object);
   }
 
   static final _id_close =
-      jniAccessors.getMethodIDOf(_classRef, r"close", r"()V");
+      jni.Jni.accessors.getMethodIDOf(_class.reference, r"close", r"()V");
 
   /// from: public abstract void close()
   ///
@@ -379,12 +383,12 @@
   /// stream or reader it does own them.
   ///@throws IOException if there is either an underlying I/O problem
   void close() {
-    return jniAccessors.callMethodWithArgs(
+    return jni.Jni.accessors.callMethodWithArgs(
         reference, _id_close, jni.JniCallType.voidType, []).check();
   }
 
   static final _id_isClosed =
-      jniAccessors.getMethodIDOf(_classRef, r"isClosed", r"()Z");
+      jni.Jni.accessors.getMethodIDOf(_class.reference, r"isClosed", r"()Z");
 
   /// from: public abstract boolean isClosed()
   ///
@@ -396,12 +400,12 @@
   /// end of input.
   ///@return {@code True} if this parser instance has been closed
   bool isClosed() {
-    return jniAccessors.callMethodWithArgs(
+    return jni.Jni.accessors.callMethodWithArgs(
         reference, _id_isClosed, jni.JniCallType.booleanType, []).boolean;
   }
 
-  static final _id_getParsingContext = jniAccessors.getMethodIDOf(
-      _classRef,
+  static final _id_getParsingContext = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
       r"getParsingContext",
       r"()Lcom/fasterxml/jackson/core/JsonStreamContext;");
 
@@ -418,14 +422,16 @@
   /// input, if so desired.
   ///@return Stream input context (JsonStreamContext) associated with this parser
   jni.JObject getParsingContext() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference,
         _id_getParsingContext,
         jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_currentLocation = jniAccessors.getMethodIDOf(_classRef,
-      r"currentLocation", r"()Lcom/fasterxml/jackson/core/JsonLocation;");
+  static final _id_currentLocation = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
+      r"currentLocation",
+      r"()Lcom/fasterxml/jackson/core/JsonLocation;");
 
   /// from: public com.fasterxml.jackson.core.JsonLocation currentLocation()
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -443,12 +449,14 @@
   ///@return Location of the last processed input unit (byte or character)
   ///@since 2.13
   jni.JObject currentLocation() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference, _id_currentLocation, jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_currentTokenLocation = jniAccessors.getMethodIDOf(_classRef,
-      r"currentTokenLocation", r"()Lcom/fasterxml/jackson/core/JsonLocation;");
+  static final _id_currentTokenLocation = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
+      r"currentTokenLocation",
+      r"()Lcom/fasterxml/jackson/core/JsonLocation;");
 
   /// from: public com.fasterxml.jackson.core.JsonLocation currentTokenLocation()
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -466,14 +474,16 @@
   ///@return Starting location of the token parser currently points to
   ///@since 2.13 (will eventually replace \#getTokenLocation)
   jni.JObject currentTokenLocation() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference,
         _id_currentTokenLocation,
         jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_getCurrentLocation = jniAccessors.getMethodIDOf(_classRef,
-      r"getCurrentLocation", r"()Lcom/fasterxml/jackson/core/JsonLocation;");
+  static final _id_getCurrentLocation = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
+      r"getCurrentLocation",
+      r"()Lcom/fasterxml/jackson/core/JsonLocation;");
 
   /// from: public abstract com.fasterxml.jackson.core.JsonLocation getCurrentLocation()
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -482,14 +492,16 @@
   /// Jackson 2.x versions (and removed from Jackson 3.0).
   ///@return Location of the last processed input unit (byte or character)
   jni.JObject getCurrentLocation() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference,
         _id_getCurrentLocation,
         jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_getTokenLocation = jniAccessors.getMethodIDOf(_classRef,
-      r"getTokenLocation", r"()Lcom/fasterxml/jackson/core/JsonLocation;");
+  static final _id_getTokenLocation = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
+      r"getTokenLocation",
+      r"()Lcom/fasterxml/jackson/core/JsonLocation;");
 
   /// from: public abstract com.fasterxml.jackson.core.JsonLocation getTokenLocation()
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -498,14 +510,14 @@
   /// 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(jniAccessors.callMethodWithArgs(
+    return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference,
         _id_getTokenLocation,
         jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_currentValue = jniAccessors.getMethodIDOf(
-      _classRef, r"currentValue", r"()Ljava/lang/Object;");
+  static final _id_currentValue = jni.Jni.accessors.getMethodIDOf(
+      _class.reference, r"currentValue", r"()Ljava/lang/Object;");
 
   /// from: public java.lang.Object currentValue()
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -522,12 +534,12 @@
   ///@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(jniAccessors.callMethodWithArgs(
+    return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference, _id_currentValue, jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_assignCurrentValue = jniAccessors.getMethodIDOf(
-      _classRef, r"assignCurrentValue", r"(Ljava/lang/Object;)V");
+  static final _id_assignCurrentValue = jni.Jni.accessors.getMethodIDOf(
+      _class.reference, r"assignCurrentValue", r"(Ljava/lang/Object;)V");
 
   /// from: public void assignCurrentValue(java.lang.Object v)
   ///
@@ -540,12 +552,15 @@
   void assignCurrentValue(
     jni.JObject v,
   ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_assignCurrentValue,
-        jni.JniCallType.voidType, [v.reference]).check();
+    return jni.Jni.accessors.callMethodWithArgs(
+        reference,
+        _id_assignCurrentValue,
+        jni.JniCallType.voidType,
+        [v.reference]).check();
   }
 
-  static final _id_getCurrentValue = jniAccessors.getMethodIDOf(
-      _classRef, r"getCurrentValue", r"()Ljava/lang/Object;");
+  static final _id_getCurrentValue = jni.Jni.accessors.getMethodIDOf(
+      _class.reference, r"getCurrentValue", r"()Ljava/lang/Object;");
 
   /// from: public java.lang.Object getCurrentValue()
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -554,12 +569,12 @@
   /// 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(jniAccessors.callMethodWithArgs(
+    return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference, _id_getCurrentValue, jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_setCurrentValue = jniAccessors.getMethodIDOf(
-      _classRef, r"setCurrentValue", r"(Ljava/lang/Object;)V");
+  static final _id_setCurrentValue = jni.Jni.accessors.getMethodIDOf(
+      _class.reference, r"setCurrentValue", r"(Ljava/lang/Object;)V");
 
   /// from: public void setCurrentValue(java.lang.Object v)
   ///
@@ -569,12 +584,12 @@
   void setCurrentValue(
     jni.JObject v,
   ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_setCurrentValue,
+    return jni.Jni.accessors.callMethodWithArgs(reference, _id_setCurrentValue,
         jni.JniCallType.voidType, [v.reference]).check();
   }
 
-  static final _id_releaseBuffered = jniAccessors.getMethodIDOf(
-      _classRef, r"releaseBuffered", r"(Ljava/io/OutputStream;)I");
+  static final _id_releaseBuffered = jni.Jni.accessors.getMethodIDOf(
+      _class.reference, r"releaseBuffered", r"(Ljava/io/OutputStream;)I");
 
   /// from: public int releaseBuffered(java.io.OutputStream out)
   ///
@@ -592,12 +607,12 @@
   int releaseBuffered(
     jni.JObject out,
   ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_releaseBuffered,
+    return jni.Jni.accessors.callMethodWithArgs(reference, _id_releaseBuffered,
         jni.JniCallType.intType, [out.reference]).integer;
   }
 
-  static final _id_releaseBuffered1 = jniAccessors.getMethodIDOf(
-      _classRef, r"releaseBuffered", r"(Ljava/io/Writer;)I");
+  static final _id_releaseBuffered1 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference, r"releaseBuffered", r"(Ljava/io/Writer;)I");
 
   /// from: public int releaseBuffered(java.io.Writer w)
   ///
@@ -616,11 +631,13 @@
   int releaseBuffered1(
     jni.JObject w,
   ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_releaseBuffered1,
+    return jni.Jni.accessors.callMethodWithArgs(reference, _id_releaseBuffered1,
         jni.JniCallType.intType, [w.reference]).integer;
   }
 
-  static final _id_enable = jniAccessors.getMethodIDOf(_classRef, r"enable",
+  static final _id_enable = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
+      r"enable",
       r"(Lcom/fasterxml/jackson/core/JsonParser$Feature;)Lcom/fasterxml/jackson/core/JsonParser;");
 
   /// from: public com.fasterxml.jackson.core.JsonParser enable(com.fasterxml.jackson.core.JsonParser.Feature f)
@@ -633,14 +650,16 @@
   JsonParser enable(
     JsonParser_Feature f,
   ) {
-    return const $JsonParserType().fromRef(jniAccessors.callMethodWithArgs(
+    return const $JsonParserType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference,
         _id_enable,
         jni.JniCallType.objectType,
         [f.reference]).object);
   }
 
-  static final _id_disable = jniAccessors.getMethodIDOf(_classRef, r"disable",
+  static final _id_disable = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
+      r"disable",
       r"(Lcom/fasterxml/jackson/core/JsonParser$Feature;)Lcom/fasterxml/jackson/core/JsonParser;");
 
   /// from: public com.fasterxml.jackson.core.JsonParser disable(com.fasterxml.jackson.core.JsonParser.Feature f)
@@ -653,15 +672,15 @@
   JsonParser disable(
     JsonParser_Feature f,
   ) {
-    return const $JsonParserType().fromRef(jniAccessors.callMethodWithArgs(
+    return const $JsonParserType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference,
         _id_disable,
         jni.JniCallType.objectType,
         [f.reference]).object);
   }
 
-  static final _id_configure = jniAccessors.getMethodIDOf(
-      _classRef,
+  static final _id_configure = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
       r"configure",
       r"(Lcom/fasterxml/jackson/core/JsonParser$Feature;Z)Lcom/fasterxml/jackson/core/JsonParser;");
 
@@ -677,14 +696,14 @@
     JsonParser_Feature f,
     bool state,
   ) {
-    return const $JsonParserType().fromRef(jniAccessors.callMethodWithArgs(
+    return const $JsonParserType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference,
         _id_configure,
         jni.JniCallType.objectType,
         [f.reference, state ? 1 : 0]).object);
   }
 
-  static final _id_isEnabled = jniAccessors.getMethodIDOf(_classRef,
+  static final _id_isEnabled = jni.Jni.accessors.getMethodIDOf(_class.reference,
       r"isEnabled", r"(Lcom/fasterxml/jackson/core/JsonParser$Feature;)Z");
 
   /// from: public boolean isEnabled(com.fasterxml.jackson.core.JsonParser.Feature f)
@@ -695,12 +714,14 @@
   bool isEnabled(
     JsonParser_Feature f,
   ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_isEnabled,
+    return jni.Jni.accessors.callMethodWithArgs(reference, _id_isEnabled,
         jni.JniCallType.booleanType, [f.reference]).boolean;
   }
 
-  static final _id_isEnabled1 = jniAccessors.getMethodIDOf(_classRef,
-      r"isEnabled", r"(Lcom/fasterxml/jackson/core/StreamReadFeature;)Z");
+  static final _id_isEnabled1 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
+      r"isEnabled",
+      r"(Lcom/fasterxml/jackson/core/StreamReadFeature;)Z");
 
   /// from: public boolean isEnabled(com.fasterxml.jackson.core.StreamReadFeature f)
   ///
@@ -711,12 +732,12 @@
   bool isEnabled1(
     jni.JObject f,
   ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_isEnabled1,
+    return jni.Jni.accessors.callMethodWithArgs(reference, _id_isEnabled1,
         jni.JniCallType.booleanType, [f.reference]).boolean;
   }
 
-  static final _id_getFeatureMask =
-      jniAccessors.getMethodIDOf(_classRef, r"getFeatureMask", r"()I");
+  static final _id_getFeatureMask = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"getFeatureMask", r"()I");
 
   /// from: public int getFeatureMask()
   ///
@@ -724,12 +745,14 @@
   ///@return Bit mask that defines current states of all standard Features.
   ///@since 2.3
   int getFeatureMask() {
-    return jniAccessors.callMethodWithArgs(
+    return jni.Jni.accessors.callMethodWithArgs(
         reference, _id_getFeatureMask, jni.JniCallType.intType, []).integer;
   }
 
-  static final _id_setFeatureMask = jniAccessors.getMethodIDOf(_classRef,
-      r"setFeatureMask", r"(I)Lcom/fasterxml/jackson/core/JsonParser;");
+  static final _id_setFeatureMask = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
+      r"setFeatureMask",
+      r"(I)Lcom/fasterxml/jackson/core/JsonParser;");
 
   /// from: public com.fasterxml.jackson.core.JsonParser setFeatureMask(int mask)
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -742,15 +765,17 @@
   JsonParser setFeatureMask(
     int mask,
   ) {
-    return const $JsonParserType().fromRef(jniAccessors.callMethodWithArgs(
+    return const $JsonParserType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference,
         _id_setFeatureMask,
         jni.JniCallType.objectType,
         [jni.JValueInt(mask)]).object);
   }
 
-  static final _id_overrideStdFeatures = jniAccessors.getMethodIDOf(_classRef,
-      r"overrideStdFeatures", r"(II)Lcom/fasterxml/jackson/core/JsonParser;");
+  static final _id_overrideStdFeatures = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
+      r"overrideStdFeatures",
+      r"(II)Lcom/fasterxml/jackson/core/JsonParser;");
 
   /// from: public com.fasterxml.jackson.core.JsonParser overrideStdFeatures(int values, int mask)
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -771,15 +796,15 @@
     int values,
     int mask,
   ) {
-    return const $JsonParserType().fromRef(jniAccessors.callMethodWithArgs(
+    return const $JsonParserType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference,
         _id_overrideStdFeatures,
         jni.JniCallType.objectType,
         [jni.JValueInt(values), jni.JValueInt(mask)]).object);
   }
 
-  static final _id_getFormatFeatures =
-      jniAccessors.getMethodIDOf(_classRef, r"getFormatFeatures", r"()I");
+  static final _id_getFormatFeatures = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"getFormatFeatures", r"()I");
 
   /// from: public int getFormatFeatures()
   ///
@@ -788,12 +813,12 @@
   ///@return Bit mask that defines current states of all standard FormatFeatures.
   ///@since 2.6
   int getFormatFeatures() {
-    return jniAccessors.callMethodWithArgs(
+    return jni.Jni.accessors.callMethodWithArgs(
         reference, _id_getFormatFeatures, jni.JniCallType.intType, []).integer;
   }
 
-  static final _id_overrideFormatFeatures = jniAccessors.getMethodIDOf(
-      _classRef,
+  static final _id_overrideFormatFeatures = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
       r"overrideFormatFeatures",
       r"(II)Lcom/fasterxml/jackson/core/JsonParser;");
 
@@ -814,15 +839,15 @@
     int values,
     int mask,
   ) {
-    return const $JsonParserType().fromRef(jniAccessors.callMethodWithArgs(
+    return const $JsonParserType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference,
         _id_overrideFormatFeatures,
         jni.JniCallType.objectType,
         [jni.JValueInt(values), jni.JValueInt(mask)]).object);
   }
 
-  static final _id_nextToken = jniAccessors.getMethodIDOf(
-      _classRef, r"nextToken", r"()Lcom/fasterxml/jackson/core/JsonToken;");
+  static final _id_nextToken = jni.Jni.accessors.getMethodIDOf(_class.reference,
+      r"nextToken", r"()Lcom/fasterxml/jackson/core/JsonToken;");
 
   /// from: public abstract com.fasterxml.jackson.core.JsonToken nextToken()
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -836,13 +861,13 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   jsontoken_.JsonToken nextToken() {
-    return const jsontoken_.$JsonTokenType().fromRef(jniAccessors
+    return const jsontoken_.$JsonTokenType().fromRef(jni.Jni.accessors
         .callMethodWithArgs(
             reference, _id_nextToken, jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_nextValue = jniAccessors.getMethodIDOf(
-      _classRef, r"nextValue", r"()Lcom/fasterxml/jackson/core/JsonToken;");
+  static final _id_nextValue = jni.Jni.accessors.getMethodIDOf(_class.reference,
+      r"nextValue", r"()Lcom/fasterxml/jackson/core/JsonToken;");
 
   /// from: public abstract com.fasterxml.jackson.core.JsonToken nextValue()
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -864,13 +889,15 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   jsontoken_.JsonToken nextValue() {
-    return const jsontoken_.$JsonTokenType().fromRef(jniAccessors
+    return const jsontoken_.$JsonTokenType().fromRef(jni.Jni.accessors
         .callMethodWithArgs(
             reference, _id_nextValue, jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_nextFieldName = jniAccessors.getMethodIDOf(_classRef,
-      r"nextFieldName", r"(Lcom/fasterxml/jackson/core/SerializableString;)Z");
+  static final _id_nextFieldName = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
+      r"nextFieldName",
+      r"(Lcom/fasterxml/jackson/core/SerializableString;)Z");
 
   /// from: public boolean nextFieldName(com.fasterxml.jackson.core.SerializableString str)
   ///
@@ -892,12 +919,12 @@
   bool nextFieldName(
     jni.JObject str,
   ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_nextFieldName,
+    return jni.Jni.accessors.callMethodWithArgs(reference, _id_nextFieldName,
         jni.JniCallType.booleanType, [str.reference]).boolean;
   }
 
-  static final _id_nextFieldName1 = jniAccessors.getMethodIDOf(
-      _classRef, r"nextFieldName", r"()Ljava/lang/String;");
+  static final _id_nextFieldName1 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference, r"nextFieldName", r"()Ljava/lang/String;");
 
   /// from: public java.lang.String nextFieldName()
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -911,12 +938,12 @@
   ///   JsonParseException for decoding problems
   ///@since 2.5
   jni.JString nextFieldName1() {
-    return const jni.JStringType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JStringType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference, _id_nextFieldName1, jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_nextTextValue = jniAccessors.getMethodIDOf(
-      _classRef, r"nextTextValue", r"()Ljava/lang/String;");
+  static final _id_nextTextValue = jni.Jni.accessors.getMethodIDOf(
+      _class.reference, r"nextTextValue", r"()Ljava/lang/String;");
 
   /// from: public java.lang.String nextTextValue()
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -935,12 +962,12 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   jni.JString nextTextValue() {
-    return const jni.JStringType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JStringType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference, _id_nextTextValue, jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_nextIntValue =
-      jniAccessors.getMethodIDOf(_classRef, r"nextIntValue", r"(I)I");
+  static final _id_nextIntValue = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"nextIntValue", r"(I)I");
 
   /// from: public int nextIntValue(int defaultValue)
   ///
@@ -964,12 +991,12 @@
   int nextIntValue(
     int defaultValue,
   ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_nextIntValue,
+    return jni.Jni.accessors.callMethodWithArgs(reference, _id_nextIntValue,
         jni.JniCallType.intType, [jni.JValueInt(defaultValue)]).integer;
   }
 
-  static final _id_nextLongValue =
-      jniAccessors.getMethodIDOf(_classRef, r"nextLongValue", r"(J)J");
+  static final _id_nextLongValue = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"nextLongValue", r"(J)J");
 
   /// from: public long nextLongValue(long defaultValue)
   ///
@@ -993,12 +1020,12 @@
   int nextLongValue(
     int defaultValue,
   ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_nextLongValue,
+    return jni.Jni.accessors.callMethodWithArgs(reference, _id_nextLongValue,
         jni.JniCallType.longType, [defaultValue]).long;
   }
 
-  static final _id_nextBooleanValue = jniAccessors.getMethodIDOf(
-      _classRef, r"nextBooleanValue", r"()Ljava/lang/Boolean;");
+  static final _id_nextBooleanValue = jni.Jni.accessors.getMethodIDOf(
+      _class.reference, r"nextBooleanValue", r"()Ljava/lang/Boolean;");
 
   /// from: public java.lang.Boolean nextBooleanValue()
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -1020,14 +1047,16 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   jni.JObject nextBooleanValue() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference,
         _id_nextBooleanValue,
         jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_skipChildren = jniAccessors.getMethodIDOf(
-      _classRef, r"skipChildren", r"()Lcom/fasterxml/jackson/core/JsonParser;");
+  static final _id_skipChildren = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
+      r"skipChildren",
+      r"()Lcom/fasterxml/jackson/core/JsonParser;");
 
   /// from: public abstract com.fasterxml.jackson.core.JsonParser skipChildren()
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -1048,12 +1077,12 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   JsonParser skipChildren() {
-    return const $JsonParserType().fromRef(jniAccessors.callMethodWithArgs(
+    return const $JsonParserType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference, _id_skipChildren, jni.JniCallType.objectType, []).object);
   }
 
   static final _id_finishToken =
-      jniAccessors.getMethodIDOf(_classRef, r"finishToken", r"()V");
+      jni.Jni.accessors.getMethodIDOf(_class.reference, r"finishToken", r"()V");
 
   /// from: public void finishToken()
   ///
@@ -1071,12 +1100,14 @@
   ///   JsonParseException for decoding problems
   ///@since 2.8
   void finishToken() {
-    return jniAccessors.callMethodWithArgs(
+    return jni.Jni.accessors.callMethodWithArgs(
         reference, _id_finishToken, jni.JniCallType.voidType, []).check();
   }
 
-  static final _id_currentToken = jniAccessors.getMethodIDOf(
-      _classRef, r"currentToken", r"()Lcom/fasterxml/jackson/core/JsonToken;");
+  static final _id_currentToken = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
+      r"currentToken",
+      r"()Lcom/fasterxml/jackson/core/JsonToken;");
 
   /// from: public com.fasterxml.jackson.core.JsonToken currentToken()
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -1091,13 +1122,13 @@
   ///   if the current token has been explicitly cleared.
   ///@since 2.8
   jsontoken_.JsonToken currentToken() {
-    return const jsontoken_.$JsonTokenType().fromRef(jniAccessors
+    return const jsontoken_.$JsonTokenType().fromRef(jni.Jni.accessors
         .callMethodWithArgs(reference, _id_currentToken,
             jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_currentTokenId =
-      jniAccessors.getMethodIDOf(_classRef, r"currentTokenId", r"()I");
+  static final _id_currentTokenId = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"currentTokenId", r"()I");
 
   /// from: public int currentTokenId()
   ///
@@ -1111,12 +1142,14 @@
   ///@since 2.8
   ///@return {@code int} matching one of constants from JsonTokenId.
   int currentTokenId() {
-    return jniAccessors.callMethodWithArgs(
+    return jni.Jni.accessors.callMethodWithArgs(
         reference, _id_currentTokenId, jni.JniCallType.intType, []).integer;
   }
 
-  static final _id_getCurrentToken = jniAccessors.getMethodIDOf(_classRef,
-      r"getCurrentToken", r"()Lcom/fasterxml/jackson/core/JsonToken;");
+  static final _id_getCurrentToken = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
+      r"getCurrentToken",
+      r"()Lcom/fasterxml/jackson/core/JsonToken;");
 
   /// from: public abstract com.fasterxml.jackson.core.JsonToken getCurrentToken()
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -1126,13 +1159,13 @@
   ///@return Type of the token this parser currently points to,
   ///   if any: null before any tokens have been read, and
   jsontoken_.JsonToken getCurrentToken() {
-    return const jsontoken_.$JsonTokenType().fromRef(jniAccessors
+    return const jsontoken_.$JsonTokenType().fromRef(jni.Jni.accessors
         .callMethodWithArgs(reference, _id_getCurrentToken,
             jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_getCurrentTokenId =
-      jniAccessors.getMethodIDOf(_classRef, r"getCurrentTokenId", r"()I");
+  static final _id_getCurrentTokenId = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"getCurrentTokenId", r"()I");
 
   /// from: public abstract int getCurrentTokenId()
   ///
@@ -1140,12 +1173,12 @@
   ///@return {@code int} matching one of constants from JsonTokenId.
   ///@deprecated Since 2.12 use \#currentTokenId instead
   int getCurrentTokenId() {
-    return jniAccessors.callMethodWithArgs(
+    return jni.Jni.accessors.callMethodWithArgs(
         reference, _id_getCurrentTokenId, jni.JniCallType.intType, []).integer;
   }
 
-  static final _id_hasCurrentToken =
-      jniAccessors.getMethodIDOf(_classRef, r"hasCurrentToken", r"()Z");
+  static final _id_hasCurrentToken = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"hasCurrentToken", r"()Z");
 
   /// from: public abstract boolean hasCurrentToken()
   ///
@@ -1158,12 +1191,12 @@
   ///   and returned null from \#nextToken, or the token
   ///   has been consumed)
   bool hasCurrentToken() {
-    return jniAccessors.callMethodWithArgs(reference, _id_hasCurrentToken,
+    return jni.Jni.accessors.callMethodWithArgs(reference, _id_hasCurrentToken,
         jni.JniCallType.booleanType, []).boolean;
   }
 
   static final _id_hasTokenId =
-      jniAccessors.getMethodIDOf(_classRef, r"hasTokenId", r"(I)Z");
+      jni.Jni.accessors.getMethodIDOf(_class.reference, r"hasTokenId", r"(I)Z");
 
   /// from: public abstract boolean hasTokenId(int id)
   ///
@@ -1182,12 +1215,12 @@
   bool hasTokenId(
     int id,
   ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_hasTokenId,
+    return jni.Jni.accessors.callMethodWithArgs(reference, _id_hasTokenId,
         jni.JniCallType.booleanType, [jni.JValueInt(id)]).boolean;
   }
 
-  static final _id_hasToken = jniAccessors.getMethodIDOf(
-      _classRef, r"hasToken", r"(Lcom/fasterxml/jackson/core/JsonToken;)Z");
+  static final _id_hasToken = jni.Jni.accessors.getMethodIDOf(_class.reference,
+      r"hasToken", r"(Lcom/fasterxml/jackson/core/JsonToken;)Z");
 
   /// from: public abstract boolean hasToken(com.fasterxml.jackson.core.JsonToken t)
   ///
@@ -1206,12 +1239,12 @@
   bool hasToken(
     jsontoken_.JsonToken t,
   ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_hasToken,
+    return jni.Jni.accessors.callMethodWithArgs(reference, _id_hasToken,
         jni.JniCallType.booleanType, [t.reference]).boolean;
   }
 
-  static final _id_isExpectedStartArrayToken = jniAccessors.getMethodIDOf(
-      _classRef, r"isExpectedStartArrayToken", r"()Z");
+  static final _id_isExpectedStartArrayToken = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"isExpectedStartArrayToken", r"()Z");
 
   /// from: public boolean isExpectedStartArrayToken()
   ///
@@ -1232,12 +1265,12 @@
   ///   start-array marker (such JsonToken\#START_ARRAY);
   ///   {@code false} if not
   bool isExpectedStartArrayToken() {
-    return jniAccessors.callMethodWithArgs(reference,
+    return jni.Jni.accessors.callMethodWithArgs(reference,
         _id_isExpectedStartArrayToken, jni.JniCallType.booleanType, []).boolean;
   }
 
-  static final _id_isExpectedStartObjectToken = jniAccessors.getMethodIDOf(
-      _classRef, r"isExpectedStartObjectToken", r"()Z");
+  static final _id_isExpectedStartObjectToken = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"isExpectedStartObjectToken", r"()Z");
 
   /// from: public boolean isExpectedStartObjectToken()
   ///
@@ -1248,14 +1281,14 @@
   ///   {@code false} if not
   ///@since 2.5
   bool isExpectedStartObjectToken() {
-    return jniAccessors.callMethodWithArgs(
+    return jni.Jni.accessors.callMethodWithArgs(
         reference,
         _id_isExpectedStartObjectToken,
         jni.JniCallType.booleanType, []).boolean;
   }
 
-  static final _id_isExpectedNumberIntToken = jniAccessors.getMethodIDOf(
-      _classRef, r"isExpectedNumberIntToken", r"()Z");
+  static final _id_isExpectedNumberIntToken = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"isExpectedNumberIntToken", r"()Z");
 
   /// from: public boolean isExpectedNumberIntToken()
   ///
@@ -1269,12 +1302,12 @@
   ///   {@code false} if not
   ///@since 2.12
   bool isExpectedNumberIntToken() {
-    return jniAccessors.callMethodWithArgs(reference,
+    return jni.Jni.accessors.callMethodWithArgs(reference,
         _id_isExpectedNumberIntToken, jni.JniCallType.booleanType, []).boolean;
   }
 
   static final _id_isNaN =
-      jniAccessors.getMethodIDOf(_classRef, r"isNaN", r"()Z");
+      jni.Jni.accessors.getMethodIDOf(_class.reference, r"isNaN", r"()Z");
 
   /// from: public boolean isNaN()
   ///
@@ -1291,12 +1324,12 @@
   ///   JsonParseException for decoding problems
   ///@since 2.9
   bool isNaN() {
-    return jniAccessors.callMethodWithArgs(
+    return jni.Jni.accessors.callMethodWithArgs(
         reference, _id_isNaN, jni.JniCallType.booleanType, []).boolean;
   }
 
-  static final _id_clearCurrentToken =
-      jniAccessors.getMethodIDOf(_classRef, r"clearCurrentToken", r"()V");
+  static final _id_clearCurrentToken = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"clearCurrentToken", r"()V");
 
   /// from: public abstract void clearCurrentToken()
   ///
@@ -1311,12 +1344,14 @@
   /// it has to be able to consume last token used for binding (so that
   /// it will not be used again).
   void clearCurrentToken() {
-    return jniAccessors.callMethodWithArgs(
+    return jni.Jni.accessors.callMethodWithArgs(
         reference, _id_clearCurrentToken, jni.JniCallType.voidType, []).check();
   }
 
-  static final _id_getLastClearedToken = jniAccessors.getMethodIDOf(_classRef,
-      r"getLastClearedToken", r"()Lcom/fasterxml/jackson/core/JsonToken;");
+  static final _id_getLastClearedToken = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
+      r"getLastClearedToken",
+      r"()Lcom/fasterxml/jackson/core/JsonToken;");
 
   /// from: public abstract com.fasterxml.jackson.core.JsonToken getLastClearedToken()
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -1328,13 +1363,13 @@
   /// or if parser has been closed.
   ///@return Last cleared token, if any; {@code null} otherwise
   jsontoken_.JsonToken getLastClearedToken() {
-    return const jsontoken_.$JsonTokenType().fromRef(jniAccessors
+    return const jsontoken_.$JsonTokenType().fromRef(jni.Jni.accessors
         .callMethodWithArgs(reference, _id_getLastClearedToken,
             jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_overrideCurrentName = jniAccessors.getMethodIDOf(
-      _classRef, r"overrideCurrentName", r"(Ljava/lang/String;)V");
+  static final _id_overrideCurrentName = jni.Jni.accessors.getMethodIDOf(
+      _class.reference, r"overrideCurrentName", r"(Ljava/lang/String;)V");
 
   /// from: public abstract void overrideCurrentName(java.lang.String name)
   ///
@@ -1349,12 +1384,15 @@
   void overrideCurrentName(
     jni.JString name,
   ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_overrideCurrentName,
-        jni.JniCallType.voidType, [name.reference]).check();
+    return jni.Jni.accessors.callMethodWithArgs(
+        reference,
+        _id_overrideCurrentName,
+        jni.JniCallType.voidType,
+        [name.reference]).check();
   }
 
-  static final _id_getCurrentName = jniAccessors.getMethodIDOf(
-      _classRef, r"getCurrentName", r"()Ljava/lang/String;");
+  static final _id_getCurrentName = jni.Jni.accessors.getMethodIDOf(
+      _class.reference, r"getCurrentName", r"()Ljava/lang/String;");
 
   /// from: public abstract java.lang.String getCurrentName()
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -1364,12 +1402,12 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   jni.JString getCurrentName() {
-    return const jni.JStringType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JStringType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference, _id_getCurrentName, jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_currentName = jniAccessors.getMethodIDOf(
-      _classRef, r"currentName", r"()Ljava/lang/String;");
+  static final _id_currentName = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"currentName", r"()Ljava/lang/String;");
 
   /// from: public java.lang.String currentName()
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -1384,12 +1422,12 @@
   ///   JsonParseException for decoding problems
   ///@since 2.10
   jni.JString currentName() {
-    return const jni.JStringType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JStringType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference, _id_currentName, jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_getText = jniAccessors.getMethodIDOf(
-      _classRef, r"getText", r"()Ljava/lang/String;");
+  static final _id_getText = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"getText", r"()Ljava/lang/String;");
 
   /// from: public abstract java.lang.String getText()
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -1403,12 +1441,12 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   jni.JString getText() {
-    return const jni.JStringType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JStringType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference, _id_getText, jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_getText1 =
-      jniAccessors.getMethodIDOf(_classRef, r"getText", r"(Ljava/io/Writer;)I");
+  static final _id_getText1 = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"getText", r"(Ljava/io/Writer;)I");
 
   /// from: public int getText(java.io.Writer writer)
   ///
@@ -1430,12 +1468,12 @@
   int getText1(
     jni.JObject writer,
   ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_getText1,
+    return jni.Jni.accessors.callMethodWithArgs(reference, _id_getText1,
         jni.JniCallType.intType, [writer.reference]).integer;
   }
 
-  static final _id_getTextCharacters =
-      jniAccessors.getMethodIDOf(_classRef, r"getTextCharacters", r"()[C");
+  static final _id_getTextCharacters = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"getTextCharacters", r"()[C");
 
   /// from: public abstract char[] getTextCharacters()
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -1467,14 +1505,14 @@
   ///    at offset 0, and not necessarily until the end of buffer)
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
-  jni.JArray<jni.JChar> getTextCharacters() {
-    return const jni.JArrayType(jni.JCharType()).fromRef(jniAccessors
+  jni.JArray<jni.jchar> getTextCharacters() {
+    return const jni.JArrayType(jni.jcharType()).fromRef(jni.Jni.accessors
         .callMethodWithArgs(reference, _id_getTextCharacters,
             jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_getTextLength =
-      jniAccessors.getMethodIDOf(_classRef, r"getTextLength", r"()I");
+  static final _id_getTextLength = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"getTextLength", r"()I");
 
   /// from: public abstract int getTextLength()
   ///
@@ -1486,12 +1524,12 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   int getTextLength() {
-    return jniAccessors.callMethodWithArgs(
+    return jni.Jni.accessors.callMethodWithArgs(
         reference, _id_getTextLength, jni.JniCallType.intType, []).integer;
   }
 
-  static final _id_getTextOffset =
-      jniAccessors.getMethodIDOf(_classRef, r"getTextOffset", r"()I");
+  static final _id_getTextOffset = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"getTextOffset", r"()I");
 
   /// from: public abstract int getTextOffset()
   ///
@@ -1503,12 +1541,12 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   int getTextOffset() {
-    return jniAccessors.callMethodWithArgs(
+    return jni.Jni.accessors.callMethodWithArgs(
         reference, _id_getTextOffset, jni.JniCallType.intType, []).integer;
   }
 
-  static final _id_hasTextCharacters =
-      jniAccessors.getMethodIDOf(_classRef, r"hasTextCharacters", r"()Z");
+  static final _id_hasTextCharacters = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"hasTextCharacters", r"()Z");
 
   /// from: public abstract boolean hasTextCharacters()
   ///
@@ -1527,12 +1565,12 @@
   ///   be efficiently returned via \#getTextCharacters; false
   ///   means that it may or may not exist
   bool hasTextCharacters() {
-    return jniAccessors.callMethodWithArgs(reference, _id_hasTextCharacters,
-        jni.JniCallType.booleanType, []).boolean;
+    return jni.Jni.accessors.callMethodWithArgs(reference,
+        _id_hasTextCharacters, jni.JniCallType.booleanType, []).boolean;
   }
 
-  static final _id_getNumberValue = jniAccessors.getMethodIDOf(
-      _classRef, r"getNumberValue", r"()Ljava/lang/Number;");
+  static final _id_getNumberValue = jni.Jni.accessors.getMethodIDOf(
+      _class.reference, r"getNumberValue", r"()Ljava/lang/Number;");
 
   /// from: public abstract java.lang.Number getNumberValue()
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -1548,12 +1586,12 @@
   ///    (invalid format for numbers); plain IOException if underlying
   ///    content read fails (possible if values are extracted lazily)
   jni.JObject getNumberValue() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference, _id_getNumberValue, jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_getNumberValueExact = jniAccessors.getMethodIDOf(
-      _classRef, r"getNumberValueExact", r"()Ljava/lang/Number;");
+  static final _id_getNumberValueExact = jni.Jni.accessors.getMethodIDOf(
+      _class.reference, r"getNumberValueExact", r"()Ljava/lang/Number;");
 
   /// from: public java.lang.Number getNumberValueExact()
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -1573,14 +1611,14 @@
   ///    content read fails (possible if values are extracted lazily)
   ///@since 2.12
   jni.JObject getNumberValueExact() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference,
         _id_getNumberValueExact,
         jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_getNumberType = jniAccessors.getMethodIDOf(
-      _classRef,
+  static final _id_getNumberType = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
       r"getNumberType",
       r"()Lcom/fasterxml/jackson/core/JsonParser$NumberType;");
 
@@ -1595,13 +1633,13 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   JsonParser_NumberType getNumberType() {
-    return const $JsonParser_NumberTypeType().fromRef(jniAccessors
+    return const $JsonParser_NumberTypeType().fromRef(jni.Jni.accessors
         .callMethodWithArgs(reference, _id_getNumberType,
             jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_getByteValue =
-      jniAccessors.getMethodIDOf(_classRef, r"getByteValue", r"()B");
+  static final _id_getByteValue = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"getByteValue", r"()B");
 
   /// from: public byte getByteValue()
   ///
@@ -1627,12 +1665,12 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   int getByteValue() {
-    return jniAccessors.callMethodWithArgs(
+    return jni.Jni.accessors.callMethodWithArgs(
         reference, _id_getByteValue, jni.JniCallType.byteType, []).byte;
   }
 
-  static final _id_getShortValue =
-      jniAccessors.getMethodIDOf(_classRef, r"getShortValue", r"()S");
+  static final _id_getShortValue = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"getShortValue", r"()S");
 
   /// from: public short getShortValue()
   ///
@@ -1652,12 +1690,12 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   int getShortValue() {
-    return jniAccessors.callMethodWithArgs(
+    return jni.Jni.accessors.callMethodWithArgs(
         reference, _id_getShortValue, jni.JniCallType.shortType, []).short;
   }
 
   static final _id_getIntValue =
-      jniAccessors.getMethodIDOf(_classRef, r"getIntValue", r"()I");
+      jni.Jni.accessors.getMethodIDOf(_class.reference, r"getIntValue", r"()I");
 
   /// from: public abstract int getIntValue()
   ///
@@ -1677,12 +1715,12 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   int getIntValue() {
-    return jniAccessors.callMethodWithArgs(
+    return jni.Jni.accessors.callMethodWithArgs(
         reference, _id_getIntValue, jni.JniCallType.intType, []).integer;
   }
 
-  static final _id_getLongValue =
-      jniAccessors.getMethodIDOf(_classRef, r"getLongValue", r"()J");
+  static final _id_getLongValue = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"getLongValue", r"()J");
 
   /// from: public abstract long getLongValue()
   ///
@@ -1702,12 +1740,12 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   int getLongValue() {
-    return jniAccessors.callMethodWithArgs(
+    return jni.Jni.accessors.callMethodWithArgs(
         reference, _id_getLongValue, jni.JniCallType.longType, []).long;
   }
 
-  static final _id_getBigIntegerValue = jniAccessors.getMethodIDOf(
-      _classRef, r"getBigIntegerValue", r"()Ljava/math/BigInteger;");
+  static final _id_getBigIntegerValue = jni.Jni.accessors.getMethodIDOf(
+      _class.reference, r"getBigIntegerValue", r"()Ljava/math/BigInteger;");
 
   /// from: public abstract java.math.BigInteger getBigIntegerValue()
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -1724,14 +1762,14 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   jni.JObject getBigIntegerValue() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference,
         _id_getBigIntegerValue,
         jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_getFloatValue =
-      jniAccessors.getMethodIDOf(_classRef, r"getFloatValue", r"()F");
+  static final _id_getFloatValue = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"getFloatValue", r"()F");
 
   /// from: public abstract float getFloatValue()
   ///
@@ -1751,12 +1789,12 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   double getFloatValue() {
-    return jniAccessors.callMethodWithArgs(
+    return jni.Jni.accessors.callMethodWithArgs(
         reference, _id_getFloatValue, jni.JniCallType.floatType, []).float;
   }
 
-  static final _id_getDoubleValue =
-      jniAccessors.getMethodIDOf(_classRef, r"getDoubleValue", r"()D");
+  static final _id_getDoubleValue = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"getDoubleValue", r"()D");
 
   /// from: public abstract double getDoubleValue()
   ///
@@ -1776,12 +1814,12 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   double getDoubleValue() {
-    return jniAccessors.callMethodWithArgs(reference, _id_getDoubleValue,
+    return jni.Jni.accessors.callMethodWithArgs(reference, _id_getDoubleValue,
         jni.JniCallType.doubleType, []).doubleFloat;
   }
 
-  static final _id_getDecimalValue = jniAccessors.getMethodIDOf(
-      _classRef, r"getDecimalValue", r"()Ljava/math/BigDecimal;");
+  static final _id_getDecimalValue = jni.Jni.accessors.getMethodIDOf(
+      _class.reference, r"getDecimalValue", r"()Ljava/math/BigDecimal;");
 
   /// from: public abstract java.math.BigDecimal getDecimalValue()
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -1795,12 +1833,12 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   jni.JObject getDecimalValue() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference, _id_getDecimalValue, jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_getBooleanValue =
-      jniAccessors.getMethodIDOf(_classRef, r"getBooleanValue", r"()Z");
+  static final _id_getBooleanValue = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"getBooleanValue", r"()Z");
 
   /// from: public boolean getBooleanValue()
   ///
@@ -1816,12 +1854,12 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   bool getBooleanValue() {
-    return jniAccessors.callMethodWithArgs(reference, _id_getBooleanValue,
+    return jni.Jni.accessors.callMethodWithArgs(reference, _id_getBooleanValue,
         jni.JniCallType.booleanType, []).boolean;
   }
 
-  static final _id_getEmbeddedObject = jniAccessors.getMethodIDOf(
-      _classRef, r"getEmbeddedObject", r"()Ljava/lang/Object;");
+  static final _id_getEmbeddedObject = jni.Jni.accessors.getMethodIDOf(
+      _class.reference, r"getEmbeddedObject", r"()Ljava/lang/Object;");
 
   /// from: public java.lang.Object getEmbeddedObject()
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -1841,14 +1879,16 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   jni.JObject getEmbeddedObject() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference,
         _id_getEmbeddedObject,
         jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_getBinaryValue = jniAccessors.getMethodIDOf(_classRef,
-      r"getBinaryValue", r"(Lcom/fasterxml/jackson/core/Base64Variant;)[B");
+  static final _id_getBinaryValue = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
+      r"getBinaryValue",
+      r"(Lcom/fasterxml/jackson/core/Base64Variant;)[B");
 
   /// from: public abstract byte[] getBinaryValue(com.fasterxml.jackson.core.Base64Variant bv)
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -1873,16 +1913,16 @@
   ///@return Decoded binary data
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
-  jni.JArray<jni.JByte> getBinaryValue(
+  jni.JArray<jni.jbyte> getBinaryValue(
     jni.JObject bv,
   ) {
-    return const jni.JArrayType(jni.JByteType()).fromRef(jniAccessors
+    return const jni.JArrayType(jni.jbyteType()).fromRef(jni.Jni.accessors
         .callMethodWithArgs(reference, _id_getBinaryValue,
             jni.JniCallType.objectType, [bv.reference]).object);
   }
 
-  static final _id_getBinaryValue1 =
-      jniAccessors.getMethodIDOf(_classRef, r"getBinaryValue", r"()[B");
+  static final _id_getBinaryValue1 = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"getBinaryValue", r"()[B");
 
   /// from: public byte[] getBinaryValue()
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -1893,14 +1933,14 @@
   ///@return Decoded binary data
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
-  jni.JArray<jni.JByte> getBinaryValue1() {
-    return const jni.JArrayType(jni.JByteType()).fromRef(jniAccessors
+  jni.JArray<jni.jbyte> getBinaryValue1() {
+    return const jni.JArrayType(jni.jbyteType()).fromRef(jni.Jni.accessors
         .callMethodWithArgs(reference, _id_getBinaryValue1,
             jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_readBinaryValue = jniAccessors.getMethodIDOf(
-      _classRef, r"readBinaryValue", r"(Ljava/io/OutputStream;)I");
+  static final _id_readBinaryValue = jni.Jni.accessors.getMethodIDOf(
+      _class.reference, r"readBinaryValue", r"(Ljava/io/OutputStream;)I");
 
   /// from: public int readBinaryValue(java.io.OutputStream out)
   ///
@@ -1918,12 +1958,12 @@
   int readBinaryValue(
     jni.JObject out,
   ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_readBinaryValue,
+    return jni.Jni.accessors.callMethodWithArgs(reference, _id_readBinaryValue,
         jni.JniCallType.intType, [out.reference]).integer;
   }
 
-  static final _id_readBinaryValue1 = jniAccessors.getMethodIDOf(
-      _classRef,
+  static final _id_readBinaryValue1 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
       r"readBinaryValue",
       r"(Lcom/fasterxml/jackson/core/Base64Variant;Ljava/io/OutputStream;)I");
 
@@ -1941,12 +1981,12 @@
     jni.JObject bv,
     jni.JObject out,
   ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_readBinaryValue1,
+    return jni.Jni.accessors.callMethodWithArgs(reference, _id_readBinaryValue1,
         jni.JniCallType.intType, [bv.reference, out.reference]).integer;
   }
 
-  static final _id_getValueAsInt =
-      jniAccessors.getMethodIDOf(_classRef, r"getValueAsInt", r"()I");
+  static final _id_getValueAsInt = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"getValueAsInt", r"()I");
 
   /// from: public int getValueAsInt()
   ///
@@ -1964,12 +2004,12 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   int getValueAsInt() {
-    return jniAccessors.callMethodWithArgs(
+    return jni.Jni.accessors.callMethodWithArgs(
         reference, _id_getValueAsInt, jni.JniCallType.intType, []).integer;
   }
 
-  static final _id_getValueAsInt1 =
-      jniAccessors.getMethodIDOf(_classRef, r"getValueAsInt", r"(I)I");
+  static final _id_getValueAsInt1 = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"getValueAsInt", r"(I)I");
 
   /// from: public int getValueAsInt(int def)
   ///
@@ -1989,12 +2029,12 @@
   int getValueAsInt1(
     int def,
   ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_getValueAsInt1,
+    return jni.Jni.accessors.callMethodWithArgs(reference, _id_getValueAsInt1,
         jni.JniCallType.intType, [jni.JValueInt(def)]).integer;
   }
 
-  static final _id_getValueAsLong =
-      jniAccessors.getMethodIDOf(_classRef, r"getValueAsLong", r"()J");
+  static final _id_getValueAsLong = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"getValueAsLong", r"()J");
 
   /// from: public long getValueAsLong()
   ///
@@ -2012,12 +2052,12 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   int getValueAsLong() {
-    return jniAccessors.callMethodWithArgs(
+    return jni.Jni.accessors.callMethodWithArgs(
         reference, _id_getValueAsLong, jni.JniCallType.longType, []).long;
   }
 
-  static final _id_getValueAsLong1 =
-      jniAccessors.getMethodIDOf(_classRef, r"getValueAsLong", r"(J)J");
+  static final _id_getValueAsLong1 = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"getValueAsLong", r"(J)J");
 
   /// from: public long getValueAsLong(long def)
   ///
@@ -2037,12 +2077,12 @@
   int getValueAsLong1(
     int def,
   ) {
-    return jniAccessors.callMethodWithArgs(
+    return jni.Jni.accessors.callMethodWithArgs(
         reference, _id_getValueAsLong1, jni.JniCallType.longType, [def]).long;
   }
 
-  static final _id_getValueAsDouble =
-      jniAccessors.getMethodIDOf(_classRef, r"getValueAsDouble", r"()D");
+  static final _id_getValueAsDouble = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"getValueAsDouble", r"()D");
 
   /// from: public double getValueAsDouble()
   ///
@@ -2060,12 +2100,12 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   double getValueAsDouble() {
-    return jniAccessors.callMethodWithArgs(reference, _id_getValueAsDouble,
+    return jni.Jni.accessors.callMethodWithArgs(reference, _id_getValueAsDouble,
         jni.JniCallType.doubleType, []).doubleFloat;
   }
 
-  static final _id_getValueAsDouble1 =
-      jniAccessors.getMethodIDOf(_classRef, r"getValueAsDouble", r"(D)D");
+  static final _id_getValueAsDouble1 = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"getValueAsDouble", r"(D)D");
 
   /// from: public double getValueAsDouble(double def)
   ///
@@ -2085,12 +2125,12 @@
   double getValueAsDouble1(
     double def,
   ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_getValueAsDouble1,
-        jni.JniCallType.doubleType, [def]).doubleFloat;
+    return jni.Jni.accessors.callMethodWithArgs(reference,
+        _id_getValueAsDouble1, jni.JniCallType.doubleType, [def]).doubleFloat;
   }
 
-  static final _id_getValueAsBoolean =
-      jniAccessors.getMethodIDOf(_classRef, r"getValueAsBoolean", r"()Z");
+  static final _id_getValueAsBoolean = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"getValueAsBoolean", r"()Z");
 
   /// from: public boolean getValueAsBoolean()
   ///
@@ -2108,12 +2148,12 @@
   ///@throws IOException for low-level read issues, or
   ///   JsonParseException for decoding problems
   bool getValueAsBoolean() {
-    return jniAccessors.callMethodWithArgs(reference, _id_getValueAsBoolean,
-        jni.JniCallType.booleanType, []).boolean;
+    return jni.Jni.accessors.callMethodWithArgs(reference,
+        _id_getValueAsBoolean, jni.JniCallType.booleanType, []).boolean;
   }
 
-  static final _id_getValueAsBoolean1 =
-      jniAccessors.getMethodIDOf(_classRef, r"getValueAsBoolean", r"(Z)Z");
+  static final _id_getValueAsBoolean1 = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"getValueAsBoolean", r"(Z)Z");
 
   /// from: public boolean getValueAsBoolean(boolean def)
   ///
@@ -2133,12 +2173,15 @@
   bool getValueAsBoolean1(
     bool def,
   ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_getValueAsBoolean1,
-        jni.JniCallType.booleanType, [def ? 1 : 0]).boolean;
+    return jni.Jni.accessors.callMethodWithArgs(
+        reference,
+        _id_getValueAsBoolean1,
+        jni.JniCallType.booleanType,
+        [def ? 1 : 0]).boolean;
   }
 
-  static final _id_getValueAsString = jniAccessors.getMethodIDOf(
-      _classRef, r"getValueAsString", r"()Ljava/lang/String;");
+  static final _id_getValueAsString = jni.Jni.accessors.getMethodIDOf(
+      _class.reference, r"getValueAsString", r"()Ljava/lang/String;");
 
   /// from: public java.lang.String getValueAsString()
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -2155,14 +2198,16 @@
   ///   JsonParseException for decoding problems
   ///@since 2.1
   jni.JString getValueAsString() {
-    return const jni.JStringType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JStringType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference,
         _id_getValueAsString,
         jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_getValueAsString1 = jniAccessors.getMethodIDOf(_classRef,
-      r"getValueAsString", r"(Ljava/lang/String;)Ljava/lang/String;");
+  static final _id_getValueAsString1 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
+      r"getValueAsString",
+      r"(Ljava/lang/String;)Ljava/lang/String;");
 
   /// from: public abstract java.lang.String getValueAsString(java.lang.String def)
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -2182,15 +2227,15 @@
   jni.JString getValueAsString1(
     jni.JString def,
   ) {
-    return const jni.JStringType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JStringType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference,
         _id_getValueAsString1,
         jni.JniCallType.objectType,
         [def.reference]).object);
   }
 
-  static final _id_canReadObjectId =
-      jniAccessors.getMethodIDOf(_classRef, r"canReadObjectId", r"()Z");
+  static final _id_canReadObjectId = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"canReadObjectId", r"()Z");
 
   /// from: public boolean canReadObjectId()
   ///
@@ -2206,12 +2251,12 @@
   ///    {@code false} if not
   ///@since 2.3
   bool canReadObjectId() {
-    return jniAccessors.callMethodWithArgs(reference, _id_canReadObjectId,
+    return jni.Jni.accessors.callMethodWithArgs(reference, _id_canReadObjectId,
         jni.JniCallType.booleanType, []).boolean;
   }
 
-  static final _id_canReadTypeId =
-      jniAccessors.getMethodIDOf(_classRef, r"canReadTypeId", r"()Z");
+  static final _id_canReadTypeId = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"canReadTypeId", r"()Z");
 
   /// from: public boolean canReadTypeId()
   ///
@@ -2227,12 +2272,12 @@
   ///    {@code false} if not
   ///@since 2.3
   bool canReadTypeId() {
-    return jniAccessors.callMethodWithArgs(
+    return jni.Jni.accessors.callMethodWithArgs(
         reference, _id_canReadTypeId, jni.JniCallType.booleanType, []).boolean;
   }
 
-  static final _id_getObjectId = jniAccessors.getMethodIDOf(
-      _classRef, r"getObjectId", r"()Ljava/lang/Object;");
+  static final _id_getObjectId = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"getObjectId", r"()Ljava/lang/Object;");
 
   /// from: public java.lang.Object getObjectId()
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -2251,12 +2296,12 @@
   ///   JsonParseException for decoding problems
   ///@since 2.3
   jni.JObject getObjectId() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference, _id_getObjectId, jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_getTypeId = jniAccessors.getMethodIDOf(
-      _classRef, r"getTypeId", r"()Ljava/lang/Object;");
+  static final _id_getTypeId = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"getTypeId", r"()Ljava/lang/Object;");
 
   /// from: public java.lang.Object getTypeId()
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -2275,12 +2320,14 @@
   ///   JsonParseException for decoding problems
   ///@since 2.3
   jni.JObject getTypeId() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference, _id_getTypeId, jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_readValueAs = jniAccessors.getMethodIDOf(
-      _classRef, r"readValueAs", r"(Ljava/lang/Class;)Ljava/lang/Object;");
+  static final _id_readValueAs = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
+      r"readValueAs",
+      r"(Ljava/lang/Class;)Ljava/lang/Object;");
 
   /// from: public T readValueAs(java.lang.Class<T> valueType)
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -2314,12 +2361,15 @@
     jni.JObject valueType, {
     required jni.JObjType<$T> T,
   }) {
-    return T.fromRef(jniAccessors.callMethodWithArgs(reference, _id_readValueAs,
-        jni.JniCallType.objectType, [valueType.reference]).object);
+    return T.fromRef(jni.Jni.accessors.callMethodWithArgs(
+        reference,
+        _id_readValueAs,
+        jni.JniCallType.objectType,
+        [valueType.reference]).object);
   }
 
-  static final _id_readValueAs1 = jniAccessors.getMethodIDOf(
-      _classRef,
+  static final _id_readValueAs1 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
       r"readValueAs",
       r"(Lcom/fasterxml/jackson/core/type/TypeReference;)Ljava/lang/Object;");
 
@@ -2352,15 +2402,17 @@
     jni.JObject valueTypeRef, {
     required jni.JObjType<$T> T,
   }) {
-    return T.fromRef(jniAccessors.callMethodWithArgs(
+    return T.fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference,
         _id_readValueAs1,
         jni.JniCallType.objectType,
         [valueTypeRef.reference]).object);
   }
 
-  static final _id_readValuesAs = jniAccessors.getMethodIDOf(
-      _classRef, r"readValuesAs", r"(Ljava/lang/Class;)Ljava/util/Iterator;");
+  static final _id_readValuesAs = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
+      r"readValuesAs",
+      r"(Ljava/lang/Class;)Ljava/util/Iterator;");
 
   /// from: public java.util.Iterator<T> readValuesAs(java.lang.Class<T> valueType)
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -2377,15 +2429,15 @@
     jni.JObject valueType, {
     required jni.JObjType<$T> T,
   }) {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference,
         _id_readValuesAs,
         jni.JniCallType.objectType,
         [valueType.reference]).object);
   }
 
-  static final _id_readValuesAs1 = jniAccessors.getMethodIDOf(
-      _classRef,
+  static final _id_readValuesAs1 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
       r"readValuesAs",
       r"(Lcom/fasterxml/jackson/core/type/TypeReference;)Ljava/util/Iterator;");
 
@@ -2404,15 +2456,15 @@
     jni.JObject valueTypeRef, {
     required jni.JObjType<$T> T,
   }) {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference,
         _id_readValuesAs1,
         jni.JniCallType.objectType,
         [valueTypeRef.reference]).object);
   }
 
-  static final _id_readValueAsTree = jniAccessors.getMethodIDOf(
-      _classRef, r"readValueAsTree", r"()Ljava/lang/Object;");
+  static final _id_readValueAsTree = jni.Jni.accessors.getMethodIDOf(
+      _class.reference, r"readValueAsTree", r"()Ljava/lang/Object;");
 
   /// from: public T readValueAsTree()
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -2429,7 +2481,7 @@
   $T readValueAsTree<$T extends jni.JObject>({
     required jni.JObjType<$T> T,
   }) {
-    return T.fromRef(jniAccessors.callMethodWithArgs(
+    return T.fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference, _id_readValueAsTree, jni.JniCallType.objectType, []).object);
   }
 }
@@ -2454,7 +2506,7 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $JsonParserType && other is $JsonParserType;
+    return other.runtimeType == ($JsonParserType) && other is $JsonParserType;
   }
 }
 
@@ -2463,30 +2515,32 @@
 /// Enumeration that defines all on/off features for parsers.
 class JsonParser_Feature extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<JsonParser_Feature> $type = type;
 
   JsonParser_Feature.fromRef(
     jni.JObjectPtr ref,
   ) : super.fromRef(ref);
 
-  static final _classRef =
-      jniAccessors.getClassOf(r"com/fasterxml/jackson/core/JsonParser$Feature");
+  static final _class =
+      jni.Jni.findJClass(r"com/fasterxml/jackson/core/JsonParser$Feature");
 
   /// The type which includes information such as the signature of this class.
   static const type = $JsonParser_FeatureType();
-  static final _id_values = jniAccessors.getStaticMethodIDOf(_classRef,
-      r"values", r"()[Lcom/fasterxml/jackson/core/JsonParser$Feature;");
+  static final _id_values = jni.Jni.accessors.getStaticMethodIDOf(
+      _class.reference,
+      r"values",
+      r"()[Lcom/fasterxml/jackson/core/JsonParser$Feature;");
 
   /// from: static public com.fasterxml.jackson.core.JsonParser.Feature[] values()
   /// The returned object must be deleted after use, by calling the `delete` method.
   static jni.JArray<JsonParser_Feature> values() {
-    return const jni.JArrayType($JsonParser_FeatureType()).fromRef(jniAccessors
-        .callStaticMethodWithArgs(
-            _classRef, _id_values, jni.JniCallType.objectType, []).object);
+    return const jni.JArrayType($JsonParser_FeatureType()).fromRef(
+        jni.Jni.accessors.callStaticMethodWithArgs(_class.reference, _id_values,
+            jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_valueOf = jniAccessors.getStaticMethodIDOf(
-      _classRef,
+  static final _id_valueOf = jni.Jni.accessors.getStaticMethodIDOf(
+      _class.reference,
       r"valueOf",
       r"(Ljava/lang/String;)Lcom/fasterxml/jackson/core/JsonParser$Feature;");
 
@@ -2495,13 +2549,13 @@
   static JsonParser_Feature valueOf(
     jni.JString name,
   ) {
-    return const $JsonParser_FeatureType().fromRef(jniAccessors
-        .callStaticMethodWithArgs(_classRef, _id_valueOf,
+    return const $JsonParser_FeatureType().fromRef(jni.Jni.accessors
+        .callStaticMethodWithArgs(_class.reference, _id_valueOf,
             jni.JniCallType.objectType, [name.reference]).object);
   }
 
-  static final _id_collectDefaults =
-      jniAccessors.getStaticMethodIDOf(_classRef, r"collectDefaults", r"()I");
+  static final _id_collectDefaults = jni.Jni.accessors
+      .getStaticMethodIDOf(_class.reference, r"collectDefaults", r"()I");
 
   /// from: static public int collectDefaults()
   ///
@@ -2509,36 +2563,36 @@
   /// are enabled by default.
   ///@return Bit mask of all features that are enabled by default
   static int collectDefaults() {
-    return jniAccessors.callStaticMethodWithArgs(
-        _classRef, _id_collectDefaults, jni.JniCallType.intType, []).integer;
+    return jni.Jni.accessors.callStaticMethodWithArgs(_class.reference,
+        _id_collectDefaults, jni.JniCallType.intType, []).integer;
   }
 
-  static final _id_enabledByDefault =
-      jniAccessors.getMethodIDOf(_classRef, r"enabledByDefault", r"()Z");
+  static final _id_enabledByDefault = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"enabledByDefault", r"()Z");
 
   /// from: public boolean enabledByDefault()
   bool enabledByDefault() {
-    return jniAccessors.callMethodWithArgs(reference, _id_enabledByDefault,
+    return jni.Jni.accessors.callMethodWithArgs(reference, _id_enabledByDefault,
         jni.JniCallType.booleanType, []).boolean;
   }
 
   static final _id_enabledIn =
-      jniAccessors.getMethodIDOf(_classRef, r"enabledIn", r"(I)Z");
+      jni.Jni.accessors.getMethodIDOf(_class.reference, r"enabledIn", r"(I)Z");
 
   /// from: public boolean enabledIn(int flags)
   bool enabledIn(
     int flags,
   ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_enabledIn,
+    return jni.Jni.accessors.callMethodWithArgs(reference, _id_enabledIn,
         jni.JniCallType.booleanType, [jni.JValueInt(flags)]).boolean;
   }
 
   static final _id_getMask =
-      jniAccessors.getMethodIDOf(_classRef, r"getMask", r"()I");
+      jni.Jni.accessors.getMethodIDOf(_class.reference, r"getMask", r"()I");
 
   /// from: public int getMask()
   int getMask() {
-    return jniAccessors.callMethodWithArgs(
+    return jni.Jni.accessors.callMethodWithArgs(
         reference, _id_getMask, jni.JniCallType.intType, []).integer;
   }
 }
@@ -2564,7 +2618,7 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $JsonParser_FeatureType &&
+    return other.runtimeType == ($JsonParser_FeatureType) &&
         other is $JsonParser_FeatureType;
   }
 }
@@ -2575,30 +2629,32 @@
 /// used for numbers.
 class JsonParser_NumberType extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<JsonParser_NumberType> $type = type;
 
   JsonParser_NumberType.fromRef(
     jni.JObjectPtr ref,
   ) : super.fromRef(ref);
 
-  static final _classRef = jniAccessors
-      .getClassOf(r"com/fasterxml/jackson/core/JsonParser$NumberType");
+  static final _class =
+      jni.Jni.findJClass(r"com/fasterxml/jackson/core/JsonParser$NumberType");
 
   /// The type which includes information such as the signature of this class.
   static const type = $JsonParser_NumberTypeType();
-  static final _id_values = jniAccessors.getStaticMethodIDOf(_classRef,
-      r"values", r"()[Lcom/fasterxml/jackson/core/JsonParser$NumberType;");
+  static final _id_values = jni.Jni.accessors.getStaticMethodIDOf(
+      _class.reference,
+      r"values",
+      r"()[Lcom/fasterxml/jackson/core/JsonParser$NumberType;");
 
   /// from: static public com.fasterxml.jackson.core.JsonParser.NumberType[] values()
   /// The returned object must be deleted after use, by calling the `delete` method.
   static jni.JArray<JsonParser_NumberType> values() {
     return const jni.JArrayType($JsonParser_NumberTypeType()).fromRef(
-        jniAccessors.callStaticMethodWithArgs(
-            _classRef, _id_values, jni.JniCallType.objectType, []).object);
+        jni.Jni.accessors.callStaticMethodWithArgs(_class.reference, _id_values,
+            jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_valueOf = jniAccessors.getStaticMethodIDOf(
-      _classRef,
+  static final _id_valueOf = jni.Jni.accessors.getStaticMethodIDOf(
+      _class.reference,
       r"valueOf",
       r"(Ljava/lang/String;)Lcom/fasterxml/jackson/core/JsonParser$NumberType;");
 
@@ -2607,8 +2663,8 @@
   static JsonParser_NumberType valueOf(
     jni.JString name,
   ) {
-    return const $JsonParser_NumberTypeType().fromRef(jniAccessors
-        .callStaticMethodWithArgs(_classRef, _id_valueOf,
+    return const $JsonParser_NumberTypeType().fromRef(jni.Jni.accessors
+        .callStaticMethodWithArgs(_class.reference, _id_valueOf,
             jni.JniCallType.objectType, [name.reference]).object);
   }
 }
@@ -2634,7 +2690,7 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $JsonParser_NumberTypeType &&
+    return other.runtimeType == ($JsonParser_NumberTypeType) &&
         other is $JsonParser_NumberTypeType;
   }
 }
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 2a88806..b6bc6e5 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
@@ -36,38 +36,38 @@
 import "package:jni/internal_helpers_for_jnigen.dart";
 import "package:jni/jni.dart" as jni;
 
-import "../../../../_init.dart";
-
 /// from: com.fasterxml.jackson.core.JsonToken
 ///
 /// Enumeration for basic token types used for returning results
 /// of parsing JSON content.
 class JsonToken extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<JsonToken> $type = type;
 
   JsonToken.fromRef(
     jni.JObjectPtr ref,
   ) : super.fromRef(ref);
 
-  static final _classRef =
-      jniAccessors.getClassOf(r"com/fasterxml/jackson/core/JsonToken");
+  static final _class =
+      jni.Jni.findJClass(r"com/fasterxml/jackson/core/JsonToken");
 
   /// The type which includes information such as the signature of this class.
   static const type = $JsonTokenType();
-  static final _id_values = jniAccessors.getStaticMethodIDOf(
-      _classRef, r"values", r"()[Lcom/fasterxml/jackson/core/JsonToken;");
+  static final _id_values = jni.Jni.accessors.getStaticMethodIDOf(
+      _class.reference,
+      r"values",
+      r"()[Lcom/fasterxml/jackson/core/JsonToken;");
 
   /// from: static public com.fasterxml.jackson.core.JsonToken[] values()
   /// The returned object must be deleted after use, by calling the `delete` method.
   static jni.JArray<JsonToken> values() {
-    return const jni.JArrayType($JsonTokenType()).fromRef(jniAccessors
-        .callStaticMethodWithArgs(
-            _classRef, _id_values, jni.JniCallType.objectType, []).object);
+    return const jni.JArrayType($JsonTokenType()).fromRef(jni.Jni.accessors
+        .callStaticMethodWithArgs(_class.reference, _id_values,
+            jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_valueOf = jniAccessors.getStaticMethodIDOf(
-      _classRef,
+  static final _id_valueOf = jni.Jni.accessors.getStaticMethodIDOf(
+      _class.reference,
       r"valueOf",
       r"(Ljava/lang/String;)Lcom/fasterxml/jackson/core/JsonToken;");
 
@@ -76,67 +76,66 @@
   static JsonToken valueOf(
     jni.JString name,
   ) {
-    return const $JsonTokenType().fromRef(jniAccessors.callStaticMethodWithArgs(
-        _classRef,
-        _id_valueOf,
-        jni.JniCallType.objectType,
-        [name.reference]).object);
+    return const $JsonTokenType().fromRef(jni.Jni.accessors
+        .callStaticMethodWithArgs(_class.reference, _id_valueOf,
+            jni.JniCallType.objectType, [name.reference]).object);
   }
 
-  static final _id_id = jniAccessors.getMethodIDOf(_classRef, r"id", r"()I");
+  static final _id_id =
+      jni.Jni.accessors.getMethodIDOf(_class.reference, r"id", r"()I");
 
   /// from: public final int id()
   int id() {
-    return jniAccessors.callMethodWithArgs(
+    return jni.Jni.accessors.callMethodWithArgs(
         reference, _id_id, jni.JniCallType.intType, []).integer;
   }
 
-  static final _id_asString = jniAccessors.getMethodIDOf(
-      _classRef, r"asString", r"()Ljava/lang/String;");
+  static final _id_asString = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"asString", r"()Ljava/lang/String;");
 
   /// from: public final java.lang.String asString()
   /// The returned object must be deleted after use, by calling the `delete` method.
   jni.JString asString() {
-    return const jni.JStringType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JStringType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference, _id_asString, jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_asCharArray =
-      jniAccessors.getMethodIDOf(_classRef, r"asCharArray", r"()[C");
+  static final _id_asCharArray = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"asCharArray", r"()[C");
 
   /// from: public final char[] asCharArray()
   /// The returned object must be deleted after use, by calling the `delete` method.
-  jni.JArray<jni.JChar> asCharArray() {
-    return const jni.JArrayType(jni.JCharType()).fromRef(jniAccessors
+  jni.JArray<jni.jchar> asCharArray() {
+    return const jni.JArrayType(jni.jcharType()).fromRef(jni.Jni.accessors
         .callMethodWithArgs(
             reference, _id_asCharArray, jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_asByteArray =
-      jniAccessors.getMethodIDOf(_classRef, r"asByteArray", r"()[B");
+  static final _id_asByteArray = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"asByteArray", r"()[B");
 
   /// from: public final byte[] asByteArray()
   /// The returned object must be deleted after use, by calling the `delete` method.
-  jni.JArray<jni.JByte> asByteArray() {
-    return const jni.JArrayType(jni.JByteType()).fromRef(jniAccessors
+  jni.JArray<jni.jbyte> asByteArray() {
+    return const jni.JArrayType(jni.jbyteType()).fromRef(jni.Jni.accessors
         .callMethodWithArgs(
             reference, _id_asByteArray, jni.JniCallType.objectType, []).object);
   }
 
   static final _id_isNumeric =
-      jniAccessors.getMethodIDOf(_classRef, r"isNumeric", r"()Z");
+      jni.Jni.accessors.getMethodIDOf(_class.reference, 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 jniAccessors.callMethodWithArgs(
+    return jni.Jni.accessors.callMethodWithArgs(
         reference, _id_isNumeric, jni.JniCallType.booleanType, []).boolean;
   }
 
-  static final _id_isStructStart =
-      jniAccessors.getMethodIDOf(_classRef, r"isStructStart", r"()Z");
+  static final _id_isStructStart = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"isStructStart", r"()Z");
 
   /// from: public final boolean isStructStart()
   ///
@@ -148,12 +147,12 @@
   ///   {@code false} otherwise
   ///@since 2.3
   bool isStructStart() {
-    return jniAccessors.callMethodWithArgs(
+    return jni.Jni.accessors.callMethodWithArgs(
         reference, _id_isStructStart, jni.JniCallType.booleanType, []).boolean;
   }
 
   static final _id_isStructEnd =
-      jniAccessors.getMethodIDOf(_classRef, r"isStructEnd", r"()Z");
+      jni.Jni.accessors.getMethodIDOf(_class.reference, r"isStructEnd", r"()Z");
 
   /// from: public final boolean isStructEnd()
   ///
@@ -165,12 +164,12 @@
   ///   {@code false} otherwise
   ///@since 2.3
   bool isStructEnd() {
-    return jniAccessors.callMethodWithArgs(
+    return jni.Jni.accessors.callMethodWithArgs(
         reference, _id_isStructEnd, jni.JniCallType.booleanType, []).boolean;
   }
 
-  static final _id_isScalarValue =
-      jniAccessors.getMethodIDOf(_classRef, r"isScalarValue", r"()Z");
+  static final _id_isScalarValue = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"isScalarValue", r"()Z");
 
   /// from: public final boolean isScalarValue()
   ///
@@ -181,19 +180,19 @@
   ///@return {@code True} if this token is a scalar value token (one of
   ///   {@code VALUE_xxx} tokens), {@code false} otherwise
   bool isScalarValue() {
-    return jniAccessors.callMethodWithArgs(
+    return jni.Jni.accessors.callMethodWithArgs(
         reference, _id_isScalarValue, jni.JniCallType.booleanType, []).boolean;
   }
 
   static final _id_isBoolean =
-      jniAccessors.getMethodIDOf(_classRef, r"isBoolean", r"()Z");
+      jni.Jni.accessors.getMethodIDOf(_class.reference, 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 jniAccessors.callMethodWithArgs(
+    return jni.Jni.accessors.callMethodWithArgs(
         reference, _id_isBoolean, jni.JniCallType.booleanType, []).boolean;
   }
 }
@@ -218,6 +217,6 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $JsonTokenType && other is $JsonTokenType;
+    return other.runtimeType == ($JsonTokenType) && other is $JsonTokenType;
   }
 }
diff --git a/pkgs/jnigen/test/jackson_core_test/third_party/dart_only/lib/_init.dart b/pkgs/jnigen/test/jackson_core_test/third_party/dart_only/lib/_init.dart
deleted file mode 100644
index eec3a8c..0000000
--- a/pkgs/jnigen/test/jackson_core_test/third_party/dart_only/lib/_init.dart
+++ /dev/null
@@ -1,23 +0,0 @@
-// Generated from jackson-core which is licensed under the Apache License 2.0.
-// The following copyright from the original authors applies.
-// See https://github.com/FasterXML/jackson-core/blob/2.14/LICENSE
-//
-// Copyright (c) 2007 - The Jackson Project Authors
-// Licensed under the Apache License, Version 2.0 (the "License")
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-import "package:jni/jni.dart" as jni;
-
-// Auto-generated initialization code.
-
-final jniEnv = jni.Jni.env;
-final jniAccessors = jni.Jni.accessors;
diff --git a/pkgs/jnigen/test/jackson_core_test/third_party/dart_only/lib/com/fasterxml/jackson/core/JsonFactory.dart b/pkgs/jnigen/test/jackson_core_test/third_party/dart_only/lib/com/fasterxml/jackson/core/JsonFactory.dart
deleted file mode 100644
index 2ceb324..0000000
--- a/pkgs/jnigen/test/jackson_core_test/third_party/dart_only/lib/com/fasterxml/jackson/core/JsonFactory.dart
+++ /dev/null
@@ -1,1879 +0,0 @@
-// Generated from jackson-core which is licensed under the Apache License 2.0.
-// The following copyright from the original authors applies.
-// See https://github.com/FasterXML/jackson-core/blob/2.14/LICENSE
-//
-// Copyright (c) 2007 - The Jackson Project Authors
-// Licensed under the Apache License, Version 2.0 (the "License")
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// Autogenerated by jnigen. DO NOT EDIT!
-
-// ignore_for_file: annotate_overrides
-// ignore_for_file: camel_case_extensions
-// ignore_for_file: camel_case_types
-// ignore_for_file: constant_identifier_names
-// ignore_for_file: file_names
-// ignore_for_file: no_leading_underscores_for_local_identifiers
-// ignore_for_file: non_constant_identifier_names
-// ignore_for_file: overridden_fields
-// ignore_for_file: unnecessary_cast
-// ignore_for_file: unused_element
-// ignore_for_file: unused_field
-// ignore_for_file: unused_import
-// ignore_for_file: unused_shown_name
-
-import "dart:isolate" show ReceivePort;
-import "dart:ffi" as ffi;
-import "package:jni/internal_helpers_for_jnigen.dart";
-import "package:jni/jni.dart" as jni;
-
-import "JsonParser.dart" as jsonparser_;
-import "../../../../_init.dart";
-
-/// from: com.fasterxml.jackson.core.JsonFactory
-///
-/// The main factory class of Jackson package, used to configure and
-/// construct reader (aka parser, JsonParser)
-/// and writer (aka generator, JsonGenerator)
-/// instances.
-///
-/// Factory instances are thread-safe and reusable after configuration
-/// (if any). Typically applications and services use only a single
-/// globally shared factory instance, unless they need differently
-/// configured factories. Factory reuse is important if efficiency matters;
-/// most recycling of expensive construct is done on per-factory basis.
-///
-/// Creation of a factory instance is a light-weight operation,
-/// and since there is no need for pluggable alternative implementations
-/// (as there is no "standard" JSON processor API to implement),
-/// the default constructor is used for constructing factory
-/// instances.
-///@author Tatu Saloranta
-class JsonFactory extends jni.JObject {
-  @override
-  late final jni.JObjType $type = type;
-
-  JsonFactory.fromRef(
-    jni.JObjectPtr ref,
-  ) : super.fromRef(ref);
-
-  static final _classRef =
-      jniAccessors.getClassOf(r"com/fasterxml/jackson/core/JsonFactory");
-
-  /// The type which includes information such as the signature of this class.
-  static const type = $JsonFactoryType();
-
-  /// from: static public final java.lang.String FORMAT_NAME_JSON
-  ///
-  /// Name used to identify JSON format
-  /// (and returned by \#getFormatName()
-  static const FORMAT_NAME_JSON = r"""JSON""";
-
-  static final _id_DEFAULT_FACTORY_FEATURE_FLAGS =
-      jniAccessors.getStaticFieldIDOf(
-    _classRef,
-    r"DEFAULT_FACTORY_FEATURE_FLAGS",
-    r"I",
-  );
-
-  /// from: static protected final int DEFAULT_FACTORY_FEATURE_FLAGS
-  ///
-  /// Bitfield (set of flags) of all factory features that are enabled by default.
-  static int get DEFAULT_FACTORY_FEATURE_FLAGS => jniAccessors
-      .getStaticField(
-          _classRef, _id_DEFAULT_FACTORY_FEATURE_FLAGS, jni.JniCallType.intType)
-      .integer;
-
-  static final _id_DEFAULT_PARSER_FEATURE_FLAGS =
-      jniAccessors.getStaticFieldIDOf(
-    _classRef,
-    r"DEFAULT_PARSER_FEATURE_FLAGS",
-    r"I",
-  );
-
-  /// from: static protected final int DEFAULT_PARSER_FEATURE_FLAGS
-  ///
-  /// Bitfield (set of flags) of all parser features that are enabled
-  /// by default.
-  static int get DEFAULT_PARSER_FEATURE_FLAGS => jniAccessors
-      .getStaticField(
-          _classRef, _id_DEFAULT_PARSER_FEATURE_FLAGS, jni.JniCallType.intType)
-      .integer;
-
-  static final _id_DEFAULT_GENERATOR_FEATURE_FLAGS =
-      jniAccessors.getStaticFieldIDOf(
-    _classRef,
-    r"DEFAULT_GENERATOR_FEATURE_FLAGS",
-    r"I",
-  );
-
-  /// from: static protected final int DEFAULT_GENERATOR_FEATURE_FLAGS
-  ///
-  /// Bitfield (set of flags) of all generator features that are enabled
-  /// by default.
-  static int get DEFAULT_GENERATOR_FEATURE_FLAGS => jniAccessors
-      .getStaticField(_classRef, _id_DEFAULT_GENERATOR_FEATURE_FLAGS,
-          jni.JniCallType.intType)
-      .integer;
-
-  static final _id_DEFAULT_ROOT_VALUE_SEPARATOR =
-      jniAccessors.getStaticFieldIDOf(
-    _classRef,
-    r"DEFAULT_ROOT_VALUE_SEPARATOR",
-    r"Lcom/fasterxml/jackson/core/SerializableString;",
-  );
-
-  /// from: static public final com.fasterxml.jackson.core.SerializableString DEFAULT_ROOT_VALUE_SEPARATOR
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  static jni.JObject get DEFAULT_ROOT_VALUE_SEPARATOR =>
-      const jni.JObjectType().fromRef(jniAccessors
-          .getStaticField(_classRef, _id_DEFAULT_ROOT_VALUE_SEPARATOR,
-              jni.JniCallType.objectType)
-          .object);
-
-  static final _id_ctor =
-      jniAccessors.getMethodIDOf(_classRef, r"<init>", r"()V");
-
-  /// from: public void <init>()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Default constructor used to create factory instances.
-  /// Creation of a factory instance is a light-weight operation,
-  /// but it is still a good idea to reuse limited number of
-  /// factory instances (and quite often just a single instance):
-  /// factories are used as context for storing some reused
-  /// processing objects (such as symbol tables parsers use)
-  /// and this reuse only works within context of a single
-  /// factory instance.
-  factory JsonFactory() {
-    return JsonFactory.fromRef(
-        jniAccessors.newObjectWithArgs(_classRef, _id_ctor, []).object);
-  }
-
-  static final _id_ctor1 = jniAccessors.getMethodIDOf(
-      _classRef, r"<init>", r"(Lcom/fasterxml/jackson/core/ObjectCodec;)V");
-
-  /// from: public void <init>(com.fasterxml.jackson.core.ObjectCodec oc)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  factory JsonFactory.ctor1(
-    jni.JObject oc,
-  ) {
-    return JsonFactory.fromRef(jniAccessors
-        .newObjectWithArgs(_classRef, _id_ctor1, [oc.reference]).object);
-  }
-
-  static final _id_ctor2 = jniAccessors.getMethodIDOf(_classRef, r"<init>",
-      r"(Lcom/fasterxml/jackson/core/JsonFactory;Lcom/fasterxml/jackson/core/ObjectCodec;)V");
-
-  /// from: protected void <init>(com.fasterxml.jackson.core.JsonFactory src, com.fasterxml.jackson.core.ObjectCodec codec)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Constructor used when copy()ing a factory instance.
-  ///@param src Original factory to copy settings from
-  ///@param codec Databinding-level codec to use, if any
-  ///@since 2.2.1
-  factory JsonFactory.ctor2(
-    JsonFactory src,
-    jni.JObject codec,
-  ) {
-    return JsonFactory.fromRef(jniAccessors.newObjectWithArgs(
-        _classRef, _id_ctor2, [src.reference, codec.reference]).object);
-  }
-
-  static final _id_ctor3 = jniAccessors.getMethodIDOf(_classRef, r"<init>",
-      r"(Lcom/fasterxml/jackson/core/JsonFactoryBuilder;)V");
-
-  /// from: public void <init>(com.fasterxml.jackson.core.JsonFactoryBuilder b)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Constructor used by JsonFactoryBuilder for instantiation.
-  ///@param b Builder that contains settings to use
-  ///@since 2.10
-  factory JsonFactory.ctor3(
-    jni.JObject b,
-  ) {
-    return JsonFactory.fromRef(jniAccessors
-        .newObjectWithArgs(_classRef, _id_ctor3, [b.reference]).object);
-  }
-
-  static final _id_ctor4 = jniAccessors.getMethodIDOf(
-      _classRef, 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 deleted after use, by calling the `delete` method.
-  ///
-  /// Constructor for subtypes; needed to work around the fact that before 3.0,
-  /// this factory has cumbersome dual role as generic type as well as actual
-  /// implementation for json.
-  ///@param b Builder that contains settings to use
-  ///@param bogus Argument only needed to separate constructor signature; ignored
-  factory JsonFactory.ctor4(
-    jni.JObject b,
-    bool bogus,
-  ) {
-    return JsonFactory.fromRef(jniAccessors.newObjectWithArgs(
-        _classRef, _id_ctor4, [b.reference, bogus ? 1 : 0]).object);
-  }
-
-  static final _id_rebuild = jniAccessors.getMethodIDOf(
-      _classRef, r"rebuild", r"()Lcom/fasterxml/jackson/core/TSFBuilder;");
-
-  /// from: public com.fasterxml.jackson.core.TSFBuilder<?,?> rebuild()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method that allows construction of differently configured factory, starting
-  /// with settings of this factory.
-  ///@return Builder instance to use
-  ///@since 2.10
-  jni.JObject rebuild() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
-        reference, _id_rebuild, jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_builder = jniAccessors.getStaticMethodIDOf(
-      _classRef, r"builder", r"()Lcom/fasterxml/jackson/core/TSFBuilder;");
-
-  /// from: static public com.fasterxml.jackson.core.TSFBuilder<?,?> builder()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Main factory method to use for constructing JsonFactory instances with
-  /// different configuration: creates and returns a builder for collecting configuration
-  /// settings; instance created by calling {@code build()} after all configuration
-  /// set.
-  ///
-  /// NOTE: signature unfortunately does not expose true implementation type; this
-  /// will be fixed in 3.0.
-  ///@return Builder instance to use
-  static jni.JObject builder() {
-    return const jni.JObjectType().fromRef(jniAccessors
-        .callStaticMethodWithArgs(
-            _classRef, _id_builder, jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_copy = jniAccessors.getMethodIDOf(
-      _classRef, r"copy", r"()Lcom/fasterxml/jackson/core/JsonFactory;");
-
-  /// from: public com.fasterxml.jackson.core.JsonFactory copy()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method for constructing a new JsonFactory that has
-  /// the same settings as this instance, but is otherwise
-  /// independent (i.e. nothing is actually shared, symbol tables
-  /// are separate).
-  /// Note that ObjectCodec reference is not copied but is
-  /// set to null; caller typically needs to set it after calling
-  /// this method. Reason for this is that the codec is used for
-  /// callbacks, and assumption is that there is strict 1-to-1
-  /// mapping between codec, factory. Caller has to, then, explicitly
-  /// set codec after making the copy.
-  ///@return Copy of this factory instance
-  ///@since 2.1
-  JsonFactory copy() {
-    return const $JsonFactoryType().fromRef(jniAccessors.callMethodWithArgs(
-        reference, _id_copy, jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_readResolve = jniAccessors.getMethodIDOf(
-      _classRef, r"readResolve", r"()Ljava/lang/Object;");
-
-  /// from: protected java.lang.Object readResolve()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method that we need to override to actually make restoration go
-  /// through constructors etc: needed to allow JDK serializability of
-  /// factory instances.
-  ///
-  /// Note: must be overridden by sub-classes as well.
-  ///@return Newly constructed instance
-  jni.JObject readResolve() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
-        reference, _id_readResolve, jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_requiresPropertyOrdering = jniAccessors.getMethodIDOf(
-      _classRef, r"requiresPropertyOrdering", r"()Z");
-
-  /// from: public boolean requiresPropertyOrdering()
-  ///
-  /// Introspection method that higher-level functionality may call
-  /// to see whether underlying data format requires a stable ordering
-  /// of object properties or not.
-  /// This is usually used for determining
-  /// whether to force a stable ordering (like alphabetic ordering by name)
-  /// if no ordering if explicitly specified.
-  ///
-  /// Default implementation returns <code>false</code> as JSON does NOT
-  /// require stable ordering. Formats that require ordering include positional
-  /// textual formats like <code>CSV</code>, and schema-based binary formats
-  /// like <code>Avro</code>.
-  ///@return Whether format supported by this factory
-  ///   requires Object properties to be ordered.
-  ///@since 2.3
-  bool requiresPropertyOrdering() {
-    return jniAccessors.callMethodWithArgs(reference,
-        _id_requiresPropertyOrdering, jni.JniCallType.booleanType, []).boolean;
-  }
-
-  static final _id_canHandleBinaryNatively =
-      jniAccessors.getMethodIDOf(_classRef, r"canHandleBinaryNatively", r"()Z");
-
-  /// from: public boolean canHandleBinaryNatively()
-  ///
-  /// Introspection method that higher-level functionality may call
-  /// to see whether underlying data format can read and write binary
-  /// data natively; that is, embeded it as-is without using encodings
-  /// such as Base64.
-  ///
-  /// Default implementation returns <code>false</code> as JSON does not
-  /// support native access: all binary content must use Base64 encoding.
-  /// Most binary formats (like Smile and Avro) support native binary content.
-  ///@return Whether format supported by this factory
-  ///    supports native binary content
-  ///@since 2.3
-  bool canHandleBinaryNatively() {
-    return jniAccessors.callMethodWithArgs(reference,
-        _id_canHandleBinaryNatively, jni.JniCallType.booleanType, []).boolean;
-  }
-
-  static final _id_canUseCharArrays =
-      jniAccessors.getMethodIDOf(_classRef, r"canUseCharArrays", r"()Z");
-
-  /// from: public boolean canUseCharArrays()
-  ///
-  /// Introspection method that can be used by base factory to check
-  /// whether access using <code>char[]</code> is something that actual
-  /// parser implementations can take advantage of, over having to
-  /// use java.io.Reader. Sub-types are expected to override
-  /// definition; default implementation (suitable for JSON) alleges
-  /// that optimization are possible; and thereby is likely to try
-  /// to access java.lang.String content by first copying it into
-  /// recyclable intermediate buffer.
-  ///@return Whether access to decoded textual content can be efficiently
-  ///   accessed using parser method {@code getTextCharacters()}.
-  ///@since 2.4
-  bool canUseCharArrays() {
-    return jniAccessors.callMethodWithArgs(reference, _id_canUseCharArrays,
-        jni.JniCallType.booleanType, []).boolean;
-  }
-
-  static final _id_canParseAsync =
-      jniAccessors.getMethodIDOf(_classRef, r"canParseAsync", r"()Z");
-
-  /// from: public boolean canParseAsync()
-  ///
-  /// Introspection method that can be used to check whether this
-  /// factory can create non-blocking parsers: parsers that do not
-  /// use blocking I/O abstractions but instead use a
-  /// com.fasterxml.jackson.core.async.NonBlockingInputFeeder.
-  ///@return Whether this factory supports non-blocking ("async") parsing or
-  ///    not (and consequently whether {@code createNonBlockingXxx()} method(s) work)
-  ///@since 2.9
-  bool canParseAsync() {
-    return jniAccessors.callMethodWithArgs(
-        reference, _id_canParseAsync, jni.JniCallType.booleanType, []).boolean;
-  }
-
-  static final _id_getFormatReadFeatureType = jniAccessors.getMethodIDOf(
-      _classRef, r"getFormatReadFeatureType", r"()Ljava/lang/Class;");
-
-  /// from: public java.lang.Class<? extends com.fasterxml.jackson.core.FormatFeature> getFormatReadFeatureType()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  jni.JObject getFormatReadFeatureType() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_getFormatReadFeatureType,
-        jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_getFormatWriteFeatureType = jniAccessors.getMethodIDOf(
-      _classRef, r"getFormatWriteFeatureType", r"()Ljava/lang/Class;");
-
-  /// from: public java.lang.Class<? extends com.fasterxml.jackson.core.FormatFeature> getFormatWriteFeatureType()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  jni.JObject getFormatWriteFeatureType() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_getFormatWriteFeatureType,
-        jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_canUseSchema = jniAccessors.getMethodIDOf(_classRef,
-      r"canUseSchema", r"(Lcom/fasterxml/jackson/core/FormatSchema;)Z");
-
-  /// from: public boolean canUseSchema(com.fasterxml.jackson.core.FormatSchema schema)
-  ///
-  /// Method that can be used to quickly check whether given schema
-  /// is something that parsers and/or generators constructed by this
-  /// factory could use. Note that this means possible use, at the level
-  /// of data format (i.e. schema is for same data format as parsers and
-  /// generators this factory constructs); individual schema instances
-  /// may have further usage restrictions.
-  ///@param schema Schema instance to check
-  ///@return Whether parsers and generators constructed by this factory
-  ///   can use specified format schema instance
-  bool canUseSchema(
-    jni.JObject schema,
-  ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_canUseSchema,
-        jni.JniCallType.booleanType, [schema.reference]).boolean;
-  }
-
-  static final _id_getFormatName = jniAccessors.getMethodIDOf(
-      _classRef, r"getFormatName", r"()Ljava/lang/String;");
-
-  /// from: public java.lang.String getFormatName()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method that returns short textual id identifying format
-  /// this factory supports.
-  ///
-  /// Note: sub-classes should override this method; default
-  /// 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(jniAccessors.callMethodWithArgs(
-        reference, _id_getFormatName, jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_hasFormat = jniAccessors.getMethodIDOf(
-      _classRef,
-      r"hasFormat",
-      r"(Lcom/fasterxml/jackson/core/format/InputAccessor;)Lcom/fasterxml/jackson/core/format/MatchStrength;");
-
-  /// from: public com.fasterxml.jackson.core.format.MatchStrength hasFormat(com.fasterxml.jackson.core.format.InputAccessor acc)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  jni.JObject hasFormat(
-    jni.JObject acc,
-  ) {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_hasFormat,
-        jni.JniCallType.objectType,
-        [acc.reference]).object);
-  }
-
-  static final _id_requiresCustomCodec =
-      jniAccessors.getMethodIDOf(_classRef, r"requiresCustomCodec", r"()Z");
-
-  /// from: public boolean requiresCustomCodec()
-  ///
-  /// Method that can be called to determine if a custom
-  /// ObjectCodec is needed for binding data parsed
-  /// using JsonParser constructed by this factory
-  /// (which typically also implies the same for serialization
-  /// with JsonGenerator).
-  ///@return True if custom codec is needed with parsers and
-  ///   generators created by this factory; false if a general
-  ///   ObjectCodec is enough
-  ///@since 2.1
-  bool requiresCustomCodec() {
-    return jniAccessors.callMethodWithArgs(reference, _id_requiresCustomCodec,
-        jni.JniCallType.booleanType, []).boolean;
-  }
-
-  static final _id_hasJSONFormat = jniAccessors.getMethodIDOf(
-      _classRef,
-      r"hasJSONFormat",
-      r"(Lcom/fasterxml/jackson/core/format/InputAccessor;)Lcom/fasterxml/jackson/core/format/MatchStrength;");
-
-  /// from: protected com.fasterxml.jackson.core.format.MatchStrength hasJSONFormat(com.fasterxml.jackson.core.format.InputAccessor acc)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  jni.JObject hasJSONFormat(
-    jni.JObject acc,
-  ) {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_hasJSONFormat,
-        jni.JniCallType.objectType,
-        [acc.reference]).object);
-  }
-
-  static final _id_version = jniAccessors.getMethodIDOf(
-      _classRef, r"version", r"()Lcom/fasterxml/jackson/core/Version;");
-
-  /// from: public com.fasterxml.jackson.core.Version version()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  jni.JObject version() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
-        reference, _id_version, jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_configure = jniAccessors.getMethodIDOf(
-      _classRef,
-      r"configure",
-      r"(Lcom/fasterxml/jackson/core/JsonFactory$Feature;Z)Lcom/fasterxml/jackson/core/JsonFactory;");
-
-  /// from: public final com.fasterxml.jackson.core.JsonFactory configure(com.fasterxml.jackson.core.JsonFactory.Feature f, boolean state)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method for enabling or disabling specified parser feature
-  /// (check JsonParser.Feature for list of features)
-  ///@param f Feature to enable/disable
-  ///@param state Whether to enable or disable the feature
-  ///@return This factory instance (to allow call chaining)
-  ///@deprecated since 2.10 use JsonFactoryBuilder\#configure(JsonFactory.Feature, boolean) instead
-  JsonFactory configure(
-    JsonFactory_Feature f,
-    bool state,
-  ) {
-    return const $JsonFactoryType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_configure,
-        jni.JniCallType.objectType,
-        [f.reference, state ? 1 : 0]).object);
-  }
-
-  static final _id_enable = jniAccessors.getMethodIDOf(_classRef, r"enable",
-      r"(Lcom/fasterxml/jackson/core/JsonFactory$Feature;)Lcom/fasterxml/jackson/core/JsonFactory;");
-
-  /// from: public com.fasterxml.jackson.core.JsonFactory enable(com.fasterxml.jackson.core.JsonFactory.Feature f)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method for enabling specified parser feature
-  /// (check JsonFactory.Feature for list of features)
-  ///@param f Feature to enable
-  ///@return This factory instance (to allow call chaining)
-  ///@deprecated since 2.10 use JsonFactoryBuilder\#configure(JsonFactory.Feature, boolean) instead
-  JsonFactory enable(
-    JsonFactory_Feature f,
-  ) {
-    return const $JsonFactoryType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_enable,
-        jni.JniCallType.objectType,
-        [f.reference]).object);
-  }
-
-  static final _id_disable = jniAccessors.getMethodIDOf(_classRef, r"disable",
-      r"(Lcom/fasterxml/jackson/core/JsonFactory$Feature;)Lcom/fasterxml/jackson/core/JsonFactory;");
-
-  /// from: public com.fasterxml.jackson.core.JsonFactory disable(com.fasterxml.jackson.core.JsonFactory.Feature f)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method for disabling specified parser features
-  /// (check JsonFactory.Feature for list of features)
-  ///@param f Feature to disable
-  ///@return This factory instance (to allow call chaining)
-  ///@deprecated since 2.10 use JsonFactoryBuilder\#configure(JsonFactory.Feature, boolean) instead
-  JsonFactory disable(
-    JsonFactory_Feature f,
-  ) {
-    return const $JsonFactoryType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_disable,
-        jni.JniCallType.objectType,
-        [f.reference]).object);
-  }
-
-  static final _id_isEnabled = jniAccessors.getMethodIDOf(_classRef,
-      r"isEnabled", r"(Lcom/fasterxml/jackson/core/JsonFactory$Feature;)Z");
-
-  /// from: public final boolean isEnabled(com.fasterxml.jackson.core.JsonFactory.Feature f)
-  ///
-  /// Checked whether specified parser feature is enabled.
-  ///@param f Feature to check
-  ///@return True if the specified feature is enabled
-  bool isEnabled(
-    JsonFactory_Feature f,
-  ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_isEnabled,
-        jni.JniCallType.booleanType, [f.reference]).boolean;
-  }
-
-  static final _id_getParserFeatures =
-      jniAccessors.getMethodIDOf(_classRef, r"getParserFeatures", r"()I");
-
-  /// from: public final int getParserFeatures()
-  int getParserFeatures() {
-    return jniAccessors.callMethodWithArgs(
-        reference, _id_getParserFeatures, jni.JniCallType.intType, []).integer;
-  }
-
-  static final _id_getGeneratorFeatures =
-      jniAccessors.getMethodIDOf(_classRef, r"getGeneratorFeatures", r"()I");
-
-  /// from: public final int getGeneratorFeatures()
-  int getGeneratorFeatures() {
-    return jniAccessors.callMethodWithArgs(reference, _id_getGeneratorFeatures,
-        jni.JniCallType.intType, []).integer;
-  }
-
-  static final _id_getFormatParserFeatures =
-      jniAccessors.getMethodIDOf(_classRef, r"getFormatParserFeatures", r"()I");
-
-  /// from: public int getFormatParserFeatures()
-  int getFormatParserFeatures() {
-    return jniAccessors.callMethodWithArgs(reference,
-        _id_getFormatParserFeatures, jni.JniCallType.intType, []).integer;
-  }
-
-  static final _id_getFormatGeneratorFeatures = jniAccessors.getMethodIDOf(
-      _classRef, r"getFormatGeneratorFeatures", r"()I");
-
-  /// from: public int getFormatGeneratorFeatures()
-  int getFormatGeneratorFeatures() {
-    return jniAccessors.callMethodWithArgs(reference,
-        _id_getFormatGeneratorFeatures, jni.JniCallType.intType, []).integer;
-  }
-
-  static final _id_configure1 = jniAccessors.getMethodIDOf(
-      _classRef,
-      r"configure",
-      r"(Lcom/fasterxml/jackson/core/JsonParser$Feature;Z)Lcom/fasterxml/jackson/core/JsonFactory;");
-
-  /// from: public final com.fasterxml.jackson.core.JsonFactory configure(com.fasterxml.jackson.core.JsonParser.Feature f, boolean state)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method for enabling or disabling specified parser feature
-  /// (check JsonParser.Feature for list of features)
-  ///@param f Feature to enable/disable
-  ///@param state Whether to enable or disable the feature
-  ///@return This factory instance (to allow call chaining)
-  JsonFactory configure1(
-    jsonparser_.JsonParser_Feature f,
-    bool state,
-  ) {
-    return const $JsonFactoryType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_configure1,
-        jni.JniCallType.objectType,
-        [f.reference, state ? 1 : 0]).object);
-  }
-
-  static final _id_enable1 = jniAccessors.getMethodIDOf(_classRef, r"enable",
-      r"(Lcom/fasterxml/jackson/core/JsonParser$Feature;)Lcom/fasterxml/jackson/core/JsonFactory;");
-
-  /// from: public com.fasterxml.jackson.core.JsonFactory enable(com.fasterxml.jackson.core.JsonParser.Feature f)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method for enabling specified parser feature
-  /// (check JsonParser.Feature for list of features)
-  ///@param f Feature to enable
-  ///@return This factory instance (to allow call chaining)
-  JsonFactory enable1(
-    jsonparser_.JsonParser_Feature f,
-  ) {
-    return const $JsonFactoryType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_enable1,
-        jni.JniCallType.objectType,
-        [f.reference]).object);
-  }
-
-  static final _id_disable1 = jniAccessors.getMethodIDOf(_classRef, r"disable",
-      r"(Lcom/fasterxml/jackson/core/JsonParser$Feature;)Lcom/fasterxml/jackson/core/JsonFactory;");
-
-  /// from: public com.fasterxml.jackson.core.JsonFactory disable(com.fasterxml.jackson.core.JsonParser.Feature f)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method for disabling specified parser features
-  /// (check JsonParser.Feature for list of features)
-  ///@param f Feature to disable
-  ///@return This factory instance (to allow call chaining)
-  JsonFactory disable1(
-    jsonparser_.JsonParser_Feature f,
-  ) {
-    return const $JsonFactoryType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_disable1,
-        jni.JniCallType.objectType,
-        [f.reference]).object);
-  }
-
-  static final _id_isEnabled1 = jniAccessors.getMethodIDOf(_classRef,
-      r"isEnabled", r"(Lcom/fasterxml/jackson/core/JsonParser$Feature;)Z");
-
-  /// from: public final boolean isEnabled(com.fasterxml.jackson.core.JsonParser.Feature f)
-  ///
-  /// Method for checking if the specified parser feature is enabled.
-  ///@param f Feature to check
-  ///@return True if specified feature is enabled
-  bool isEnabled1(
-    jsonparser_.JsonParser_Feature f,
-  ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_isEnabled1,
-        jni.JniCallType.booleanType, [f.reference]).boolean;
-  }
-
-  static final _id_isEnabled2 = jniAccessors.getMethodIDOf(_classRef,
-      r"isEnabled", r"(Lcom/fasterxml/jackson/core/StreamReadFeature;)Z");
-
-  /// from: public final boolean isEnabled(com.fasterxml.jackson.core.StreamReadFeature f)
-  ///
-  /// Method for checking if the specified stream read feature is enabled.
-  ///@param f Feature to check
-  ///@return True if specified feature is enabled
-  ///@since 2.10
-  bool isEnabled2(
-    jni.JObject f,
-  ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_isEnabled2,
-        jni.JniCallType.booleanType, [f.reference]).boolean;
-  }
-
-  static final _id_getInputDecorator = jniAccessors.getMethodIDOf(
-      _classRef,
-      r"getInputDecorator",
-      r"()Lcom/fasterxml/jackson/core/io/InputDecorator;");
-
-  /// from: public com.fasterxml.jackson.core.io.InputDecorator getInputDecorator()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method for getting currently configured input decorator (if any;
-  /// there is no default decorator).
-  ///@return InputDecorator configured, if any
-  jni.JObject getInputDecorator() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_getInputDecorator,
-        jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_setInputDecorator = jniAccessors.getMethodIDOf(
-      _classRef,
-      r"setInputDecorator",
-      r"(Lcom/fasterxml/jackson/core/io/InputDecorator;)Lcom/fasterxml/jackson/core/JsonFactory;");
-
-  /// from: public com.fasterxml.jackson.core.JsonFactory setInputDecorator(com.fasterxml.jackson.core.io.InputDecorator d)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method for overriding currently configured input decorator
-  ///@param d Decorator to configure for this factory, if any ({@code null} if none)
-  ///@return This factory instance (to allow call chaining)
-  ///@deprecated Since 2.10 use JsonFactoryBuilder\#inputDecorator(InputDecorator) instead
-  JsonFactory setInputDecorator(
-    jni.JObject d,
-  ) {
-    return const $JsonFactoryType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_setInputDecorator,
-        jni.JniCallType.objectType,
-        [d.reference]).object);
-  }
-
-  static final _id_configure2 = jniAccessors.getMethodIDOf(
-      _classRef,
-      r"configure",
-      r"(Lcom/fasterxml/jackson/core/JsonGenerator$Feature;Z)Lcom/fasterxml/jackson/core/JsonFactory;");
-
-  /// from: public final com.fasterxml.jackson.core.JsonFactory configure(com.fasterxml.jackson.core.JsonGenerator.Feature f, boolean state)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method for enabling or disabling specified generator feature
-  /// (check JsonGenerator.Feature for list of features)
-  ///@param f Feature to enable/disable
-  ///@param state Whether to enable or disable the feature
-  ///@return This factory instance (to allow call chaining)
-  JsonFactory configure2(
-    jni.JObject f,
-    bool state,
-  ) {
-    return const $JsonFactoryType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_configure2,
-        jni.JniCallType.objectType,
-        [f.reference, state ? 1 : 0]).object);
-  }
-
-  static final _id_enable2 = jniAccessors.getMethodIDOf(_classRef, r"enable",
-      r"(Lcom/fasterxml/jackson/core/JsonGenerator$Feature;)Lcom/fasterxml/jackson/core/JsonFactory;");
-
-  /// from: public com.fasterxml.jackson.core.JsonFactory enable(com.fasterxml.jackson.core.JsonGenerator.Feature f)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method for enabling specified generator features
-  /// (check JsonGenerator.Feature for list of features)
-  ///@param f Feature to enable
-  ///@return This factory instance (to allow call chaining)
-  JsonFactory enable2(
-    jni.JObject f,
-  ) {
-    return const $JsonFactoryType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_enable2,
-        jni.JniCallType.objectType,
-        [f.reference]).object);
-  }
-
-  static final _id_disable2 = jniAccessors.getMethodIDOf(_classRef, r"disable",
-      r"(Lcom/fasterxml/jackson/core/JsonGenerator$Feature;)Lcom/fasterxml/jackson/core/JsonFactory;");
-
-  /// from: public com.fasterxml.jackson.core.JsonFactory disable(com.fasterxml.jackson.core.JsonGenerator.Feature f)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method for disabling specified generator feature
-  /// (check JsonGenerator.Feature for list of features)
-  ///@param f Feature to disable
-  ///@return This factory instance (to allow call chaining)
-  JsonFactory disable2(
-    jni.JObject f,
-  ) {
-    return const $JsonFactoryType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_disable2,
-        jni.JniCallType.objectType,
-        [f.reference]).object);
-  }
-
-  static final _id_isEnabled3 = jniAccessors.getMethodIDOf(_classRef,
-      r"isEnabled", r"(Lcom/fasterxml/jackson/core/JsonGenerator$Feature;)Z");
-
-  /// from: public final boolean isEnabled(com.fasterxml.jackson.core.JsonGenerator.Feature f)
-  ///
-  /// Check whether specified generator feature is enabled.
-  ///@param f Feature to check
-  ///@return Whether specified feature is enabled
-  bool isEnabled3(
-    jni.JObject f,
-  ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_isEnabled3,
-        jni.JniCallType.booleanType, [f.reference]).boolean;
-  }
-
-  static final _id_isEnabled4 = jniAccessors.getMethodIDOf(_classRef,
-      r"isEnabled", r"(Lcom/fasterxml/jackson/core/StreamWriteFeature;)Z");
-
-  /// from: public final boolean isEnabled(com.fasterxml.jackson.core.StreamWriteFeature f)
-  ///
-  /// Check whether specified stream write feature is enabled.
-  ///@param f Feature to check
-  ///@return Whether specified feature is enabled
-  ///@since 2.10
-  bool isEnabled4(
-    jni.JObject f,
-  ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_isEnabled4,
-        jni.JniCallType.booleanType, [f.reference]).boolean;
-  }
-
-  static final _id_getCharacterEscapes = jniAccessors.getMethodIDOf(
-      _classRef,
-      r"getCharacterEscapes",
-      r"()Lcom/fasterxml/jackson/core/io/CharacterEscapes;");
-
-  /// from: public com.fasterxml.jackson.core.io.CharacterEscapes getCharacterEscapes()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method for accessing custom escapes factory uses for JsonGenerators
-  /// it creates.
-  ///@return Configured {@code CharacterEscapes}, if any; {@code null} if none
-  jni.JObject getCharacterEscapes() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_getCharacterEscapes,
-        jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_setCharacterEscapes = jniAccessors.getMethodIDOf(
-      _classRef,
-      r"setCharacterEscapes",
-      r"(Lcom/fasterxml/jackson/core/io/CharacterEscapes;)Lcom/fasterxml/jackson/core/JsonFactory;");
-
-  /// from: public com.fasterxml.jackson.core.JsonFactory setCharacterEscapes(com.fasterxml.jackson.core.io.CharacterEscapes esc)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method for defining custom escapes factory uses for JsonGenerators
-  /// it creates.
-  ///@param esc CharaterEscapes to set (or {@code null} for "none")
-  ///@return This factory instance (to allow call chaining)
-  JsonFactory setCharacterEscapes(
-    jni.JObject esc,
-  ) {
-    return const $JsonFactoryType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_setCharacterEscapes,
-        jni.JniCallType.objectType,
-        [esc.reference]).object);
-  }
-
-  static final _id_getOutputDecorator = jniAccessors.getMethodIDOf(
-      _classRef,
-      r"getOutputDecorator",
-      r"()Lcom/fasterxml/jackson/core/io/OutputDecorator;");
-
-  /// from: public com.fasterxml.jackson.core.io.OutputDecorator getOutputDecorator()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method for getting currently configured output decorator (if any;
-  /// there is no default decorator).
-  ///@return OutputDecorator configured for generators factory creates, if any;
-  ///    {@code null} if none.
-  jni.JObject getOutputDecorator() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_getOutputDecorator,
-        jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_setOutputDecorator = jniAccessors.getMethodIDOf(
-      _classRef,
-      r"setOutputDecorator",
-      r"(Lcom/fasterxml/jackson/core/io/OutputDecorator;)Lcom/fasterxml/jackson/core/JsonFactory;");
-
-  /// from: public com.fasterxml.jackson.core.JsonFactory setOutputDecorator(com.fasterxml.jackson.core.io.OutputDecorator d)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method for overriding currently configured output decorator
-  ///@return This factory instance (to allow call chaining)
-  ///@param d Output decorator to use, if any
-  ///@deprecated Since 2.10 use JsonFactoryBuilder\#outputDecorator(OutputDecorator) instead
-  JsonFactory setOutputDecorator(
-    jni.JObject d,
-  ) {
-    return const $JsonFactoryType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_setOutputDecorator,
-        jni.JniCallType.objectType,
-        [d.reference]).object);
-  }
-
-  static final _id_setRootValueSeparator = jniAccessors.getMethodIDOf(
-      _classRef,
-      r"setRootValueSeparator",
-      r"(Ljava/lang/String;)Lcom/fasterxml/jackson/core/JsonFactory;");
-
-  /// from: public com.fasterxml.jackson.core.JsonFactory setRootValueSeparator(java.lang.String sep)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method that allows overriding String used for separating root-level
-  /// JSON values (default is single space character)
-  ///@param sep Separator to use, if any; null means that no separator is
-  ///   automatically added
-  ///@return This factory instance (to allow call chaining)
-  JsonFactory setRootValueSeparator(
-    jni.JString sep,
-  ) {
-    return const $JsonFactoryType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_setRootValueSeparator,
-        jni.JniCallType.objectType,
-        [sep.reference]).object);
-  }
-
-  static final _id_getRootValueSeparator = jniAccessors.getMethodIDOf(
-      _classRef, r"getRootValueSeparator", r"()Ljava/lang/String;");
-
-  /// from: public java.lang.String getRootValueSeparator()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// @return Root value separator configured, if any
-  jni.JString getRootValueSeparator() {
-    return const jni.JStringType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_getRootValueSeparator,
-        jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_setCodec = jniAccessors.getMethodIDOf(_classRef, r"setCodec",
-      r"(Lcom/fasterxml/jackson/core/ObjectCodec;)Lcom/fasterxml/jackson/core/JsonFactory;");
-
-  /// from: public com.fasterxml.jackson.core.JsonFactory setCodec(com.fasterxml.jackson.core.ObjectCodec oc)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method for associating a ObjectCodec (typically
-  /// a <code>com.fasterxml.jackson.databind.ObjectMapper</code>)
-  /// with this factory (and more importantly, parsers and generators
-  /// it constructs). This is needed to use data-binding methods
-  /// of JsonParser and JsonGenerator instances.
-  ///@param oc Codec to use
-  ///@return This factory instance (to allow call chaining)
-  JsonFactory setCodec(
-    jni.JObject oc,
-  ) {
-    return const $JsonFactoryType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_setCodec,
-        jni.JniCallType.objectType,
-        [oc.reference]).object);
-  }
-
-  static final _id_getCodec = jniAccessors.getMethodIDOf(
-      _classRef, r"getCodec", r"()Lcom/fasterxml/jackson/core/ObjectCodec;");
-
-  /// from: public com.fasterxml.jackson.core.ObjectCodec getCodec()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  jni.JObject getCodec() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
-        reference, _id_getCodec, jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_createParser = jniAccessors.getMethodIDOf(
-      _classRef,
-      r"createParser",
-      r"(Ljava/io/File;)Lcom/fasterxml/jackson/core/JsonParser;");
-
-  /// from: public com.fasterxml.jackson.core.JsonParser createParser(java.io.File f)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method for constructing JSON parser instance to parse
-  /// contents of specified file.
-  ///
-  ///
-  /// Encoding is auto-detected from contents according to JSON
-  /// specification recommended mechanism. Json specification
-  /// supports only UTF-8, UTF-16 and UTF-32 as valid encodings,
-  /// so auto-detection implemented only for this charsets.
-  /// For other charsets use \#createParser(java.io.Reader).
-  ///
-  ///
-  /// Underlying input stream (needed for reading contents)
-  /// will be __owned__ (and managed, i.e. closed as need be) by
-  /// the parser, since caller has no access to it.
-  ///@param f File that contains JSON content to parse
-  ///@since 2.1
-  jsonparser_.JsonParser createParser(
-    jni.JObject f,
-  ) {
-    return const jsonparser_.$JsonParserType().fromRef(jniAccessors
-        .callMethodWithArgs(reference, _id_createParser,
-            jni.JniCallType.objectType, [f.reference]).object);
-  }
-
-  static final _id_createParser1 = jniAccessors.getMethodIDOf(
-      _classRef,
-      r"createParser",
-      r"(Ljava/net/URL;)Lcom/fasterxml/jackson/core/JsonParser;");
-
-  /// from: public com.fasterxml.jackson.core.JsonParser createParser(java.net.URL url)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method for constructing JSON parser instance to parse
-  /// contents of resource reference by given URL.
-  ///
-  /// Encoding is auto-detected from contents according to JSON
-  /// specification recommended mechanism. Json specification
-  /// supports only UTF-8, UTF-16 and UTF-32 as valid encodings,
-  /// so auto-detection implemented only for this charsets.
-  /// For other charsets use \#createParser(java.io.Reader).
-  ///
-  /// Underlying input stream (needed for reading contents)
-  /// will be __owned__ (and managed, i.e. closed as need be) by
-  /// the parser, since caller has no access to it.
-  ///@param url URL pointing to resource that contains JSON content to parse
-  ///@since 2.1
-  jsonparser_.JsonParser createParser1(
-    jni.JObject url,
-  ) {
-    return const jsonparser_.$JsonParserType().fromRef(jniAccessors
-        .callMethodWithArgs(reference, _id_createParser1,
-            jni.JniCallType.objectType, [url.reference]).object);
-  }
-
-  static final _id_createParser2 = jniAccessors.getMethodIDOf(
-      _classRef,
-      r"createParser",
-      r"(Ljava/io/InputStream;)Lcom/fasterxml/jackson/core/JsonParser;");
-
-  /// from: public com.fasterxml.jackson.core.JsonParser createParser(java.io.InputStream in)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method for constructing JSON parser instance to parse
-  /// the contents accessed via specified input stream.
-  ///
-  /// The input stream will __not be owned__ by
-  /// the parser, it will still be managed (i.e. closed if
-  /// end-of-stream is reacher, or parser close method called)
-  /// if (and only if) com.fasterxml.jackson.core.StreamReadFeature\#AUTO_CLOSE_SOURCE
-  /// is enabled.
-  ///
-  ///
-  /// Note: no encoding argument is taken since it can always be
-  /// auto-detected as suggested by JSON RFC. Json specification
-  /// supports only UTF-8, UTF-16 and UTF-32 as valid encodings,
-  /// so auto-detection implemented only for this charsets.
-  /// For other charsets use \#createParser(java.io.Reader).
-  ///@param in InputStream to use for reading JSON content to parse
-  ///@since 2.1
-  jsonparser_.JsonParser createParser2(
-    jni.JObject in0,
-  ) {
-    return const jsonparser_.$JsonParserType().fromRef(jniAccessors
-        .callMethodWithArgs(reference, _id_createParser2,
-            jni.JniCallType.objectType, [in0.reference]).object);
-  }
-
-  static final _id_createParser3 = jniAccessors.getMethodIDOf(
-      _classRef,
-      r"createParser",
-      r"(Ljava/io/Reader;)Lcom/fasterxml/jackson/core/JsonParser;");
-
-  /// from: public com.fasterxml.jackson.core.JsonParser createParser(java.io.Reader r)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method for constructing parser for parsing
-  /// the contents accessed via specified Reader.
-  ///
-  /// The read stream will __not be owned__ by
-  /// the parser, it will still be managed (i.e. closed if
-  /// end-of-stream is reacher, or parser close method called)
-  /// if (and only if) com.fasterxml.jackson.core.StreamReadFeature\#AUTO_CLOSE_SOURCE
-  /// is enabled.
-  ///@param r Reader to use for reading JSON content to parse
-  ///@since 2.1
-  jsonparser_.JsonParser createParser3(
-    jni.JObject r,
-  ) {
-    return const jsonparser_.$JsonParserType().fromRef(jniAccessors
-        .callMethodWithArgs(reference, _id_createParser3,
-            jni.JniCallType.objectType, [r.reference]).object);
-  }
-
-  static final _id_createParser4 = jniAccessors.getMethodIDOf(_classRef,
-      r"createParser", r"([B)Lcom/fasterxml/jackson/core/JsonParser;");
-
-  /// from: public com.fasterxml.jackson.core.JsonParser createParser(byte[] data)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method for constructing parser for parsing
-  /// the contents of given byte array.
-  ///@since 2.1
-  jsonparser_.JsonParser createParser4(
-    jni.JArray<jni.JByte> data,
-  ) {
-    return const jsonparser_.$JsonParserType().fromRef(jniAccessors
-        .callMethodWithArgs(reference, _id_createParser4,
-            jni.JniCallType.objectType, [data.reference]).object);
-  }
-
-  static final _id_createParser5 = jniAccessors.getMethodIDOf(_classRef,
-      r"createParser", r"([BII)Lcom/fasterxml/jackson/core/JsonParser;");
-
-  /// from: public com.fasterxml.jackson.core.JsonParser createParser(byte[] data, int offset, int len)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method for constructing parser for parsing
-  /// the contents of given byte array.
-  ///@param data Buffer that contains data to parse
-  ///@param offset Offset of the first data byte within buffer
-  ///@param len Length of contents to parse within buffer
-  ///@since 2.1
-  jsonparser_.JsonParser createParser5(
-    jni.JArray<jni.JByte> data,
-    int offset,
-    int len,
-  ) {
-    return const jsonparser_.$JsonParserType().fromRef(jniAccessors
-        .callMethodWithArgs(
-            reference, _id_createParser5, jni.JniCallType.objectType, [
-      data.reference,
-      jni.JValueInt(offset),
-      jni.JValueInt(len)
-    ]).object);
-  }
-
-  static final _id_createParser6 = jniAccessors.getMethodIDOf(
-      _classRef,
-      r"createParser",
-      r"(Ljava/lang/String;)Lcom/fasterxml/jackson/core/JsonParser;");
-
-  /// from: public com.fasterxml.jackson.core.JsonParser createParser(java.lang.String content)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method for constructing parser for parsing
-  /// contents of given String.
-  ///@since 2.1
-  jsonparser_.JsonParser createParser6(
-    jni.JString content,
-  ) {
-    return const jsonparser_.$JsonParserType().fromRef(jniAccessors
-        .callMethodWithArgs(reference, _id_createParser6,
-            jni.JniCallType.objectType, [content.reference]).object);
-  }
-
-  static final _id_createParser7 = jniAccessors.getMethodIDOf(_classRef,
-      r"createParser", r"([C)Lcom/fasterxml/jackson/core/JsonParser;");
-
-  /// from: public com.fasterxml.jackson.core.JsonParser createParser(char[] content)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method for constructing parser for parsing
-  /// contents of given char array.
-  ///@since 2.4
-  jsonparser_.JsonParser createParser7(
-    jni.JArray<jni.JChar> content,
-  ) {
-    return const jsonparser_.$JsonParserType().fromRef(jniAccessors
-        .callMethodWithArgs(reference, _id_createParser7,
-            jni.JniCallType.objectType, [content.reference]).object);
-  }
-
-  static final _id_createParser8 = jniAccessors.getMethodIDOf(_classRef,
-      r"createParser", r"([CII)Lcom/fasterxml/jackson/core/JsonParser;");
-
-  /// from: public com.fasterxml.jackson.core.JsonParser createParser(char[] content, int offset, int len)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method for constructing parser for parsing contents of given char array.
-  ///@since 2.4
-  jsonparser_.JsonParser createParser8(
-    jni.JArray<jni.JChar> content,
-    int offset,
-    int len,
-  ) {
-    return const jsonparser_.$JsonParserType().fromRef(jniAccessors
-        .callMethodWithArgs(
-            reference, _id_createParser8, jni.JniCallType.objectType, [
-      content.reference,
-      jni.JValueInt(offset),
-      jni.JValueInt(len)
-    ]).object);
-  }
-
-  static final _id_createParser9 = jniAccessors.getMethodIDOf(
-      _classRef,
-      r"createParser",
-      r"(Ljava/io/DataInput;)Lcom/fasterxml/jackson/core/JsonParser;");
-
-  /// from: public com.fasterxml.jackson.core.JsonParser createParser(java.io.DataInput in)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Optional method for constructing parser for reading contents from specified DataInput
-  /// instance.
-  ///
-  /// If this factory does not support DataInput as source,
-  /// will throw UnsupportedOperationException
-  ///@since 2.8
-  jsonparser_.JsonParser createParser9(
-    jni.JObject in0,
-  ) {
-    return const jsonparser_.$JsonParserType().fromRef(jniAccessors
-        .callMethodWithArgs(reference, _id_createParser9,
-            jni.JniCallType.objectType, [in0.reference]).object);
-  }
-
-  static final _id_createNonBlockingByteArrayParser =
-      jniAccessors.getMethodIDOf(_classRef, r"createNonBlockingByteArrayParser",
-          r"()Lcom/fasterxml/jackson/core/JsonParser;");
-
-  /// from: public com.fasterxml.jackson.core.JsonParser createNonBlockingByteArrayParser()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Optional method for constructing parser for non-blocking parsing
-  /// via com.fasterxml.jackson.core.async.ByteArrayFeeder
-  /// interface (accessed using JsonParser\#getNonBlockingInputFeeder()
-  /// from constructed instance).
-  ///
-  /// If this factory does not support non-blocking parsing (either at all,
-  /// or from byte array),
-  /// will throw UnsupportedOperationException.
-  ///
-  /// Note that JSON-backed factory only supports parsing of UTF-8 encoded JSON content
-  /// (and US-ASCII since it is proper subset); other encodings are not supported
-  /// at this point.
-  ///@since 2.9
-  jsonparser_.JsonParser createNonBlockingByteArrayParser() {
-    return const jsonparser_.$JsonParserType().fromRef(jniAccessors
-        .callMethodWithArgs(reference, _id_createNonBlockingByteArrayParser,
-            jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_createGenerator = jniAccessors.getMethodIDOf(
-      _classRef,
-      r"createGenerator",
-      r"(Ljava/io/OutputStream;Lcom/fasterxml/jackson/core/JsonEncoding;)Lcom/fasterxml/jackson/core/JsonGenerator;");
-
-  /// from: public com.fasterxml.jackson.core.JsonGenerator createGenerator(java.io.OutputStream out, com.fasterxml.jackson.core.JsonEncoding enc)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method for constructing JSON generator for writing JSON content
-  /// using specified output stream.
-  /// Encoding to use must be specified, and needs to be one of available
-  /// types (as per JSON specification).
-  ///
-  /// Underlying stream __is NOT owned__ by the generator constructed,
-  /// so that generator will NOT close the output stream when
-  /// JsonGenerator\#close is called (unless auto-closing
-  /// feature,
-  /// com.fasterxml.jackson.core.JsonGenerator.Feature\#AUTO_CLOSE_TARGET
-  /// is enabled).
-  /// Using application needs to close it explicitly if this is the case.
-  ///
-  /// Note: there are formats that use fixed encoding (like most binary data formats)
-  /// and that ignore passed in encoding.
-  ///@param out OutputStream to use for writing JSON content
-  ///@param enc Character encoding to use
-  ///@since 2.1
-  jni.JObject createGenerator(
-    jni.JObject out,
-    jni.JObject enc,
-  ) {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_createGenerator,
-        jni.JniCallType.objectType,
-        [out.reference, enc.reference]).object);
-  }
-
-  static final _id_createGenerator1 = jniAccessors.getMethodIDOf(
-      _classRef,
-      r"createGenerator",
-      r"(Ljava/io/OutputStream;)Lcom/fasterxml/jackson/core/JsonGenerator;");
-
-  /// from: public com.fasterxml.jackson.core.JsonGenerator createGenerator(java.io.OutputStream out)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Convenience method for constructing generator that uses default
-  /// encoding of the format (UTF-8 for JSON and most other data formats).
-  ///
-  /// Note: there are formats that use fixed encoding (like most binary data formats).
-  ///@since 2.1
-  jni.JObject createGenerator1(
-    jni.JObject out,
-  ) {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_createGenerator1,
-        jni.JniCallType.objectType,
-        [out.reference]).object);
-  }
-
-  static final _id_createGenerator2 = jniAccessors.getMethodIDOf(
-      _classRef,
-      r"createGenerator",
-      r"(Ljava/io/Writer;)Lcom/fasterxml/jackson/core/JsonGenerator;");
-
-  /// from: public com.fasterxml.jackson.core.JsonGenerator createGenerator(java.io.Writer w)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method for constructing JSON generator for writing JSON content
-  /// using specified Writer.
-  ///
-  /// Underlying stream __is NOT owned__ by the generator constructed,
-  /// so that generator will NOT close the Reader when
-  /// JsonGenerator\#close is called (unless auto-closing
-  /// feature,
-  /// com.fasterxml.jackson.core.JsonGenerator.Feature\#AUTO_CLOSE_TARGET is enabled).
-  /// Using application needs to close it explicitly.
-  ///@since 2.1
-  ///@param w Writer to use for writing JSON content
-  jni.JObject createGenerator2(
-    jni.JObject w,
-  ) {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_createGenerator2,
-        jni.JniCallType.objectType,
-        [w.reference]).object);
-  }
-
-  static final _id_createGenerator3 = jniAccessors.getMethodIDOf(
-      _classRef,
-      r"createGenerator",
-      r"(Ljava/io/File;Lcom/fasterxml/jackson/core/JsonEncoding;)Lcom/fasterxml/jackson/core/JsonGenerator;");
-
-  /// from: public com.fasterxml.jackson.core.JsonGenerator createGenerator(java.io.File f, com.fasterxml.jackson.core.JsonEncoding enc)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method for constructing JSON generator for writing JSON content
-  /// to specified file, overwriting contents it might have (or creating
-  /// it if such file does not yet exist).
-  /// Encoding to use must be specified, and needs to be one of available
-  /// types (as per JSON specification).
-  ///
-  /// Underlying stream __is owned__ by the generator constructed,
-  /// i.e. generator will handle closing of file when
-  /// JsonGenerator\#close is called.
-  ///@param f File to write contents to
-  ///@param enc Character encoding to use
-  ///@since 2.1
-  jni.JObject createGenerator3(
-    jni.JObject f,
-    jni.JObject enc,
-  ) {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_createGenerator3,
-        jni.JniCallType.objectType,
-        [f.reference, enc.reference]).object);
-  }
-
-  static final _id_createGenerator4 = jniAccessors.getMethodIDOf(
-      _classRef,
-      r"createGenerator",
-      r"(Ljava/io/DataOutput;Lcom/fasterxml/jackson/core/JsonEncoding;)Lcom/fasterxml/jackson/core/JsonGenerator;");
-
-  /// from: public com.fasterxml.jackson.core.JsonGenerator createGenerator(java.io.DataOutput out, com.fasterxml.jackson.core.JsonEncoding enc)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method for constructing generator for writing content using specified
-  /// DataOutput instance.
-  ///@since 2.8
-  jni.JObject createGenerator4(
-    jni.JObject out,
-    jni.JObject enc,
-  ) {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_createGenerator4,
-        jni.JniCallType.objectType,
-        [out.reference, enc.reference]).object);
-  }
-
-  static final _id_createGenerator5 = jniAccessors.getMethodIDOf(
-      _classRef,
-      r"createGenerator",
-      r"(Ljava/io/DataOutput;)Lcom/fasterxml/jackson/core/JsonGenerator;");
-
-  /// from: public com.fasterxml.jackson.core.JsonGenerator createGenerator(java.io.DataOutput out)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Convenience method for constructing generator that uses default
-  /// encoding of the format (UTF-8 for JSON and most other data formats).
-  ///
-  /// Note: there are formats that use fixed encoding (like most binary data formats).
-  ///@since 2.8
-  jni.JObject createGenerator5(
-    jni.JObject out,
-  ) {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_createGenerator5,
-        jni.JniCallType.objectType,
-        [out.reference]).object);
-  }
-
-  static final _id_createJsonParser = jniAccessors.getMethodIDOf(
-      _classRef,
-      r"createJsonParser",
-      r"(Ljava/io/File;)Lcom/fasterxml/jackson/core/JsonParser;");
-
-  /// from: public com.fasterxml.jackson.core.JsonParser createJsonParser(java.io.File f)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method for constructing JSON parser instance to parse
-  /// contents of specified file.
-  ///
-  /// Encoding is auto-detected from contents according to JSON
-  /// specification recommended mechanism. Json specification
-  /// supports only UTF-8, UTF-16 and UTF-32 as valid encodings,
-  /// so auto-detection implemented only for this charsets.
-  /// For other charsets use \#createParser(java.io.Reader).
-  ///
-  ///
-  /// Underlying input stream (needed for reading contents)
-  /// will be __owned__ (and managed, i.e. closed as need be) by
-  /// the parser, since caller has no access to it.
-  ///@param f File that contains JSON content to parse
-  ///@return Parser constructed
-  ///@throws IOException if parser initialization fails due to I/O (read) problem
-  ///@throws JsonParseException if parser initialization fails due to content decoding problem
-  ///@deprecated Since 2.2, use \#createParser(File) instead.
-  jsonparser_.JsonParser createJsonParser(
-    jni.JObject f,
-  ) {
-    return const jsonparser_.$JsonParserType().fromRef(jniAccessors
-        .callMethodWithArgs(reference, _id_createJsonParser,
-            jni.JniCallType.objectType, [f.reference]).object);
-  }
-
-  static final _id_createJsonParser1 = jniAccessors.getMethodIDOf(
-      _classRef,
-      r"createJsonParser",
-      r"(Ljava/net/URL;)Lcom/fasterxml/jackson/core/JsonParser;");
-
-  /// from: public com.fasterxml.jackson.core.JsonParser createJsonParser(java.net.URL url)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method for constructing JSON parser instance to parse
-  /// contents of resource reference by given URL.
-  ///
-  /// Encoding is auto-detected from contents according to JSON
-  /// specification recommended mechanism. Json specification
-  /// supports only UTF-8, UTF-16 and UTF-32 as valid encodings,
-  /// so auto-detection implemented only for this charsets.
-  /// For other charsets use \#createParser(java.io.Reader).
-  ///
-  /// Underlying input stream (needed for reading contents)
-  /// will be __owned__ (and managed, i.e. closed as need be) by
-  /// the parser, since caller has no access to it.
-  ///@param url URL pointing to resource that contains JSON content to parse
-  ///@return Parser constructed
-  ///@throws IOException if parser initialization fails due to I/O (read) problem
-  ///@throws JsonParseException if parser initialization fails due to content decoding problem
-  ///@deprecated Since 2.2, use \#createParser(URL) instead.
-  jsonparser_.JsonParser createJsonParser1(
-    jni.JObject url,
-  ) {
-    return const jsonparser_.$JsonParserType().fromRef(jniAccessors
-        .callMethodWithArgs(reference, _id_createJsonParser1,
-            jni.JniCallType.objectType, [url.reference]).object);
-  }
-
-  static final _id_createJsonParser2 = jniAccessors.getMethodIDOf(
-      _classRef,
-      r"createJsonParser",
-      r"(Ljava/io/InputStream;)Lcom/fasterxml/jackson/core/JsonParser;");
-
-  /// from: public com.fasterxml.jackson.core.JsonParser createJsonParser(java.io.InputStream in)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method for constructing JSON parser instance to parse
-  /// the contents accessed via specified input stream.
-  ///
-  /// The input stream will __not be owned__ by
-  /// the parser, it will still be managed (i.e. closed if
-  /// end-of-stream is reacher, or parser close method called)
-  /// if (and only if) com.fasterxml.jackson.core.JsonParser.Feature\#AUTO_CLOSE_SOURCE
-  /// is enabled.
-  ///
-  ///
-  /// Note: no encoding argument is taken since it can always be
-  /// auto-detected as suggested by JSON RFC. Json specification
-  /// supports only UTF-8, UTF-16 and UTF-32 as valid encodings,
-  /// so auto-detection implemented only for this charsets.
-  /// For other charsets use \#createParser(java.io.Reader).
-  ///@param in InputStream to use for reading JSON content to parse
-  ///@return Parser constructed
-  ///@throws IOException if parser initialization fails due to I/O (read) problem
-  ///@throws JsonParseException if parser initialization fails due to content decoding problem
-  ///@deprecated Since 2.2, use \#createParser(InputStream) instead.
-  jsonparser_.JsonParser createJsonParser2(
-    jni.JObject in0,
-  ) {
-    return const jsonparser_.$JsonParserType().fromRef(jniAccessors
-        .callMethodWithArgs(reference, _id_createJsonParser2,
-            jni.JniCallType.objectType, [in0.reference]).object);
-  }
-
-  static final _id_createJsonParser3 = jniAccessors.getMethodIDOf(
-      _classRef,
-      r"createJsonParser",
-      r"(Ljava/io/Reader;)Lcom/fasterxml/jackson/core/JsonParser;");
-
-  /// from: public com.fasterxml.jackson.core.JsonParser createJsonParser(java.io.Reader r)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method for constructing parser for parsing
-  /// the contents accessed via specified Reader.
-  ///
-  /// The read stream will __not be owned__ by
-  /// the parser, it will still be managed (i.e. closed if
-  /// end-of-stream is reacher, or parser close method called)
-  /// if (and only if) com.fasterxml.jackson.core.JsonParser.Feature\#AUTO_CLOSE_SOURCE
-  /// is enabled.
-  ///@param r Reader to use for reading JSON content to parse
-  ///@return Parser constructed
-  ///@throws IOException if parser initialization fails due to I/O (read) problem
-  ///@throws JsonParseException if parser initialization fails due to content decoding problem
-  ///@deprecated Since 2.2, use \#createParser(Reader) instead.
-  jsonparser_.JsonParser createJsonParser3(
-    jni.JObject r,
-  ) {
-    return const jsonparser_.$JsonParserType().fromRef(jniAccessors
-        .callMethodWithArgs(reference, _id_createJsonParser3,
-            jni.JniCallType.objectType, [r.reference]).object);
-  }
-
-  static final _id_createJsonParser4 = jniAccessors.getMethodIDOf(_classRef,
-      r"createJsonParser", r"([B)Lcom/fasterxml/jackson/core/JsonParser;");
-
-  /// from: public com.fasterxml.jackson.core.JsonParser createJsonParser(byte[] data)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method for constructing parser for parsing the contents of given byte array.
-  ///@param data Input content to parse
-  ///@return Parser constructed
-  ///@throws IOException if parser initialization fails due to I/O (read) problem
-  ///@throws JsonParseException if parser initialization fails due to content decoding problem
-  ///@deprecated Since 2.2, use \#createParser(byte[]) instead.
-  jsonparser_.JsonParser createJsonParser4(
-    jni.JArray<jni.JByte> data,
-  ) {
-    return const jsonparser_.$JsonParserType().fromRef(jniAccessors
-        .callMethodWithArgs(reference, _id_createJsonParser4,
-            jni.JniCallType.objectType, [data.reference]).object);
-  }
-
-  static final _id_createJsonParser5 = jniAccessors.getMethodIDOf(_classRef,
-      r"createJsonParser", r"([BII)Lcom/fasterxml/jackson/core/JsonParser;");
-
-  /// from: public com.fasterxml.jackson.core.JsonParser createJsonParser(byte[] data, int offset, int len)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method for constructing parser for parsing
-  /// the contents of given byte array.
-  ///@param data Buffer that contains data to parse
-  ///@param offset Offset of the first data byte within buffer
-  ///@param len Length of contents to parse within buffer
-  ///@return Parser constructed
-  ///@throws IOException if parser initialization fails due to I/O (read) problem
-  ///@throws JsonParseException if parser initialization fails due to content decoding problem
-  ///@deprecated Since 2.2, use \#createParser(byte[],int,int) instead.
-  jsonparser_.JsonParser createJsonParser5(
-    jni.JArray<jni.JByte> data,
-    int offset,
-    int len,
-  ) {
-    return const jsonparser_.$JsonParserType().fromRef(jniAccessors
-        .callMethodWithArgs(
-            reference, _id_createJsonParser5, jni.JniCallType.objectType, [
-      data.reference,
-      jni.JValueInt(offset),
-      jni.JValueInt(len)
-    ]).object);
-  }
-
-  static final _id_createJsonParser6 = jniAccessors.getMethodIDOf(
-      _classRef,
-      r"createJsonParser",
-      r"(Ljava/lang/String;)Lcom/fasterxml/jackson/core/JsonParser;");
-
-  /// from: public com.fasterxml.jackson.core.JsonParser createJsonParser(java.lang.String content)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method for constructing parser for parsing
-  /// contents of given String.
-  ///@param content Input content to parse
-  ///@return Parser constructed
-  ///@throws IOException if parser initialization fails due to I/O (read) problem
-  ///@throws JsonParseException if parser initialization fails due to content decoding problem
-  ///@deprecated Since 2.2, use \#createParser(String) instead.
-  jsonparser_.JsonParser createJsonParser6(
-    jni.JString content,
-  ) {
-    return const jsonparser_.$JsonParserType().fromRef(jniAccessors
-        .callMethodWithArgs(reference, _id_createJsonParser6,
-            jni.JniCallType.objectType, [content.reference]).object);
-  }
-
-  static final _id_createJsonGenerator = jniAccessors.getMethodIDOf(
-      _classRef,
-      r"createJsonGenerator",
-      r"(Ljava/io/OutputStream;Lcom/fasterxml/jackson/core/JsonEncoding;)Lcom/fasterxml/jackson/core/JsonGenerator;");
-
-  /// from: public com.fasterxml.jackson.core.JsonGenerator createJsonGenerator(java.io.OutputStream out, com.fasterxml.jackson.core.JsonEncoding enc)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method for constructing JSON generator for writing JSON content
-  /// using specified output stream.
-  /// Encoding to use must be specified, and needs to be one of available
-  /// types (as per JSON specification).
-  ///
-  /// Underlying stream __is NOT owned__ by the generator constructed,
-  /// so that generator will NOT close the output stream when
-  /// JsonGenerator\#close is called (unless auto-closing
-  /// feature,
-  /// com.fasterxml.jackson.core.JsonGenerator.Feature\#AUTO_CLOSE_TARGET
-  /// is enabled).
-  /// Using application needs to close it explicitly if this is the case.
-  ///
-  /// Note: there are formats that use fixed encoding (like most binary data formats)
-  /// and that ignore passed in encoding.
-  ///@param out OutputStream to use for writing JSON content
-  ///@param enc Character encoding to use
-  ///@return Generator constructed
-  ///@throws IOException if parser initialization fails due to I/O (write) problem
-  ///@deprecated Since 2.2, use \#createGenerator(OutputStream, JsonEncoding) instead.
-  jni.JObject createJsonGenerator(
-    jni.JObject out,
-    jni.JObject enc,
-  ) {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_createJsonGenerator,
-        jni.JniCallType.objectType,
-        [out.reference, enc.reference]).object);
-  }
-
-  static final _id_createJsonGenerator1 = jniAccessors.getMethodIDOf(
-      _classRef,
-      r"createJsonGenerator",
-      r"(Ljava/io/Writer;)Lcom/fasterxml/jackson/core/JsonGenerator;");
-
-  /// from: public com.fasterxml.jackson.core.JsonGenerator createJsonGenerator(java.io.Writer out)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method for constructing JSON generator for writing JSON content
-  /// using specified Writer.
-  ///
-  /// Underlying stream __is NOT owned__ by the generator constructed,
-  /// so that generator will NOT close the Reader when
-  /// JsonGenerator\#close is called (unless auto-closing
-  /// feature,
-  /// com.fasterxml.jackson.core.JsonGenerator.Feature\#AUTO_CLOSE_TARGET is enabled).
-  /// Using application needs to close it explicitly.
-  ///@param out Writer to use for writing JSON content
-  ///@return Generator constructed
-  ///@throws IOException if parser initialization fails due to I/O (write) problem
-  ///@deprecated Since 2.2, use \#createGenerator(Writer) instead.
-  jni.JObject createJsonGenerator1(
-    jni.JObject out,
-  ) {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_createJsonGenerator1,
-        jni.JniCallType.objectType,
-        [out.reference]).object);
-  }
-
-  static final _id_createJsonGenerator2 = jniAccessors.getMethodIDOf(
-      _classRef,
-      r"createJsonGenerator",
-      r"(Ljava/io/OutputStream;)Lcom/fasterxml/jackson/core/JsonGenerator;");
-
-  /// from: public com.fasterxml.jackson.core.JsonGenerator createJsonGenerator(java.io.OutputStream out)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Convenience method for constructing generator that uses default
-  /// encoding of the format (UTF-8 for JSON and most other data formats).
-  ///
-  /// Note: there are formats that use fixed encoding (like most binary data formats).
-  ///@param out OutputStream to use for writing JSON content
-  ///@return Generator constructed
-  ///@throws IOException if parser initialization fails due to I/O (write) problem
-  ///@deprecated Since 2.2, use \#createGenerator(OutputStream) instead.
-  jni.JObject createJsonGenerator2(
-    jni.JObject out,
-  ) {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_createJsonGenerator2,
-        jni.JniCallType.objectType,
-        [out.reference]).object);
-  }
-}
-
-class $JsonFactoryType extends jni.JObjType<JsonFactory> {
-  const $JsonFactoryType();
-
-  @override
-  String get signature => r"Lcom/fasterxml/jackson/core/JsonFactory;";
-
-  @override
-  JsonFactory fromRef(jni.JObjectPtr ref) => JsonFactory.fromRef(ref);
-
-  @override
-  jni.JObjType get superType => const jni.JObjectType();
-
-  @override
-  final superCount = 1;
-
-  @override
-  int get hashCode => ($JsonFactoryType).hashCode;
-
-  @override
-  bool operator ==(Object other) {
-    return other.runtimeType == $JsonFactoryType && other is $JsonFactoryType;
-  }
-}
-
-/// from: com.fasterxml.jackson.core.JsonFactory$Feature
-///
-/// Enumeration that defines all on/off features that can only be
-/// changed for JsonFactory.
-class JsonFactory_Feature extends jni.JObject {
-  @override
-  late final jni.JObjType $type = type;
-
-  JsonFactory_Feature.fromRef(
-    jni.JObjectPtr ref,
-  ) : super.fromRef(ref);
-
-  static final _classRef = jniAccessors
-      .getClassOf(r"com/fasterxml/jackson/core/JsonFactory$Feature");
-
-  /// The type which includes information such as the signature of this class.
-  static const type = $JsonFactory_FeatureType();
-  static final _id_values = jniAccessors.getStaticMethodIDOf(_classRef,
-      r"values", r"()[Lcom/fasterxml/jackson/core/JsonFactory$Feature;");
-
-  /// from: static public com.fasterxml.jackson.core.JsonFactory.Feature[] values()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  static jni.JArray<JsonFactory_Feature> values() {
-    return const jni.JArrayType($JsonFactory_FeatureType()).fromRef(jniAccessors
-        .callStaticMethodWithArgs(
-            _classRef, _id_values, jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_valueOf = jniAccessors.getStaticMethodIDOf(
-      _classRef,
-      r"valueOf",
-      r"(Ljava/lang/String;)Lcom/fasterxml/jackson/core/JsonFactory$Feature;");
-
-  /// from: static public com.fasterxml.jackson.core.JsonFactory.Feature valueOf(java.lang.String name)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  static JsonFactory_Feature valueOf(
-    jni.JString name,
-  ) {
-    return const $JsonFactory_FeatureType().fromRef(jniAccessors
-        .callStaticMethodWithArgs(_classRef, _id_valueOf,
-            jni.JniCallType.objectType, [name.reference]).object);
-  }
-
-  static final _id_collectDefaults =
-      jniAccessors.getStaticMethodIDOf(_classRef, r"collectDefaults", r"()I");
-
-  /// from: static public int collectDefaults()
-  ///
-  /// Method that calculates bit set (flags) of all features that
-  /// are enabled by default.
-  ///@return Bit field of features enabled by default
-  static int collectDefaults() {
-    return jniAccessors.callStaticMethodWithArgs(
-        _classRef, _id_collectDefaults, jni.JniCallType.intType, []).integer;
-  }
-
-  static final _id_enabledByDefault =
-      jniAccessors.getMethodIDOf(_classRef, r"enabledByDefault", r"()Z");
-
-  /// from: public boolean enabledByDefault()
-  bool enabledByDefault() {
-    return jniAccessors.callMethodWithArgs(reference, _id_enabledByDefault,
-        jni.JniCallType.booleanType, []).boolean;
-  }
-
-  static final _id_enabledIn =
-      jniAccessors.getMethodIDOf(_classRef, r"enabledIn", r"(I)Z");
-
-  /// from: public boolean enabledIn(int flags)
-  bool enabledIn(
-    int flags,
-  ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_enabledIn,
-        jni.JniCallType.booleanType, [jni.JValueInt(flags)]).boolean;
-  }
-
-  static final _id_getMask =
-      jniAccessors.getMethodIDOf(_classRef, r"getMask", r"()I");
-
-  /// from: public int getMask()
-  int getMask() {
-    return jniAccessors.callMethodWithArgs(
-        reference, _id_getMask, jni.JniCallType.intType, []).integer;
-  }
-}
-
-class $JsonFactory_FeatureType extends jni.JObjType<JsonFactory_Feature> {
-  const $JsonFactory_FeatureType();
-
-  @override
-  String get signature => r"Lcom/fasterxml/jackson/core/JsonFactory$Feature;";
-
-  @override
-  JsonFactory_Feature fromRef(jni.JObjectPtr ref) =>
-      JsonFactory_Feature.fromRef(ref);
-
-  @override
-  jni.JObjType get superType => const jni.JObjectType();
-
-  @override
-  final superCount = 1;
-
-  @override
-  int get hashCode => ($JsonFactory_FeatureType).hashCode;
-
-  @override
-  bool operator ==(Object other) {
-    return other.runtimeType == $JsonFactory_FeatureType &&
-        other is $JsonFactory_FeatureType;
-  }
-}
diff --git a/pkgs/jnigen/test/jackson_core_test/third_party/dart_only/lib/com/fasterxml/jackson/core/JsonParser.dart b/pkgs/jnigen/test/jackson_core_test/third_party/dart_only/lib/com/fasterxml/jackson/core/JsonParser.dart
deleted file mode 100644
index e8caa42..0000000
--- a/pkgs/jnigen/test/jackson_core_test/third_party/dart_only/lib/com/fasterxml/jackson/core/JsonParser.dart
+++ /dev/null
@@ -1,2640 +0,0 @@
-// Generated from jackson-core which is licensed under the Apache License 2.0.
-// The following copyright from the original authors applies.
-// See https://github.com/FasterXML/jackson-core/blob/2.14/LICENSE
-//
-// Copyright (c) 2007 - The Jackson Project Authors
-// Licensed under the Apache License, Version 2.0 (the "License")
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// Autogenerated by jnigen. DO NOT EDIT!
-
-// ignore_for_file: annotate_overrides
-// ignore_for_file: camel_case_extensions
-// ignore_for_file: camel_case_types
-// ignore_for_file: constant_identifier_names
-// ignore_for_file: file_names
-// ignore_for_file: no_leading_underscores_for_local_identifiers
-// ignore_for_file: non_constant_identifier_names
-// ignore_for_file: overridden_fields
-// ignore_for_file: unnecessary_cast
-// ignore_for_file: unused_element
-// ignore_for_file: unused_field
-// ignore_for_file: unused_import
-// ignore_for_file: unused_shown_name
-
-import "dart:isolate" show ReceivePort;
-import "dart:ffi" as ffi;
-import "package:jni/internal_helpers_for_jnigen.dart";
-import "package:jni/jni.dart" as jni;
-
-import "JsonToken.dart" as jsontoken_;
-import "../../../../_init.dart";
-
-/// from: com.fasterxml.jackson.core.JsonParser
-///
-/// Base class that defines public API for reading JSON content.
-/// Instances are created using factory methods of
-/// a JsonFactory instance.
-///@author Tatu Saloranta
-class JsonParser extends jni.JObject {
-  @override
-  late final jni.JObjType $type = type;
-
-  JsonParser.fromRef(
-    jni.JObjectPtr ref,
-  ) : super.fromRef(ref);
-
-  static final _classRef =
-      jniAccessors.getClassOf(r"com/fasterxml/jackson/core/JsonParser");
-
-  /// The type which includes information such as the signature of this class.
-  static const type = $JsonParserType();
-  static final _id_DEFAULT_READ_CAPABILITIES = jniAccessors.getStaticFieldIDOf(
-    _classRef,
-    r"DEFAULT_READ_CAPABILITIES",
-    r"Lcom/fasterxml/jackson/core/util/JacksonFeatureSet;",
-  );
-
-  /// from: static protected final com.fasterxml.jackson.core.util.JacksonFeatureSet<com.fasterxml.jackson.core.StreamReadCapability> DEFAULT_READ_CAPABILITIES
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Default set of StreamReadCapabilityies that may be used as
-  /// basis for format-specific readers (or as bogus instance if non-null
-  /// set needs to be passed).
-  ///@since 2.12
-  static jni.JObject get DEFAULT_READ_CAPABILITIES =>
-      const jni.JObjectType().fromRef(jniAccessors
-          .getStaticField(_classRef, _id_DEFAULT_READ_CAPABILITIES,
-              jni.JniCallType.objectType)
-          .object);
-
-  static final _id_ctor =
-      jniAccessors.getMethodIDOf(_classRef, r"<init>", r"()V");
-
-  /// from: protected void <init>()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  factory JsonParser() {
-    return JsonParser.fromRef(
-        jniAccessors.newObjectWithArgs(_classRef, _id_ctor, []).object);
-  }
-
-  static final _id_ctor1 =
-      jniAccessors.getMethodIDOf(_classRef, r"<init>", r"(I)V");
-
-  /// from: protected void <init>(int features)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  factory JsonParser.ctor1(
-    int features,
-  ) {
-    return JsonParser.fromRef(jniAccessors.newObjectWithArgs(
-        _classRef, _id_ctor1, [jni.JValueInt(features)]).object);
-  }
-
-  static final _id_getCodec = jniAccessors.getMethodIDOf(
-      _classRef, r"getCodec", r"()Lcom/fasterxml/jackson/core/ObjectCodec;");
-
-  /// from: public abstract com.fasterxml.jackson.core.ObjectCodec getCodec()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Accessor for ObjectCodec associated with this
-  /// parser, if any. Codec is used by \#readValueAs(Class)
-  /// method (and its variants).
-  ///@return Codec assigned to this parser, if any; {@code null} if none
-  jni.JObject getCodec() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
-        reference, _id_getCodec, jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_setCodec = jniAccessors.getMethodIDOf(
-      _classRef, r"setCodec", r"(Lcom/fasterxml/jackson/core/ObjectCodec;)V");
-
-  /// from: public abstract void setCodec(com.fasterxml.jackson.core.ObjectCodec oc)
-  ///
-  /// Setter that allows defining ObjectCodec associated with this
-  /// parser, if any. Codec is used by \#readValueAs(Class)
-  /// method (and its variants).
-  ///@param oc Codec to assign, if any; {@code null} if none
-  void setCodec(
-    jni.JObject oc,
-  ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_setCodec,
-        jni.JniCallType.voidType, [oc.reference]).check();
-  }
-
-  static final _id_getInputSource = jniAccessors.getMethodIDOf(
-      _classRef, r"getInputSource", r"()Ljava/lang/Object;");
-
-  /// from: public java.lang.Object getInputSource()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method that can be used to get access to object that is used
-  /// to access input being parsed; this is usually either
-  /// InputStream or Reader, depending on what
-  /// parser was constructed with.
-  /// Note that returned value may be null in some cases; including
-  /// case where parser implementation does not want to exposed raw
-  /// source to caller.
-  /// In cases where input has been decorated, object returned here
-  /// is the decorated version; this allows some level of interaction
-  /// between users of parser and decorator object.
-  ///
-  /// In general use of this accessor should be considered as
-  /// "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(jniAccessors.callMethodWithArgs(
-        reference, _id_getInputSource, jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_setRequestPayloadOnError = jniAccessors.getMethodIDOf(
-      _classRef,
-      r"setRequestPayloadOnError",
-      r"(Lcom/fasterxml/jackson/core/util/RequestPayload;)V");
-
-  /// from: public void setRequestPayloadOnError(com.fasterxml.jackson.core.util.RequestPayload payload)
-  ///
-  /// Sets the payload to be passed if JsonParseException is thrown.
-  ///@param payload Payload to pass
-  ///@since 2.8
-  void setRequestPayloadOnError(
-    jni.JObject payload,
-  ) {
-    return jniAccessors.callMethodWithArgs(
-        reference,
-        _id_setRequestPayloadOnError,
-        jni.JniCallType.voidType,
-        [payload.reference]).check();
-  }
-
-  static final _id_setRequestPayloadOnError1 = jniAccessors.getMethodIDOf(
-      _classRef, r"setRequestPayloadOnError", r"([BLjava/lang/String;)V");
-
-  /// from: public void setRequestPayloadOnError(byte[] payload, java.lang.String charset)
-  ///
-  /// Sets the byte[] request payload and the charset
-  ///@param payload Payload to pass
-  ///@param charset Character encoding for (lazily) decoding payload
-  ///@since 2.8
-  void setRequestPayloadOnError1(
-    jni.JArray<jni.JByte> payload,
-    jni.JString charset,
-  ) {
-    return jniAccessors.callMethodWithArgs(
-        reference,
-        _id_setRequestPayloadOnError1,
-        jni.JniCallType.voidType,
-        [payload.reference, charset.reference]).check();
-  }
-
-  static final _id_setRequestPayloadOnError2 = jniAccessors.getMethodIDOf(
-      _classRef, r"setRequestPayloadOnError", r"(Ljava/lang/String;)V");
-
-  /// from: public void setRequestPayloadOnError(java.lang.String payload)
-  ///
-  /// Sets the String request payload
-  ///@param payload Payload to pass
-  ///@since 2.8
-  void setRequestPayloadOnError2(
-    jni.JString payload,
-  ) {
-    return jniAccessors.callMethodWithArgs(
-        reference,
-        _id_setRequestPayloadOnError2,
-        jni.JniCallType.voidType,
-        [payload.reference]).check();
-  }
-
-  static final _id_setSchema = jniAccessors.getMethodIDOf(
-      _classRef, r"setSchema", r"(Lcom/fasterxml/jackson/core/FormatSchema;)V");
-
-  /// from: public void setSchema(com.fasterxml.jackson.core.FormatSchema schema)
-  ///
-  /// Method to call to make this parser use specified schema. Method must
-  /// be called before trying to parse any content, right after parser instance
-  /// has been created.
-  /// Note that not all parsers support schemas; and those that do usually only
-  /// accept specific types of schemas: ones defined for data format parser can read.
-  ///
-  /// If parser does not support specified schema, UnsupportedOperationException
-  /// is thrown.
-  ///@param schema Schema to use
-  ///@throws UnsupportedOperationException if parser does not support schema
-  void setSchema(
-    jni.JObject schema,
-  ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_setSchema,
-        jni.JniCallType.voidType, [schema.reference]).check();
-  }
-
-  static final _id_getSchema = jniAccessors.getMethodIDOf(
-      _classRef, r"getSchema", r"()Lcom/fasterxml/jackson/core/FormatSchema;");
-
-  /// from: public com.fasterxml.jackson.core.FormatSchema getSchema()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method for accessing Schema that this parser uses, if any.
-  /// Default implementation returns null.
-  ///@return Schema in use by this parser, if any; {@code null} if none
-  ///@since 2.1
-  jni.JObject getSchema() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
-        reference, _id_getSchema, jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_canUseSchema = jniAccessors.getMethodIDOf(_classRef,
-      r"canUseSchema", r"(Lcom/fasterxml/jackson/core/FormatSchema;)Z");
-
-  /// from: public boolean canUseSchema(com.fasterxml.jackson.core.FormatSchema schema)
-  ///
-  /// Method that can be used to verify that given schema can be used with
-  /// this parser (using \#setSchema).
-  ///@param schema Schema to check
-  ///@return True if this parser can use given schema; false if not
-  bool canUseSchema(
-    jni.JObject schema,
-  ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_canUseSchema,
-        jni.JniCallType.booleanType, [schema.reference]).boolean;
-  }
-
-  static final _id_requiresCustomCodec =
-      jniAccessors.getMethodIDOf(_classRef, r"requiresCustomCodec", r"()Z");
-
-  /// from: public boolean requiresCustomCodec()
-  ///
-  /// Method that can be called to determine if a custom
-  /// ObjectCodec is needed for binding data parsed
-  /// using JsonParser constructed by this factory
-  /// (which typically also implies the same for serialization
-  /// with JsonGenerator).
-  ///@return True if format-specific codec is needed with this parser; false if a general
-  ///   ObjectCodec is enough
-  ///@since 2.1
-  bool requiresCustomCodec() {
-    return jniAccessors.callMethodWithArgs(reference, _id_requiresCustomCodec,
-        jni.JniCallType.booleanType, []).boolean;
-  }
-
-  static final _id_canParseAsync =
-      jniAccessors.getMethodIDOf(_classRef, r"canParseAsync", r"()Z");
-
-  /// from: public boolean canParseAsync()
-  ///
-  /// Method that can be called to determine if this parser instance
-  /// uses non-blocking ("asynchronous") input access for decoding or not.
-  /// Access mode is determined by earlier calls via JsonFactory;
-  /// it may not be changed after construction.
-  ///
-  /// If non-blocking decoding is (@code true}, it is possible to call
-  /// \#getNonBlockingInputFeeder() to obtain object to use
-  /// for feeding input; otherwise (<code>false</code> returned)
-  /// input is read by blocking
-  ///@return True if this is a non-blocking ("asynchronous") parser
-  ///@since 2.9
-  bool canParseAsync() {
-    return jniAccessors.callMethodWithArgs(
-        reference, _id_canParseAsync, jni.JniCallType.booleanType, []).boolean;
-  }
-
-  static final _id_getNonBlockingInputFeeder = jniAccessors.getMethodIDOf(
-      _classRef,
-      r"getNonBlockingInputFeeder",
-      r"()Lcom/fasterxml/jackson/core/async/NonBlockingInputFeeder;");
-
-  /// from: public com.fasterxml.jackson.core.async.NonBlockingInputFeeder getNonBlockingInputFeeder()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method that will either return a feeder instance (if parser uses
-  /// non-blocking, aka asynchronous access); or <code>null</code> for
-  /// parsers that use blocking I/O.
-  ///@return Input feeder to use with non-blocking (async) parsing
-  ///@since 2.9
-  jni.JObject getNonBlockingInputFeeder() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_getNonBlockingInputFeeder,
-        jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_getReadCapabilities = jniAccessors.getMethodIDOf(
-      _classRef,
-      r"getReadCapabilities",
-      r"()Lcom/fasterxml/jackson/core/util/JacksonFeatureSet;");
-
-  /// from: public com.fasterxml.jackson.core.util.JacksonFeatureSet<com.fasterxml.jackson.core.StreamReadCapability> getReadCapabilities()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Accessor for getting metadata on capabilities of this parser, based on
-  /// underlying data format being read (directly or indirectly).
-  ///@return Set of read capabilities for content to read via this parser
-  ///@since 2.12
-  jni.JObject getReadCapabilities() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_getReadCapabilities,
-        jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_version = jniAccessors.getMethodIDOf(
-      _classRef, r"version", r"()Lcom/fasterxml/jackson/core/Version;");
-
-  /// from: public abstract com.fasterxml.jackson.core.Version version()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Accessor for getting version of the core package, given a parser instance.
-  /// Left for sub-classes to implement.
-  ///@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(jniAccessors.callMethodWithArgs(
-        reference, _id_version, jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_close =
-      jniAccessors.getMethodIDOf(_classRef, r"close", r"()V");
-
-  /// from: public abstract void close()
-  ///
-  /// Closes the parser so that no further iteration or data access
-  /// can be made; will also close the underlying input source
-  /// if parser either __owns__ the input source, or feature
-  /// Feature\#AUTO_CLOSE_SOURCE is enabled.
-  /// Whether parser owns the input source depends on factory
-  /// method that was used to construct instance (so check
-  /// com.fasterxml.jackson.core.JsonFactory for details,
-  /// but the general
-  /// idea is that if caller passes in closable resource (such
-  /// as InputStream or Reader) parser does NOT
-  /// own the source; but if it passes a reference (such as
-  /// java.io.File or java.net.URL and creates
-  /// stream or reader it does own them.
-  ///@throws IOException if there is either an underlying I/O problem
-  void close() {
-    return jniAccessors.callMethodWithArgs(
-        reference, _id_close, jni.JniCallType.voidType, []).check();
-  }
-
-  static final _id_isClosed =
-      jniAccessors.getMethodIDOf(_classRef, r"isClosed", r"()Z");
-
-  /// from: public abstract boolean isClosed()
-  ///
-  /// Method that can be called to determine whether this parser
-  /// is closed or not. If it is closed, no new tokens can be
-  /// retrieved by calling \#nextToken (and the underlying
-  /// stream may be closed). Closing may be due to an explicit
-  /// call to \#close or because parser has encountered
-  /// end of input.
-  ///@return {@code True} if this parser instance has been closed
-  bool isClosed() {
-    return jniAccessors.callMethodWithArgs(
-        reference, _id_isClosed, jni.JniCallType.booleanType, []).boolean;
-  }
-
-  static final _id_getParsingContext = jniAccessors.getMethodIDOf(
-      _classRef,
-      r"getParsingContext",
-      r"()Lcom/fasterxml/jackson/core/JsonStreamContext;");
-
-  /// from: public abstract com.fasterxml.jackson.core.JsonStreamContext getParsingContext()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method that can be used to access current parsing context reader
-  /// is in. There are 3 different types: root, array and object contexts,
-  /// with slightly different available information. Contexts are
-  /// hierarchically nested, and can be used for example for figuring
-  /// out part of the input document that correspond to specific
-  /// array or object (for highlighting purposes, or error reporting).
-  /// Contexts can also be used for simple xpath-like matching of
-  /// input, if so desired.
-  ///@return Stream input context (JsonStreamContext) associated with this parser
-  jni.JObject getParsingContext() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_getParsingContext,
-        jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_currentLocation = jniAccessors.getMethodIDOf(_classRef,
-      r"currentLocation", r"()Lcom/fasterxml/jackson/core/JsonLocation;");
-
-  /// from: public com.fasterxml.jackson.core.JsonLocation currentLocation()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method that returns location of the last processed input unit (character
-  /// or byte) from the input;
-  /// usually for error reporting purposes.
-  ///
-  /// Note that the location is not guaranteed to be accurate (although most
-  /// implementation will try their best): some implementations may only
-  /// report specific boundary locations (start or end locations of tokens)
-  /// and others only return JsonLocation\#NA due to not having access
-  /// to input location information (when delegating actual decoding work
-  /// to other library)
-  ///@return Location of the last processed input unit (byte or character)
-  ///@since 2.13
-  jni.JObject currentLocation() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
-        reference, _id_currentLocation, jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_currentTokenLocation = jniAccessors.getMethodIDOf(_classRef,
-      r"currentTokenLocation", r"()Lcom/fasterxml/jackson/core/JsonLocation;");
-
-  /// from: public com.fasterxml.jackson.core.JsonLocation currentTokenLocation()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method that return the __starting__ location of the current
-  /// (most recently returned)
-  /// token; that is, the position of the first input unit (character or byte) from input
-  /// that starts the current token.
-  ///
-  /// Note that the location is not guaranteed to be accurate (although most
-  /// implementation will try their best): some implementations may only
-  /// return JsonLocation\#NA due to not having access
-  /// to input location information (when delegating actual decoding work
-  /// to other library)
-  ///@return Starting location of the token parser currently points to
-  ///@since 2.13 (will eventually replace \#getTokenLocation)
-  jni.JObject currentTokenLocation() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_currentTokenLocation,
-        jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_getCurrentLocation = jniAccessors.getMethodIDOf(_classRef,
-      r"getCurrentLocation", r"()Lcom/fasterxml/jackson/core/JsonLocation;");
-
-  /// from: public abstract com.fasterxml.jackson.core.JsonLocation getCurrentLocation()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Alias for \#currentLocation(), to be deprecated in later
-  /// Jackson 2.x versions (and removed from Jackson 3.0).
-  ///@return Location of the last processed input unit (byte or character)
-  jni.JObject getCurrentLocation() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_getCurrentLocation,
-        jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_getTokenLocation = jniAccessors.getMethodIDOf(_classRef,
-      r"getTokenLocation", r"()Lcom/fasterxml/jackson/core/JsonLocation;");
-
-  /// from: public abstract com.fasterxml.jackson.core.JsonLocation getTokenLocation()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Alias for \#currentTokenLocation(), to be deprecated in later
-  /// 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(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_getTokenLocation,
-        jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_currentValue = jniAccessors.getMethodIDOf(
-      _classRef, r"currentValue", r"()Ljava/lang/Object;");
-
-  /// from: public java.lang.Object currentValue()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Helper method, usually equivalent to:
-  ///<code>
-  ///   getParsingContext().getCurrentValue();
-  ///</code>
-  ///
-  /// Note that "current value" is NOT populated (or used) by Streaming parser;
-  /// it is only used by higher-level data-binding functionality.
-  /// The reason it is included here is that it can be stored and accessed hierarchically,
-  /// and gets passed through data-binding.
-  ///@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(jniAccessors.callMethodWithArgs(
-        reference, _id_currentValue, jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_assignCurrentValue = jniAccessors.getMethodIDOf(
-      _classRef, r"assignCurrentValue", r"(Ljava/lang/Object;)V");
-
-  /// from: public void assignCurrentValue(java.lang.Object v)
-  ///
-  /// Helper method, usually equivalent to:
-  ///<code>
-  ///   getParsingContext().setCurrentValue(v);
-  ///</code>
-  ///@param v Current value to assign for the current input context of this parser
-  ///@since 2.13 (added as replacement for older \#setCurrentValue
-  void assignCurrentValue(
-    jni.JObject v,
-  ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_assignCurrentValue,
-        jni.JniCallType.voidType, [v.reference]).check();
-  }
-
-  static final _id_getCurrentValue = jniAccessors.getMethodIDOf(
-      _classRef, r"getCurrentValue", r"()Ljava/lang/Object;");
-
-  /// from: public java.lang.Object getCurrentValue()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Alias for \#currentValue(), to be deprecated in later
-  /// 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(jniAccessors.callMethodWithArgs(
-        reference, _id_getCurrentValue, jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_setCurrentValue = jniAccessors.getMethodIDOf(
-      _classRef, r"setCurrentValue", r"(Ljava/lang/Object;)V");
-
-  /// from: public void setCurrentValue(java.lang.Object v)
-  ///
-  /// Alias for \#assignCurrentValue, to be deprecated in later
-  /// Jackson 2.x versions (and removed from Jackson 3.0).
-  ///@param v Current value to assign for the current input context of this parser
-  void setCurrentValue(
-    jni.JObject v,
-  ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_setCurrentValue,
-        jni.JniCallType.voidType, [v.reference]).check();
-  }
-
-  static final _id_releaseBuffered = jniAccessors.getMethodIDOf(
-      _classRef, r"releaseBuffered", r"(Ljava/io/OutputStream;)I");
-
-  /// from: public int releaseBuffered(java.io.OutputStream out)
-  ///
-  /// Method that can be called to push back any content that
-  /// has been read but not consumed by the parser. This is usually
-  /// done after reading all content of interest using parser.
-  /// Content is released by writing it to given stream if possible;
-  /// if underlying input is byte-based it can released, if not (char-based)
-  /// it can not.
-  ///@param out OutputStream to which buffered, undecoded content is written to
-  ///@return -1 if the underlying content source is not byte based
-  ///    (that is, input can not be sent to OutputStream;
-  ///    otherwise number of bytes released (0 if there was nothing to release)
-  ///@throws IOException if write to stream threw exception
-  int releaseBuffered(
-    jni.JObject out,
-  ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_releaseBuffered,
-        jni.JniCallType.intType, [out.reference]).integer;
-  }
-
-  static final _id_releaseBuffered1 = jniAccessors.getMethodIDOf(
-      _classRef, r"releaseBuffered", r"(Ljava/io/Writer;)I");
-
-  /// from: public int releaseBuffered(java.io.Writer w)
-  ///
-  /// Method that can be called to push back any content that
-  /// has been read but not consumed by the parser.
-  /// This is usually
-  /// done after reading all content of interest using parser.
-  /// Content is released by writing it to given writer if possible;
-  /// if underlying input is char-based it can released, if not (byte-based)
-  /// it can not.
-  ///@param w Writer to which buffered but unprocessed content is written to
-  ///@return -1 if the underlying content source is not char-based
-  ///    (that is, input can not be sent to Writer;
-  ///    otherwise number of chars released (0 if there was nothing to release)
-  ///@throws IOException if write using Writer threw exception
-  int releaseBuffered1(
-    jni.JObject w,
-  ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_releaseBuffered1,
-        jni.JniCallType.intType, [w.reference]).integer;
-  }
-
-  static final _id_enable = jniAccessors.getMethodIDOf(_classRef, r"enable",
-      r"(Lcom/fasterxml/jackson/core/JsonParser$Feature;)Lcom/fasterxml/jackson/core/JsonParser;");
-
-  /// from: public com.fasterxml.jackson.core.JsonParser enable(com.fasterxml.jackson.core.JsonParser.Feature f)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method for enabling specified parser feature
-  /// (check Feature for list of features)
-  ///@param f Feature to enable
-  ///@return This parser, to allow call chaining
-  JsonParser enable(
-    JsonParser_Feature f,
-  ) {
-    return const $JsonParserType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_enable,
-        jni.JniCallType.objectType,
-        [f.reference]).object);
-  }
-
-  static final _id_disable = jniAccessors.getMethodIDOf(_classRef, r"disable",
-      r"(Lcom/fasterxml/jackson/core/JsonParser$Feature;)Lcom/fasterxml/jackson/core/JsonParser;");
-
-  /// from: public com.fasterxml.jackson.core.JsonParser disable(com.fasterxml.jackson.core.JsonParser.Feature f)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method for disabling specified  feature
-  /// (check Feature for list of features)
-  ///@param f Feature to disable
-  ///@return This parser, to allow call chaining
-  JsonParser disable(
-    JsonParser_Feature f,
-  ) {
-    return const $JsonParserType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_disable,
-        jni.JniCallType.objectType,
-        [f.reference]).object);
-  }
-
-  static final _id_configure = jniAccessors.getMethodIDOf(
-      _classRef,
-      r"configure",
-      r"(Lcom/fasterxml/jackson/core/JsonParser$Feature;Z)Lcom/fasterxml/jackson/core/JsonParser;");
-
-  /// from: public com.fasterxml.jackson.core.JsonParser configure(com.fasterxml.jackson.core.JsonParser.Feature f, boolean state)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method for enabling or disabling specified feature
-  /// (check Feature for list of features)
-  ///@param f Feature to enable or disable
-  ///@param state Whether to enable feature ({@code true}) or disable ({@code false})
-  ///@return This parser, to allow call chaining
-  JsonParser configure(
-    JsonParser_Feature f,
-    bool state,
-  ) {
-    return const $JsonParserType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_configure,
-        jni.JniCallType.objectType,
-        [f.reference, state ? 1 : 0]).object);
-  }
-
-  static final _id_isEnabled = jniAccessors.getMethodIDOf(_classRef,
-      r"isEnabled", r"(Lcom/fasterxml/jackson/core/JsonParser$Feature;)Z");
-
-  /// from: public boolean isEnabled(com.fasterxml.jackson.core.JsonParser.Feature f)
-  ///
-  /// Method for checking whether specified Feature is enabled.
-  ///@param f Feature to check
-  ///@return {@code True} if feature is enabled; {@code false} otherwise
-  bool isEnabled(
-    JsonParser_Feature f,
-  ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_isEnabled,
-        jni.JniCallType.booleanType, [f.reference]).boolean;
-  }
-
-  static final _id_isEnabled1 = jniAccessors.getMethodIDOf(_classRef,
-      r"isEnabled", r"(Lcom/fasterxml/jackson/core/StreamReadFeature;)Z");
-
-  /// from: public boolean isEnabled(com.fasterxml.jackson.core.StreamReadFeature f)
-  ///
-  /// Method for checking whether specified Feature is enabled.
-  ///@param f Feature to check
-  ///@return {@code True} if feature is enabled; {@code false} otherwise
-  ///@since 2.10
-  bool isEnabled1(
-    jni.JObject f,
-  ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_isEnabled1,
-        jni.JniCallType.booleanType, [f.reference]).boolean;
-  }
-
-  static final _id_getFeatureMask =
-      jniAccessors.getMethodIDOf(_classRef, r"getFeatureMask", r"()I");
-
-  /// from: public int getFeatureMask()
-  ///
-  /// Bulk access method for getting state of all standard Features.
-  ///@return Bit mask that defines current states of all standard Features.
-  ///@since 2.3
-  int getFeatureMask() {
-    return jniAccessors.callMethodWithArgs(
-        reference, _id_getFeatureMask, jni.JniCallType.intType, []).integer;
-  }
-
-  static final _id_setFeatureMask = jniAccessors.getMethodIDOf(_classRef,
-      r"setFeatureMask", r"(I)Lcom/fasterxml/jackson/core/JsonParser;");
-
-  /// from: public com.fasterxml.jackson.core.JsonParser setFeatureMask(int mask)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Bulk set method for (re)setting states of all standard Features
-  ///@param mask Bit mask that defines set of features to enable
-  ///@return This parser, to allow call chaining
-  ///@since 2.3
-  ///@deprecated Since 2.7, use \#overrideStdFeatures(int, int) instead
-  JsonParser setFeatureMask(
-    int mask,
-  ) {
-    return const $JsonParserType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_setFeatureMask,
-        jni.JniCallType.objectType,
-        [jni.JValueInt(mask)]).object);
-  }
-
-  static final _id_overrideStdFeatures = jniAccessors.getMethodIDOf(_classRef,
-      r"overrideStdFeatures", r"(II)Lcom/fasterxml/jackson/core/JsonParser;");
-
-  /// from: public com.fasterxml.jackson.core.JsonParser overrideStdFeatures(int values, int mask)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Bulk set method for (re)setting states of features specified by <code>mask</code>.
-  /// Functionally equivalent to
-  ///<code>
-  ///    int oldState = getFeatureMask();
-  ///    int newState = (oldState &amp; ~mask) | (values &amp; mask);
-  ///    setFeatureMask(newState);
-  ///</code>
-  /// but preferred as this lets caller more efficiently specify actual changes made.
-  ///@param values Bit mask of set/clear state for features to change
-  ///@param mask Bit mask of features to change
-  ///@return This parser, to allow call chaining
-  ///@since 2.6
-  JsonParser overrideStdFeatures(
-    int values,
-    int mask,
-  ) {
-    return const $JsonParserType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_overrideStdFeatures,
-        jni.JniCallType.objectType,
-        [jni.JValueInt(values), jni.JValueInt(mask)]).object);
-  }
-
-  static final _id_getFormatFeatures =
-      jniAccessors.getMethodIDOf(_classRef, r"getFormatFeatures", r"()I");
-
-  /// from: public int getFormatFeatures()
-  ///
-  /// Bulk access method for getting state of all FormatFeatures, format-specific
-  /// on/off configuration settings.
-  ///@return Bit mask that defines current states of all standard FormatFeatures.
-  ///@since 2.6
-  int getFormatFeatures() {
-    return jniAccessors.callMethodWithArgs(
-        reference, _id_getFormatFeatures, jni.JniCallType.intType, []).integer;
-  }
-
-  static final _id_overrideFormatFeatures = jniAccessors.getMethodIDOf(
-      _classRef,
-      r"overrideFormatFeatures",
-      r"(II)Lcom/fasterxml/jackson/core/JsonParser;");
-
-  /// from: public com.fasterxml.jackson.core.JsonParser overrideFormatFeatures(int values, int mask)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Bulk set method for (re)setting states of FormatFeatures,
-  /// by specifying values (set / clear) along with a mask, to determine
-  /// which features to change, if any.
-  ///
-  /// Default implementation will simply throw an exception to indicate that
-  /// the parser implementation does not support any FormatFeatures.
-  ///@param values Bit mask of set/clear state for features to change
-  ///@param mask Bit mask of features to change
-  ///@return This parser, to allow call chaining
-  ///@since 2.6
-  JsonParser overrideFormatFeatures(
-    int values,
-    int mask,
-  ) {
-    return const $JsonParserType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_overrideFormatFeatures,
-        jni.JniCallType.objectType,
-        [jni.JValueInt(values), jni.JValueInt(mask)]).object);
-  }
-
-  static final _id_nextToken = jniAccessors.getMethodIDOf(
-      _classRef, r"nextToken", r"()Lcom/fasterxml/jackson/core/JsonToken;");
-
-  /// from: public abstract com.fasterxml.jackson.core.JsonToken nextToken()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Main iteration method, which will advance stream enough
-  /// to determine type of the next token, if any. If none
-  /// remaining (stream has no content other than possible
-  /// white space before ending), null will be returned.
-  ///@return Next token from the stream, if any found, or null
-  ///   to indicate end-of-input
-  ///@throws IOException for low-level read issues, or
-  ///   JsonParseException for decoding problems
-  jsontoken_.JsonToken nextToken() {
-    return const jsontoken_.$JsonTokenType().fromRef(jniAccessors
-        .callMethodWithArgs(
-            reference, _id_nextToken, jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_nextValue = jniAccessors.getMethodIDOf(
-      _classRef, r"nextValue", r"()Lcom/fasterxml/jackson/core/JsonToken;");
-
-  /// from: public abstract com.fasterxml.jackson.core.JsonToken nextValue()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Iteration method that will advance stream enough
-  /// to determine type of the next token that is a value type
-  /// (including JSON Array and Object start/end markers).
-  /// Or put another way, nextToken() will be called once,
-  /// and if JsonToken\#FIELD_NAME is returned, another
-  /// time to get the value for the field.
-  /// Method is most useful for iterating over value entries
-  /// of JSON objects; field name will still be available
-  /// by calling \#getCurrentName when parser points to
-  /// the value.
-  ///@return Next non-field-name token from the stream, if any found,
-  ///   or null to indicate end-of-input (or, for non-blocking
-  ///   parsers, JsonToken\#NOT_AVAILABLE if no tokens were
-  ///   available yet)
-  ///@throws IOException for low-level read issues, or
-  ///   JsonParseException for decoding problems
-  jsontoken_.JsonToken nextValue() {
-    return const jsontoken_.$JsonTokenType().fromRef(jniAccessors
-        .callMethodWithArgs(
-            reference, _id_nextValue, jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_nextFieldName = jniAccessors.getMethodIDOf(_classRef,
-      r"nextFieldName", r"(Lcom/fasterxml/jackson/core/SerializableString;)Z");
-
-  /// from: public boolean nextFieldName(com.fasterxml.jackson.core.SerializableString str)
-  ///
-  /// Method that fetches next token (as if calling \#nextToken) and
-  /// verifies whether it is JsonToken\#FIELD_NAME with specified name
-  /// and returns result of that comparison.
-  /// It is functionally equivalent to:
-  ///<pre>
-  ///  return (nextToken() == JsonToken.FIELD_NAME) &amp;&amp; str.getValue().equals(getCurrentName());
-  ///</pre>
-  /// but may be faster for parser to verify, and can therefore be used if caller
-  /// expects to get such a property name from input next.
-  ///@param str Property name to compare next token to (if next token is
-  ///   <code>JsonToken.FIELD_NAME</code>)
-  ///@return {@code True} if parser advanced to {@code JsonToken.FIELD_NAME} with
-  ///    specified name; {@code false} otherwise (different token or non-matching name)
-  ///@throws IOException for low-level read issues, or
-  ///   JsonParseException for decoding problems
-  bool nextFieldName(
-    jni.JObject str,
-  ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_nextFieldName,
-        jni.JniCallType.booleanType, [str.reference]).boolean;
-  }
-
-  static final _id_nextFieldName1 = jniAccessors.getMethodIDOf(
-      _classRef, r"nextFieldName", r"()Ljava/lang/String;");
-
-  /// from: public java.lang.String nextFieldName()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method that fetches next token (as if calling \#nextToken) and
-  /// verifies whether it is JsonToken\#FIELD_NAME; if it is,
-  /// returns same as \#getCurrentName(), otherwise null.
-  ///@return Name of the the {@code JsonToken.FIELD_NAME} parser advanced to, if any;
-  ///   {@code null} if next token is of some other type
-  ///@throws IOException for low-level read issues, or
-  ///   JsonParseException for decoding problems
-  ///@since 2.5
-  jni.JString nextFieldName1() {
-    return const jni.JStringType().fromRef(jniAccessors.callMethodWithArgs(
-        reference, _id_nextFieldName1, jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_nextTextValue = jniAccessors.getMethodIDOf(
-      _classRef, r"nextTextValue", r"()Ljava/lang/String;");
-
-  /// from: public java.lang.String nextTextValue()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method that fetches next token (as if calling \#nextToken) and
-  /// if it is JsonToken\#VALUE_STRING returns contained String value;
-  /// otherwise returns null.
-  /// It is functionally equivalent to:
-  ///<pre>
-  ///  return (nextToken() == JsonToken.VALUE_STRING) ? getText() : null;
-  ///</pre>
-  /// but may be faster for parser to process, and can therefore be used if caller
-  /// expects to get a String value next from input.
-  ///@return Text value of the {@code JsonToken.VALUE_STRING} token parser advanced
-  ///   to; or {@code null} if next token is of some other type
-  ///@throws IOException for low-level read issues, or
-  ///   JsonParseException for decoding problems
-  jni.JString nextTextValue() {
-    return const jni.JStringType().fromRef(jniAccessors.callMethodWithArgs(
-        reference, _id_nextTextValue, jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_nextIntValue =
-      jniAccessors.getMethodIDOf(_classRef, r"nextIntValue", r"(I)I");
-
-  /// from: public int nextIntValue(int defaultValue)
-  ///
-  /// Method that fetches next token (as if calling \#nextToken) and
-  /// if it is JsonToken\#VALUE_NUMBER_INT returns 32-bit int value;
-  /// otherwise returns specified default value
-  /// It is functionally equivalent to:
-  ///<pre>
-  ///  return (nextToken() == JsonToken.VALUE_NUMBER_INT) ? getIntValue() : defaultValue;
-  ///</pre>
-  /// but may be faster for parser to process, and can therefore be used if caller
-  /// expects to get an int value next from input.
-  ///
-  /// NOTE: value checks are performed similar to \#getIntValue()
-  ///@param defaultValue Value to return if next token is NOT of type {@code JsonToken.VALUE_NUMBER_INT}
-  ///@return Integer ({@code int}) value of the {@code JsonToken.VALUE_NUMBER_INT} token parser advanced
-  ///   to; or {@code defaultValue} if next token is of some other type
-  ///@throws IOException for low-level read issues, or
-  ///   JsonParseException for decoding problems
-  ///@throws InputCoercionException if integer number does not fit in Java {@code int}
-  int nextIntValue(
-    int defaultValue,
-  ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_nextIntValue,
-        jni.JniCallType.intType, [jni.JValueInt(defaultValue)]).integer;
-  }
-
-  static final _id_nextLongValue =
-      jniAccessors.getMethodIDOf(_classRef, r"nextLongValue", r"(J)J");
-
-  /// from: public long nextLongValue(long defaultValue)
-  ///
-  /// Method that fetches next token (as if calling \#nextToken) and
-  /// if it is JsonToken\#VALUE_NUMBER_INT returns 64-bit long value;
-  /// otherwise returns specified default value
-  /// It is functionally equivalent to:
-  ///<pre>
-  ///  return (nextToken() == JsonToken.VALUE_NUMBER_INT) ? getLongValue() : defaultValue;
-  ///</pre>
-  /// but may be faster for parser to process, and can therefore be used if caller
-  /// expects to get a long value next from input.
-  ///
-  /// NOTE: value checks are performed similar to \#getLongValue()
-  ///@param defaultValue Value to return if next token is NOT of type {@code JsonToken.VALUE_NUMBER_INT}
-  ///@return {@code long} value of the {@code JsonToken.VALUE_NUMBER_INT} token parser advanced
-  ///   to; or {@code defaultValue} if next token is of some other type
-  ///@throws IOException for low-level read issues, or
-  ///   JsonParseException for decoding problems
-  ///@throws InputCoercionException if integer number does not fit in Java {@code long}
-  int nextLongValue(
-    int defaultValue,
-  ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_nextLongValue,
-        jni.JniCallType.longType, [defaultValue]).long;
-  }
-
-  static final _id_nextBooleanValue = jniAccessors.getMethodIDOf(
-      _classRef, r"nextBooleanValue", r"()Ljava/lang/Boolean;");
-
-  /// from: public java.lang.Boolean nextBooleanValue()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method that fetches next token (as if calling \#nextToken) and
-  /// if it is JsonToken\#VALUE_TRUE or JsonToken\#VALUE_FALSE
-  /// returns matching Boolean value; otherwise return null.
-  /// It is functionally equivalent to:
-  ///<pre>
-  ///  JsonToken t = nextToken();
-  ///  if (t == JsonToken.VALUE_TRUE) return Boolean.TRUE;
-  ///  if (t == JsonToken.VALUE_FALSE) return Boolean.FALSE;
-  ///  return null;
-  ///</pre>
-  /// but may be faster for parser to process, and can therefore be used if caller
-  /// expects to get a Boolean value next from input.
-  ///@return {@code Boolean} value of the {@code JsonToken.VALUE_TRUE} or {@code JsonToken.VALUE_FALSE}
-  ///   token parser advanced to; or {@code null} if next token is of some other type
-  ///@throws IOException for low-level read issues, or
-  ///   JsonParseException for decoding problems
-  jni.JObject nextBooleanValue() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_nextBooleanValue,
-        jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_skipChildren = jniAccessors.getMethodIDOf(
-      _classRef, r"skipChildren", r"()Lcom/fasterxml/jackson/core/JsonParser;");
-
-  /// from: public abstract com.fasterxml.jackson.core.JsonParser skipChildren()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method that will skip all child tokens of an array or
-  /// object token that the parser currently points to,
-  /// iff stream points to
-  /// JsonToken\#START_OBJECT or JsonToken\#START_ARRAY.
-  /// If not, it will do nothing.
-  /// After skipping, stream will point to __matching__
-  /// JsonToken\#END_OBJECT or JsonToken\#END_ARRAY
-  /// (possibly skipping nested pairs of START/END OBJECT/ARRAY tokens
-  /// as well as value tokens).
-  /// The idea is that after calling this method, application
-  /// will call \#nextToken to point to the next
-  /// available token, if any.
-  ///@return This parser, to allow call chaining
-  ///@throws IOException for low-level read issues, or
-  ///   JsonParseException for decoding problems
-  JsonParser skipChildren() {
-    return const $JsonParserType().fromRef(jniAccessors.callMethodWithArgs(
-        reference, _id_skipChildren, jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_finishToken =
-      jniAccessors.getMethodIDOf(_classRef, r"finishToken", r"()V");
-
-  /// from: public void finishToken()
-  ///
-  /// Method that may be used to force full handling of the current token
-  /// so that even if lazy processing is enabled, the whole contents are
-  /// read for possible retrieval. This is usually used to ensure that
-  /// the token end location is available, as well as token contents
-  /// (similar to what calling, say \#getTextCharacters(), would
-  /// achieve).
-  ///
-  /// Note that for many dataformat implementations this method
-  /// will not do anything; this is the default implementation unless
-  /// overridden by sub-classes.
-  ///@throws IOException for low-level read issues, or
-  ///   JsonParseException for decoding problems
-  ///@since 2.8
-  void finishToken() {
-    return jniAccessors.callMethodWithArgs(
-        reference, _id_finishToken, jni.JniCallType.voidType, []).check();
-  }
-
-  static final _id_currentToken = jniAccessors.getMethodIDOf(
-      _classRef, r"currentToken", r"()Lcom/fasterxml/jackson/core/JsonToken;");
-
-  /// from: public com.fasterxml.jackson.core.JsonToken currentToken()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Accessor to find which token parser currently points to, if any;
-  /// null will be returned if none.
-  /// If return value is non-null, data associated with the token
-  /// is available via other accessor methods.
-  ///@return Type of the token this parser currently points to,
-  ///   if any: null before any tokens have been read, and
-  ///   after end-of-input has been encountered, as well as
-  ///   if the current token has been explicitly cleared.
-  ///@since 2.8
-  jsontoken_.JsonToken currentToken() {
-    return const jsontoken_.$JsonTokenType().fromRef(jniAccessors
-        .callMethodWithArgs(reference, _id_currentToken,
-            jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_currentTokenId =
-      jniAccessors.getMethodIDOf(_classRef, r"currentTokenId", r"()I");
-
-  /// from: public int currentTokenId()
-  ///
-  /// Method similar to \#getCurrentToken() but that returns an
-  /// <code>int</code> instead of JsonToken (enum value).
-  ///
-  /// Use of int directly is typically more efficient on switch statements,
-  /// so this method may be useful when building low-overhead codecs.
-  /// Note, however, that effect may not be big enough to matter: make sure
-  /// to profile performance before deciding to use this method.
-  ///@since 2.8
-  ///@return {@code int} matching one of constants from JsonTokenId.
-  int currentTokenId() {
-    return jniAccessors.callMethodWithArgs(
-        reference, _id_currentTokenId, jni.JniCallType.intType, []).integer;
-  }
-
-  static final _id_getCurrentToken = jniAccessors.getMethodIDOf(_classRef,
-      r"getCurrentToken", r"()Lcom/fasterxml/jackson/core/JsonToken;");
-
-  /// from: public abstract com.fasterxml.jackson.core.JsonToken getCurrentToken()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Alias for \#currentToken(), may be deprecated sometime after
-  /// Jackson 2.13 (will be removed from 3.0).
-  ///@return Type of the token this parser currently points to,
-  ///   if any: null before any tokens have been read, and
-  jsontoken_.JsonToken getCurrentToken() {
-    return const jsontoken_.$JsonTokenType().fromRef(jniAccessors
-        .callMethodWithArgs(reference, _id_getCurrentToken,
-            jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_getCurrentTokenId =
-      jniAccessors.getMethodIDOf(_classRef, r"getCurrentTokenId", r"()I");
-
-  /// from: public abstract int getCurrentTokenId()
-  ///
-  /// Deprecated alias for \#currentTokenId().
-  ///@return {@code int} matching one of constants from JsonTokenId.
-  ///@deprecated Since 2.12 use \#currentTokenId instead
-  int getCurrentTokenId() {
-    return jniAccessors.callMethodWithArgs(
-        reference, _id_getCurrentTokenId, jni.JniCallType.intType, []).integer;
-  }
-
-  static final _id_hasCurrentToken =
-      jniAccessors.getMethodIDOf(_classRef, r"hasCurrentToken", r"()Z");
-
-  /// from: public abstract boolean hasCurrentToken()
-  ///
-  /// Method for checking whether parser currently points to
-  /// a token (and data for that token is available).
-  /// Equivalent to check for <code>parser.getCurrentToken() != null</code>.
-  ///@return True if the parser just returned a valid
-  ///   token via \#nextToken; false otherwise (parser
-  ///   was just constructed, encountered end-of-input
-  ///   and returned null from \#nextToken, or the token
-  ///   has been consumed)
-  bool hasCurrentToken() {
-    return jniAccessors.callMethodWithArgs(reference, _id_hasCurrentToken,
-        jni.JniCallType.booleanType, []).boolean;
-  }
-
-  static final _id_hasTokenId =
-      jniAccessors.getMethodIDOf(_classRef, r"hasTokenId", r"(I)Z");
-
-  /// from: public abstract boolean hasTokenId(int id)
-  ///
-  /// Method that is functionally equivalent to:
-  ///<code>
-  ///  return currentTokenId() == id
-  ///</code>
-  /// but may be more efficiently implemented.
-  ///
-  /// Note that no traversal or conversion is performed; so in some
-  /// cases calling method like \#isExpectedStartArrayToken()
-  /// is necessary instead.
-  ///@param id Token id to match (from (@link JsonTokenId})
-  ///@return {@code True} if the parser current points to specified token
-  ///@since 2.5
-  bool hasTokenId(
-    int id,
-  ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_hasTokenId,
-        jni.JniCallType.booleanType, [jni.JValueInt(id)]).boolean;
-  }
-
-  static final _id_hasToken = jniAccessors.getMethodIDOf(
-      _classRef, r"hasToken", r"(Lcom/fasterxml/jackson/core/JsonToken;)Z");
-
-  /// from: public abstract boolean hasToken(com.fasterxml.jackson.core.JsonToken t)
-  ///
-  /// Method that is functionally equivalent to:
-  ///<code>
-  ///  return currentToken() == t
-  ///</code>
-  /// but may be more efficiently implemented.
-  ///
-  /// Note that no traversal or conversion is performed; so in some
-  /// cases calling method like \#isExpectedStartArrayToken()
-  /// is necessary instead.
-  ///@param t Token to match
-  ///@return {@code True} if the parser current points to specified token
-  ///@since 2.6
-  bool hasToken(
-    jsontoken_.JsonToken t,
-  ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_hasToken,
-        jni.JniCallType.booleanType, [t.reference]).boolean;
-  }
-
-  static final _id_isExpectedStartArrayToken = jniAccessors.getMethodIDOf(
-      _classRef, r"isExpectedStartArrayToken", r"()Z");
-
-  /// from: public boolean isExpectedStartArrayToken()
-  ///
-  /// Specialized accessor that can be used to verify that the current
-  /// token indicates start array (usually meaning that current token
-  /// is JsonToken\#START_ARRAY) when start array is expected.
-  /// For some specialized parsers this can return true for other cases
-  /// as well; this is usually done to emulate arrays in cases underlying
-  /// format is ambiguous (XML, for example, has no format-level difference
-  /// between Objects and Arrays; it just has elements).
-  ///
-  /// Default implementation is equivalent to:
-  ///<pre>
-  ///   currentToken() == JsonToken.START_ARRAY
-  ///</pre>
-  /// but may be overridden by custom parser implementations.
-  ///@return True if the current token can be considered as a
-  ///   start-array marker (such JsonToken\#START_ARRAY);
-  ///   {@code false} if not
-  bool isExpectedStartArrayToken() {
-    return jniAccessors.callMethodWithArgs(reference,
-        _id_isExpectedStartArrayToken, jni.JniCallType.booleanType, []).boolean;
-  }
-
-  static final _id_isExpectedStartObjectToken = jniAccessors.getMethodIDOf(
-      _classRef, r"isExpectedStartObjectToken", r"()Z");
-
-  /// from: public boolean isExpectedStartObjectToken()
-  ///
-  /// Similar to \#isExpectedStartArrayToken(), but checks whether stream
-  /// currently points to JsonToken\#START_OBJECT.
-  ///@return True if the current token can be considered as a
-  ///   start-array marker (such JsonToken\#START_OBJECT);
-  ///   {@code false} if not
-  ///@since 2.5
-  bool isExpectedStartObjectToken() {
-    return jniAccessors.callMethodWithArgs(
-        reference,
-        _id_isExpectedStartObjectToken,
-        jni.JniCallType.booleanType, []).boolean;
-  }
-
-  static final _id_isExpectedNumberIntToken = jniAccessors.getMethodIDOf(
-      _classRef, r"isExpectedNumberIntToken", r"()Z");
-
-  /// from: public boolean isExpectedNumberIntToken()
-  ///
-  /// Similar to \#isExpectedStartArrayToken(), but checks whether stream
-  /// currently points to JsonToken\#VALUE_NUMBER_INT.
-  ///
-  /// The initial use case is for XML backend to efficiently (attempt to) coerce
-  /// textual content into numbers.
-  ///@return True if the current token can be considered as a
-  ///   start-array marker (such JsonToken\#VALUE_NUMBER_INT);
-  ///   {@code false} if not
-  ///@since 2.12
-  bool isExpectedNumberIntToken() {
-    return jniAccessors.callMethodWithArgs(reference,
-        _id_isExpectedNumberIntToken, jni.JniCallType.booleanType, []).boolean;
-  }
-
-  static final _id_isNaN =
-      jniAccessors.getMethodIDOf(_classRef, r"isNaN", r"()Z");
-
-  /// from: public boolean isNaN()
-  ///
-  /// Access for checking whether current token is a numeric value token, but
-  /// one that is of "not-a-number" (NaN) variety (including both "NaN" AND
-  /// positive/negative infinity!): not supported by all formats,
-  /// but often supported for JsonToken\#VALUE_NUMBER_FLOAT.
-  /// NOTE: roughly equivalent to calling <code>!Double.isFinite()</code>
-  /// on value you would get from calling \#getDoubleValue().
-  ///@return {@code True} if the current token is of type JsonToken\#VALUE_NUMBER_FLOAT
-  ///   but represents a "Not a Number"; {@code false} for other tokens and regular
-  ///   floating-point numbers
-  ///@throws IOException for low-level read issues, or
-  ///   JsonParseException for decoding problems
-  ///@since 2.9
-  bool isNaN() {
-    return jniAccessors.callMethodWithArgs(
-        reference, _id_isNaN, jni.JniCallType.booleanType, []).boolean;
-  }
-
-  static final _id_clearCurrentToken =
-      jniAccessors.getMethodIDOf(_classRef, r"clearCurrentToken", r"()V");
-
-  /// from: public abstract void clearCurrentToken()
-  ///
-  /// Method called to "consume" the current token by effectively
-  /// removing it so that \#hasCurrentToken returns false, and
-  /// \#getCurrentToken null).
-  /// Cleared token value can still be accessed by calling
-  /// \#getLastClearedToken (if absolutely needed), but
-  /// usually isn't.
-  ///
-  /// Method was added to be used by the optional data binder, since
-  /// it has to be able to consume last token used for binding (so that
-  /// it will not be used again).
-  void clearCurrentToken() {
-    return jniAccessors.callMethodWithArgs(
-        reference, _id_clearCurrentToken, jni.JniCallType.voidType, []).check();
-  }
-
-  static final _id_getLastClearedToken = jniAccessors.getMethodIDOf(_classRef,
-      r"getLastClearedToken", r"()Lcom/fasterxml/jackson/core/JsonToken;");
-
-  /// from: public abstract com.fasterxml.jackson.core.JsonToken getLastClearedToken()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method that can be called to get the last token that was
-  /// cleared using \#clearCurrentToken. This is not necessarily
-  /// the latest token read.
-  /// Will return null if no tokens have been cleared,
-  /// or if parser has been closed.
-  ///@return Last cleared token, if any; {@code null} otherwise
-  jsontoken_.JsonToken getLastClearedToken() {
-    return const jsontoken_.$JsonTokenType().fromRef(jniAccessors
-        .callMethodWithArgs(reference, _id_getLastClearedToken,
-            jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_overrideCurrentName = jniAccessors.getMethodIDOf(
-      _classRef, r"overrideCurrentName", r"(Ljava/lang/String;)V");
-
-  /// from: public abstract void overrideCurrentName(java.lang.String name)
-  ///
-  /// Method that can be used to change what is considered to be
-  /// the current (field) name.
-  /// May be needed to support non-JSON data formats or unusual binding
-  /// conventions; not needed for typical processing.
-  ///
-  /// Note that use of this method should only be done as sort of last
-  /// resort, as it is a work-around for regular operation.
-  ///@param name Name to use as the current name; may be null.
-  void overrideCurrentName(
-    jni.JString name,
-  ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_overrideCurrentName,
-        jni.JniCallType.voidType, [name.reference]).check();
-  }
-
-  static final _id_getCurrentName = jniAccessors.getMethodIDOf(
-      _classRef, r"getCurrentName", r"()Ljava/lang/String;");
-
-  /// from: public abstract java.lang.String getCurrentName()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Alias of \#currentName().
-  ///@return Name of the current field in the parsing context
-  ///@throws IOException for low-level read issues, or
-  ///   JsonParseException for decoding problems
-  jni.JString getCurrentName() {
-    return const jni.JStringType().fromRef(jniAccessors.callMethodWithArgs(
-        reference, _id_getCurrentName, jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_currentName = jniAccessors.getMethodIDOf(
-      _classRef, r"currentName", r"()Ljava/lang/String;");
-
-  /// from: public java.lang.String currentName()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method that can be called to get the name associated with
-  /// the current token: for JsonToken\#FIELD_NAMEs it will
-  /// be the same as what \#getText returns;
-  /// for field values it will be preceding field name;
-  /// and for others (array values, root-level values) null.
-  ///@return Name of the current field in the parsing context
-  ///@throws IOException for low-level read issues, or
-  ///   JsonParseException for decoding problems
-  ///@since 2.10
-  jni.JString currentName() {
-    return const jni.JStringType().fromRef(jniAccessors.callMethodWithArgs(
-        reference, _id_currentName, jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_getText = jniAccessors.getMethodIDOf(
-      _classRef, r"getText", r"()Ljava/lang/String;");
-
-  /// from: public abstract java.lang.String getText()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method for accessing textual representation of the current token;
-  /// if no current token (before first call to \#nextToken, or
-  /// after encountering end-of-input), returns null.
-  /// Method can be called for any token type.
-  ///@return Textual value associated with the current token (one returned
-  ///   by \#nextToken() or other iteration methods)
-  ///@throws IOException for low-level read issues, or
-  ///   JsonParseException for decoding problems
-  jni.JString getText() {
-    return const jni.JStringType().fromRef(jniAccessors.callMethodWithArgs(
-        reference, _id_getText, jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_getText1 =
-      jniAccessors.getMethodIDOf(_classRef, r"getText", r"(Ljava/io/Writer;)I");
-
-  /// from: public int getText(java.io.Writer writer)
-  ///
-  /// Method to read the textual representation of the current token in chunks and
-  /// pass it to the given Writer.
-  /// Conceptually same as calling:
-  ///<pre>
-  ///  writer.write(parser.getText());
-  ///</pre>
-  /// but should typically be more efficient as longer content does need to
-  /// be combined into a single <code>String</code> to return, and write
-  /// can occur directly from intermediate buffers Jackson uses.
-  ///@param writer Writer to write textual content to
-  ///@return The number of characters written to the Writer
-  ///@throws IOException for low-level read issues or writes using passed
-  ///   {@code writer}, or
-  ///   JsonParseException for decoding problems
-  ///@since 2.8
-  int getText1(
-    jni.JObject writer,
-  ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_getText1,
-        jni.JniCallType.intType, [writer.reference]).integer;
-  }
-
-  static final _id_getTextCharacters =
-      jniAccessors.getMethodIDOf(_classRef, r"getTextCharacters", r"()[C");
-
-  /// from: public abstract char[] getTextCharacters()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method similar to \#getText, but that will return
-  /// underlying (unmodifiable) character array that contains
-  /// textual value, instead of constructing a String object
-  /// to contain this information.
-  /// Note, however, that:
-  ///<ul>
-  /// <li>Textual contents are not guaranteed to start at
-  ///   index 0 (rather, call \#getTextOffset) to
-  ///   know the actual offset
-  ///  </li>
-  /// <li>Length of textual contents may be less than the
-  ///  length of returned buffer: call \#getTextLength
-  ///  for actual length of returned content.
-  ///  </li>
-  /// </ul>
-  ///
-  /// Note that caller __MUST NOT__ modify the returned
-  /// character array in any way -- doing so may corrupt
-  /// current parser state and render parser instance useless.
-  ///
-  /// The only reason to call this method (over \#getText)
-  /// is to avoid construction of a String object (which
-  /// will make a copy of contents).
-  ///@return Buffer that contains the current textual value (but not necessarily
-  ///    at offset 0, and not necessarily until the end of buffer)
-  ///@throws IOException for low-level read issues, or
-  ///   JsonParseException for decoding problems
-  jni.JArray<jni.JChar> getTextCharacters() {
-    return const jni.JArrayType(jni.JCharType()).fromRef(jniAccessors
-        .callMethodWithArgs(reference, _id_getTextCharacters,
-            jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_getTextLength =
-      jniAccessors.getMethodIDOf(_classRef, r"getTextLength", r"()I");
-
-  /// from: public abstract int getTextLength()
-  ///
-  /// Accessor used with \#getTextCharacters, to know length
-  /// of String stored in returned buffer.
-  ///@return Number of characters within buffer returned
-  ///   by \#getTextCharacters that are part of
-  ///   textual content of the current token.
-  ///@throws IOException for low-level read issues, or
-  ///   JsonParseException for decoding problems
-  int getTextLength() {
-    return jniAccessors.callMethodWithArgs(
-        reference, _id_getTextLength, jni.JniCallType.intType, []).integer;
-  }
-
-  static final _id_getTextOffset =
-      jniAccessors.getMethodIDOf(_classRef, r"getTextOffset", r"()I");
-
-  /// from: public abstract int getTextOffset()
-  ///
-  /// Accessor used with \#getTextCharacters, to know offset
-  /// of the first text content character within buffer.
-  ///@return Offset of the first character within buffer returned
-  ///   by \#getTextCharacters that is part of
-  ///   textual content of the current token.
-  ///@throws IOException for low-level read issues, or
-  ///   JsonParseException for decoding problems
-  int getTextOffset() {
-    return jniAccessors.callMethodWithArgs(
-        reference, _id_getTextOffset, jni.JniCallType.intType, []).integer;
-  }
-
-  static final _id_hasTextCharacters =
-      jniAccessors.getMethodIDOf(_classRef, r"hasTextCharacters", r"()Z");
-
-  /// from: public abstract boolean hasTextCharacters()
-  ///
-  /// Method that can be used to determine whether calling of
-  /// \#getTextCharacters would be the most efficient
-  /// way to access textual content for the event parser currently
-  /// points to.
-  ///
-  /// Default implementation simply returns false since only actual
-  /// implementation class has knowledge of its internal buffering
-  /// state.
-  /// Implementations are strongly encouraged to properly override
-  /// this method, to allow efficient copying of content by other
-  /// code.
-  ///@return True if parser currently has character array that can
-  ///   be efficiently returned via \#getTextCharacters; false
-  ///   means that it may or may not exist
-  bool hasTextCharacters() {
-    return jniAccessors.callMethodWithArgs(reference, _id_hasTextCharacters,
-        jni.JniCallType.booleanType, []).boolean;
-  }
-
-  static final _id_getNumberValue = jniAccessors.getMethodIDOf(
-      _classRef, r"getNumberValue", r"()Ljava/lang/Number;");
-
-  /// from: public abstract java.lang.Number getNumberValue()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Generic number value accessor method that will work for
-  /// all kinds of numeric values. It will return the optimal
-  /// (simplest/smallest possible) wrapper object that can
-  /// express the numeric value just parsed.
-  ///@return Numeric value of the current token in its most optimal
-  ///   representation
-  ///@throws IOException Problem with access: JsonParseException if
-  ///    the current token is not numeric, or if decoding of the value fails
-  ///    (invalid format for numbers); plain IOException if underlying
-  ///    content read fails (possible if values are extracted lazily)
-  jni.JObject getNumberValue() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
-        reference, _id_getNumberValue, jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_getNumberValueExact = jniAccessors.getMethodIDOf(
-      _classRef, r"getNumberValueExact", r"()Ljava/lang/Number;");
-
-  /// from: public java.lang.Number getNumberValueExact()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method similar to \#getNumberValue with the difference that
-  /// for floating-point numbers value returned may be BigDecimal
-  /// if the underlying format does not store floating-point numbers using
-  /// native representation: for example, textual formats represent numbers
-  /// as Strings (which are 10-based), and conversion to java.lang.Double
-  /// is potentially lossy operation.
-  ///
-  /// Default implementation simply returns \#getNumberValue()
-  ///@return Numeric value of the current token using most accurate representation
-  ///@throws IOException Problem with access: JsonParseException if
-  ///    the current token is not numeric, or if decoding of the value fails
-  ///    (invalid format for numbers); plain IOException if underlying
-  ///    content read fails (possible if values are extracted lazily)
-  ///@since 2.12
-  jni.JObject getNumberValueExact() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_getNumberValueExact,
-        jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_getNumberType = jniAccessors.getMethodIDOf(
-      _classRef,
-      r"getNumberType",
-      r"()Lcom/fasterxml/jackson/core/JsonParser$NumberType;");
-
-  /// from: public abstract com.fasterxml.jackson.core.JsonParser.NumberType getNumberType()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// If current token is of type
-  /// JsonToken\#VALUE_NUMBER_INT or
-  /// JsonToken\#VALUE_NUMBER_FLOAT, returns
-  /// one of NumberType constants; otherwise returns null.
-  ///@return Type of current number, if parser points to numeric token; {@code null} otherwise
-  ///@throws IOException for low-level read issues, or
-  ///   JsonParseException for decoding problems
-  JsonParser_NumberType getNumberType() {
-    return const $JsonParser_NumberTypeType().fromRef(jniAccessors
-        .callMethodWithArgs(reference, _id_getNumberType,
-            jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_getByteValue =
-      jniAccessors.getMethodIDOf(_classRef, r"getByteValue", r"()B");
-
-  /// from: public byte getByteValue()
-  ///
-  /// Numeric accessor that can be called when the current
-  /// token is of type JsonToken\#VALUE_NUMBER_INT and
-  /// it can be expressed as a value of Java byte primitive type.
-  /// Note that in addition to "natural" input range of {@code [-128, 127]},
-  /// this also allows "unsigned 8-bit byte" values {@code [128, 255]}:
-  /// but for this range value will be translated by truncation, leading
-  /// to sign change.
-  ///
-  /// It can also be called for JsonToken\#VALUE_NUMBER_FLOAT;
-  /// if so, it is equivalent to calling \#getDoubleValue
-  /// and then casting; except for possible overflow/underflow
-  /// exception.
-  ///
-  /// Note: if the resulting integer value falls outside range of
-  /// {@code [-128, 255]},
-  /// a InputCoercionException
-  /// will be thrown to indicate numeric overflow/underflow.
-  ///@return Current number value as {@code byte} (if numeric token within
-  ///   range of {@code [-128, 255]}); otherwise exception thrown
-  ///@throws IOException for low-level read issues, or
-  ///   JsonParseException for decoding problems
-  int getByteValue() {
-    return jniAccessors.callMethodWithArgs(
-        reference, _id_getByteValue, jni.JniCallType.byteType, []).byte;
-  }
-
-  static final _id_getShortValue =
-      jniAccessors.getMethodIDOf(_classRef, r"getShortValue", r"()S");
-
-  /// from: public short getShortValue()
-  ///
-  /// Numeric accessor that can be called when the current
-  /// token is of type JsonToken\#VALUE_NUMBER_INT and
-  /// it can be expressed as a value of Java short primitive type.
-  /// It can also be called for JsonToken\#VALUE_NUMBER_FLOAT;
-  /// if so, it is equivalent to calling \#getDoubleValue
-  /// and then casting; except for possible overflow/underflow
-  /// exception.
-  ///
-  /// Note: if the resulting integer value falls outside range of
-  /// Java short, a InputCoercionException
-  /// will be thrown to indicate numeric overflow/underflow.
-  ///@return Current number value as {@code short} (if numeric token within
-  ///   Java 16-bit signed {@code short} range); otherwise exception thrown
-  ///@throws IOException for low-level read issues, or
-  ///   JsonParseException for decoding problems
-  int getShortValue() {
-    return jniAccessors.callMethodWithArgs(
-        reference, _id_getShortValue, jni.JniCallType.shortType, []).short;
-  }
-
-  static final _id_getIntValue =
-      jniAccessors.getMethodIDOf(_classRef, r"getIntValue", r"()I");
-
-  /// from: public abstract int getIntValue()
-  ///
-  /// Numeric accessor that can be called when the current
-  /// token is of type JsonToken\#VALUE_NUMBER_INT and
-  /// it can be expressed as a value of Java int primitive type.
-  /// It can also be called for JsonToken\#VALUE_NUMBER_FLOAT;
-  /// if so, it is equivalent to calling \#getDoubleValue
-  /// and then casting; except for possible overflow/underflow
-  /// exception.
-  ///
-  /// Note: if the resulting integer value falls outside range of
-  /// Java {@code int}, a InputCoercionException
-  /// may be thrown to indicate numeric overflow/underflow.
-  ///@return Current number value as {@code int} (if numeric token within
-  ///   Java 32-bit signed {@code int} range); otherwise exception thrown
-  ///@throws IOException for low-level read issues, or
-  ///   JsonParseException for decoding problems
-  int getIntValue() {
-    return jniAccessors.callMethodWithArgs(
-        reference, _id_getIntValue, jni.JniCallType.intType, []).integer;
-  }
-
-  static final _id_getLongValue =
-      jniAccessors.getMethodIDOf(_classRef, r"getLongValue", r"()J");
-
-  /// from: public abstract long getLongValue()
-  ///
-  /// Numeric accessor that can be called when the current
-  /// token is of type JsonToken\#VALUE_NUMBER_INT and
-  /// it can be expressed as a Java long primitive type.
-  /// It can also be called for JsonToken\#VALUE_NUMBER_FLOAT;
-  /// if so, it is equivalent to calling \#getDoubleValue
-  /// and then casting to int; except for possible overflow/underflow
-  /// exception.
-  ///
-  /// Note: if the token is an integer, but its value falls
-  /// outside of range of Java long, a InputCoercionException
-  /// may be thrown to indicate numeric overflow/underflow.
-  ///@return Current number value as {@code long} (if numeric token within
-  ///   Java 32-bit signed {@code long} range); otherwise exception thrown
-  ///@throws IOException for low-level read issues, or
-  ///   JsonParseException for decoding problems
-  int getLongValue() {
-    return jniAccessors.callMethodWithArgs(
-        reference, _id_getLongValue, jni.JniCallType.longType, []).long;
-  }
-
-  static final _id_getBigIntegerValue = jniAccessors.getMethodIDOf(
-      _classRef, r"getBigIntegerValue", r"()Ljava/math/BigInteger;");
-
-  /// from: public abstract java.math.BigInteger getBigIntegerValue()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Numeric accessor that can be called when the current
-  /// token is of type JsonToken\#VALUE_NUMBER_INT and
-  /// it can not be used as a Java long primitive type due to its
-  /// magnitude.
-  /// It can also be called for JsonToken\#VALUE_NUMBER_FLOAT;
-  /// if so, it is equivalent to calling \#getDecimalValue
-  /// and then constructing a BigInteger from that value.
-  ///@return Current number value as BigInteger (if numeric token);
-  ///     otherwise exception thrown
-  ///@throws IOException for low-level read issues, or
-  ///   JsonParseException for decoding problems
-  jni.JObject getBigIntegerValue() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_getBigIntegerValue,
-        jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_getFloatValue =
-      jniAccessors.getMethodIDOf(_classRef, r"getFloatValue", r"()F");
-
-  /// from: public abstract float getFloatValue()
-  ///
-  /// Numeric accessor that can be called when the current
-  /// token is of type JsonToken\#VALUE_NUMBER_FLOAT and
-  /// it can be expressed as a Java float primitive type.
-  /// It can also be called for JsonToken\#VALUE_NUMBER_INT;
-  /// if so, it is equivalent to calling \#getLongValue
-  /// and then casting; except for possible overflow/underflow
-  /// exception.
-  ///
-  /// Note: if the value falls
-  /// outside of range of Java float, a InputCoercionException
-  /// will be thrown to indicate numeric overflow/underflow.
-  ///@return Current number value as {@code float} (if numeric token within
-  ///   Java {@code float} range); otherwise exception thrown
-  ///@throws IOException for low-level read issues, or
-  ///   JsonParseException for decoding problems
-  double getFloatValue() {
-    return jniAccessors.callMethodWithArgs(
-        reference, _id_getFloatValue, jni.JniCallType.floatType, []).float;
-  }
-
-  static final _id_getDoubleValue =
-      jniAccessors.getMethodIDOf(_classRef, r"getDoubleValue", r"()D");
-
-  /// from: public abstract double getDoubleValue()
-  ///
-  /// Numeric accessor that can be called when the current
-  /// token is of type JsonToken\#VALUE_NUMBER_FLOAT and
-  /// it can be expressed as a Java double primitive type.
-  /// It can also be called for JsonToken\#VALUE_NUMBER_INT;
-  /// if so, it is equivalent to calling \#getLongValue
-  /// and then casting; except for possible overflow/underflow
-  /// exception.
-  ///
-  /// Note: if the value falls
-  /// outside of range of Java double, a InputCoercionException
-  /// will be thrown to indicate numeric overflow/underflow.
-  ///@return Current number value as {@code double} (if numeric token within
-  ///   Java {@code double} range); otherwise exception thrown
-  ///@throws IOException for low-level read issues, or
-  ///   JsonParseException for decoding problems
-  double getDoubleValue() {
-    return jniAccessors.callMethodWithArgs(reference, _id_getDoubleValue,
-        jni.JniCallType.doubleType, []).doubleFloat;
-  }
-
-  static final _id_getDecimalValue = jniAccessors.getMethodIDOf(
-      _classRef, r"getDecimalValue", r"()Ljava/math/BigDecimal;");
-
-  /// from: public abstract java.math.BigDecimal getDecimalValue()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Numeric accessor that can be called when the current
-  /// token is of type JsonToken\#VALUE_NUMBER_FLOAT or
-  /// JsonToken\#VALUE_NUMBER_INT. No under/overflow exceptions
-  /// are ever thrown.
-  ///@return Current number value as BigDecimal (if numeric token);
-  ///   otherwise exception thrown
-  ///@throws IOException for low-level read issues, or
-  ///   JsonParseException for decoding problems
-  jni.JObject getDecimalValue() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
-        reference, _id_getDecimalValue, jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_getBooleanValue =
-      jniAccessors.getMethodIDOf(_classRef, r"getBooleanValue", r"()Z");
-
-  /// from: public boolean getBooleanValue()
-  ///
-  /// Convenience accessor that can be called when the current
-  /// token is JsonToken\#VALUE_TRUE or
-  /// JsonToken\#VALUE_FALSE, to return matching {@code boolean}
-  /// value.
-  /// If the current token is of some other type, JsonParseException
-  /// will be thrown
-  ///@return {@code True} if current token is {@code JsonToken.VALUE_TRUE},
-  ///   {@code false} if current token is {@code JsonToken.VALUE_FALSE};
-  ///   otherwise throws JsonParseException
-  ///@throws IOException for low-level read issues, or
-  ///   JsonParseException for decoding problems
-  bool getBooleanValue() {
-    return jniAccessors.callMethodWithArgs(reference, _id_getBooleanValue,
-        jni.JniCallType.booleanType, []).boolean;
-  }
-
-  static final _id_getEmbeddedObject = jniAccessors.getMethodIDOf(
-      _classRef, r"getEmbeddedObject", r"()Ljava/lang/Object;");
-
-  /// from: public java.lang.Object getEmbeddedObject()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Accessor that can be called if (and only if) the current token
-  /// is JsonToken\#VALUE_EMBEDDED_OBJECT. For other token types,
-  /// null is returned.
-  ///
-  /// Note: only some specialized parser implementations support
-  /// embedding of objects (usually ones that are facades on top
-  /// of non-streaming sources, such as object trees). One exception
-  /// is access to binary content (whether via base64 encoding or not)
-  /// which typically is accessible using this method, as well as
-  /// \#getBinaryValue().
-  ///@return Embedded value (usually of "native" type supported by format)
-  ///   for the current token, if any; {@code null otherwise}
-  ///@throws IOException for low-level read issues, or
-  ///   JsonParseException for decoding problems
-  jni.JObject getEmbeddedObject() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_getEmbeddedObject,
-        jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_getBinaryValue = jniAccessors.getMethodIDOf(_classRef,
-      r"getBinaryValue", r"(Lcom/fasterxml/jackson/core/Base64Variant;)[B");
-
-  /// from: public abstract byte[] getBinaryValue(com.fasterxml.jackson.core.Base64Variant bv)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method that can be used to read (and consume -- results
-  /// may not be accessible using other methods after the call)
-  /// base64-encoded binary data
-  /// included in the current textual JSON value.
-  /// It works similar to getting String value via \#getText
-  /// and decoding result (except for decoding part),
-  /// but should be significantly more performant.
-  ///
-  /// Note that non-decoded textual contents of the current token
-  /// are not guaranteed to be accessible after this method
-  /// is called. Current implementation, for example, clears up
-  /// textual content during decoding.
-  /// Decoded binary content, however, will be retained until
-  /// parser is advanced to the next event.
-  ///@param bv Expected variant of base64 encoded
-  ///   content (see Base64Variants for definitions
-  ///   of "standard" variants).
-  ///@return Decoded binary data
-  ///@throws IOException for low-level read issues, or
-  ///   JsonParseException for decoding problems
-  jni.JArray<jni.JByte> getBinaryValue(
-    jni.JObject bv,
-  ) {
-    return const jni.JArrayType(jni.JByteType()).fromRef(jniAccessors
-        .callMethodWithArgs(reference, _id_getBinaryValue,
-            jni.JniCallType.objectType, [bv.reference]).object);
-  }
-
-  static final _id_getBinaryValue1 =
-      jniAccessors.getMethodIDOf(_classRef, r"getBinaryValue", r"()[B");
-
-  /// from: public byte[] getBinaryValue()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Convenience alternative to \#getBinaryValue(Base64Variant)
-  /// that defaults to using
-  /// Base64Variants\#getDefaultVariant as the default encoding.
-  ///@return Decoded binary data
-  ///@throws IOException for low-level read issues, or
-  ///   JsonParseException for decoding problems
-  jni.JArray<jni.JByte> getBinaryValue1() {
-    return const jni.JArrayType(jni.JByteType()).fromRef(jniAccessors
-        .callMethodWithArgs(reference, _id_getBinaryValue1,
-            jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_readBinaryValue = jniAccessors.getMethodIDOf(
-      _classRef, r"readBinaryValue", r"(Ljava/io/OutputStream;)I");
-
-  /// from: public int readBinaryValue(java.io.OutputStream out)
-  ///
-  /// Method that can be used as an alternative to \#getBigIntegerValue(),
-  /// especially when value can be large. The main difference (beyond method
-  /// of returning content using OutputStream instead of as byte array)
-  /// is that content will NOT remain accessible after method returns: any content
-  /// processed will be consumed and is not buffered in any way. If caller needs
-  /// buffering, it has to implement it.
-  ///@param out Output stream to use for passing decoded binary data
-  ///@return Number of bytes that were decoded and written via OutputStream
-  ///@throws IOException for low-level read issues, or
-  ///   JsonParseException for decoding problems
-  ///@since 2.1
-  int readBinaryValue(
-    jni.JObject out,
-  ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_readBinaryValue,
-        jni.JniCallType.intType, [out.reference]).integer;
-  }
-
-  static final _id_readBinaryValue1 = jniAccessors.getMethodIDOf(
-      _classRef,
-      r"readBinaryValue",
-      r"(Lcom/fasterxml/jackson/core/Base64Variant;Ljava/io/OutputStream;)I");
-
-  /// from: public int readBinaryValue(com.fasterxml.jackson.core.Base64Variant bv, java.io.OutputStream out)
-  ///
-  /// Similar to \#readBinaryValue(OutputStream) but allows explicitly
-  /// specifying base64 variant to use.
-  ///@param bv base64 variant to use
-  ///@param out Output stream to use for passing decoded binary data
-  ///@return Number of bytes that were decoded and written via OutputStream
-  ///@throws IOException for low-level read issues, or
-  ///   JsonParseException for decoding problems
-  ///@since 2.1
-  int readBinaryValue1(
-    jni.JObject bv,
-    jni.JObject out,
-  ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_readBinaryValue1,
-        jni.JniCallType.intType, [bv.reference, out.reference]).integer;
-  }
-
-  static final _id_getValueAsInt =
-      jniAccessors.getMethodIDOf(_classRef, r"getValueAsInt", r"()I");
-
-  /// from: public int getValueAsInt()
-  ///
-  /// Method that will try to convert value of current token to a
-  /// Java {@code int} value.
-  /// Numbers are coerced using default Java rules; booleans convert to 0 (false)
-  /// and 1 (true), and Strings are parsed using default Java language integer
-  /// parsing rules.
-  ///
-  /// If representation can not be converted to an int (including structured type
-  /// markers like start/end Object/Array)
-  /// default value of __0__ will be returned; no exceptions are thrown.
-  ///@return {@code int} value current token is converted to, if possible; exception thrown
-  ///    otherwise
-  ///@throws IOException for low-level read issues, or
-  ///   JsonParseException for decoding problems
-  int getValueAsInt() {
-    return jniAccessors.callMethodWithArgs(
-        reference, _id_getValueAsInt, jni.JniCallType.intType, []).integer;
-  }
-
-  static final _id_getValueAsInt1 =
-      jniAccessors.getMethodIDOf(_classRef, r"getValueAsInt", r"(I)I");
-
-  /// from: public int getValueAsInt(int def)
-  ///
-  /// Method that will try to convert value of current token to a
-  /// __int__.
-  /// Numbers are coerced using default Java rules; booleans convert to 0 (false)
-  /// and 1 (true), and Strings are parsed using default Java language integer
-  /// parsing rules.
-  ///
-  /// If representation can not be converted to an int (including structured type
-  /// markers like start/end Object/Array)
-  /// specified __def__ will be returned; no exceptions are thrown.
-  ///@param def Default value to return if conversion to {@code int} is not possible
-  ///@return {@code int} value current token is converted to, if possible; {@code def} otherwise
-  ///@throws IOException for low-level read issues, or
-  ///   JsonParseException for decoding problems
-  int getValueAsInt1(
-    int def,
-  ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_getValueAsInt1,
-        jni.JniCallType.intType, [jni.JValueInt(def)]).integer;
-  }
-
-  static final _id_getValueAsLong =
-      jniAccessors.getMethodIDOf(_classRef, r"getValueAsLong", r"()J");
-
-  /// from: public long getValueAsLong()
-  ///
-  /// Method that will try to convert value of current token to a
-  /// __long__.
-  /// Numbers are coerced using default Java rules; booleans convert to 0 (false)
-  /// and 1 (true), and Strings are parsed using default Java language integer
-  /// parsing rules.
-  ///
-  /// If representation can not be converted to a long (including structured type
-  /// markers like start/end Object/Array)
-  /// default value of __0L__ will be returned; no exceptions are thrown.
-  ///@return {@code long} value current token is converted to, if possible; exception thrown
-  ///    otherwise
-  ///@throws IOException for low-level read issues, or
-  ///   JsonParseException for decoding problems
-  int getValueAsLong() {
-    return jniAccessors.callMethodWithArgs(
-        reference, _id_getValueAsLong, jni.JniCallType.longType, []).long;
-  }
-
-  static final _id_getValueAsLong1 =
-      jniAccessors.getMethodIDOf(_classRef, r"getValueAsLong", r"(J)J");
-
-  /// from: public long getValueAsLong(long def)
-  ///
-  /// Method that will try to convert value of current token to a
-  /// __long__.
-  /// Numbers are coerced using default Java rules; booleans convert to 0 (false)
-  /// and 1 (true), and Strings are parsed using default Java language integer
-  /// parsing rules.
-  ///
-  /// If representation can not be converted to a long (including structured type
-  /// markers like start/end Object/Array)
-  /// specified __def__ will be returned; no exceptions are thrown.
-  ///@param def Default value to return if conversion to {@code long} is not possible
-  ///@return {@code long} value current token is converted to, if possible; {@code def} otherwise
-  ///@throws IOException for low-level read issues, or
-  ///   JsonParseException for decoding problems
-  int getValueAsLong1(
-    int def,
-  ) {
-    return jniAccessors.callMethodWithArgs(
-        reference, _id_getValueAsLong1, jni.JniCallType.longType, [def]).long;
-  }
-
-  static final _id_getValueAsDouble =
-      jniAccessors.getMethodIDOf(_classRef, r"getValueAsDouble", r"()D");
-
-  /// from: public double getValueAsDouble()
-  ///
-  /// Method that will try to convert value of current token to a Java
-  /// __double__.
-  /// Numbers are coerced using default Java rules; booleans convert to 0.0 (false)
-  /// and 1.0 (true), and Strings are parsed using default Java language floating
-  /// point parsing rules.
-  ///
-  /// If representation can not be converted to a double (including structured types
-  /// like Objects and Arrays),
-  /// default value of __0.0__ will be returned; no exceptions are thrown.
-  ///@return {@code double} value current token is converted to, if possible; exception thrown
-  ///    otherwise
-  ///@throws IOException for low-level read issues, or
-  ///   JsonParseException for decoding problems
-  double getValueAsDouble() {
-    return jniAccessors.callMethodWithArgs(reference, _id_getValueAsDouble,
-        jni.JniCallType.doubleType, []).doubleFloat;
-  }
-
-  static final _id_getValueAsDouble1 =
-      jniAccessors.getMethodIDOf(_classRef, r"getValueAsDouble", r"(D)D");
-
-  /// from: public double getValueAsDouble(double def)
-  ///
-  /// Method that will try to convert value of current token to a
-  /// Java __double__.
-  /// Numbers are coerced using default Java rules; booleans convert to 0.0 (false)
-  /// and 1.0 (true), and Strings are parsed using default Java language floating
-  /// point parsing rules.
-  ///
-  /// If representation can not be converted to a double (including structured types
-  /// like Objects and Arrays),
-  /// specified __def__ will be returned; no exceptions are thrown.
-  ///@param def Default value to return if conversion to {@code double} is not possible
-  ///@return {@code double} value current token is converted to, if possible; {@code def} otherwise
-  ///@throws IOException for low-level read issues, or
-  ///   JsonParseException for decoding problems
-  double getValueAsDouble1(
-    double def,
-  ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_getValueAsDouble1,
-        jni.JniCallType.doubleType, [def]).doubleFloat;
-  }
-
-  static final _id_getValueAsBoolean =
-      jniAccessors.getMethodIDOf(_classRef, r"getValueAsBoolean", r"()Z");
-
-  /// from: public boolean getValueAsBoolean()
-  ///
-  /// Method that will try to convert value of current token to a
-  /// __boolean__.
-  /// JSON booleans map naturally; integer numbers other than 0 map to true, and
-  /// 0 maps to false
-  /// and Strings 'true' and 'false' map to corresponding values.
-  ///
-  /// If representation can not be converted to a boolean value (including structured types
-  /// like Objects and Arrays),
-  /// default value of __false__ will be returned; no exceptions are thrown.
-  ///@return {@code boolean} value current token is converted to, if possible; exception thrown
-  ///    otherwise
-  ///@throws IOException for low-level read issues, or
-  ///   JsonParseException for decoding problems
-  bool getValueAsBoolean() {
-    return jniAccessors.callMethodWithArgs(reference, _id_getValueAsBoolean,
-        jni.JniCallType.booleanType, []).boolean;
-  }
-
-  static final _id_getValueAsBoolean1 =
-      jniAccessors.getMethodIDOf(_classRef, r"getValueAsBoolean", r"(Z)Z");
-
-  /// from: public boolean getValueAsBoolean(boolean def)
-  ///
-  /// Method that will try to convert value of current token to a
-  /// __boolean__.
-  /// JSON booleans map naturally; integer numbers other than 0 map to true, and
-  /// 0 maps to false
-  /// and Strings 'true' and 'false' map to corresponding values.
-  ///
-  /// If representation can not be converted to a boolean value (including structured types
-  /// like Objects and Arrays),
-  /// specified __def__ will be returned; no exceptions are thrown.
-  ///@param def Default value to return if conversion to {@code boolean} is not possible
-  ///@return {@code boolean} value current token is converted to, if possible; {@code def} otherwise
-  ///@throws IOException for low-level read issues, or
-  ///   JsonParseException for decoding problems
-  bool getValueAsBoolean1(
-    bool def,
-  ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_getValueAsBoolean1,
-        jni.JniCallType.booleanType, [def ? 1 : 0]).boolean;
-  }
-
-  static final _id_getValueAsString = jniAccessors.getMethodIDOf(
-      _classRef, r"getValueAsString", r"()Ljava/lang/String;");
-
-  /// from: public java.lang.String getValueAsString()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method that will try to convert value of current token to a
-  /// java.lang.String.
-  /// JSON Strings map naturally; scalar values get converted to
-  /// their textual representation.
-  /// If representation can not be converted to a String value (including structured types
-  /// like Objects and Arrays and {@code null} token), default value of
-  /// __null__ will be returned; no exceptions are thrown.
-  ///@return String value current token is converted to, if possible; {@code null} otherwise
-  ///@throws IOException for low-level read issues, or
-  ///   JsonParseException for decoding problems
-  ///@since 2.1
-  jni.JString getValueAsString() {
-    return const jni.JStringType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_getValueAsString,
-        jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_getValueAsString1 = jniAccessors.getMethodIDOf(_classRef,
-      r"getValueAsString", r"(Ljava/lang/String;)Ljava/lang/String;");
-
-  /// from: public abstract java.lang.String getValueAsString(java.lang.String def)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method that will try to convert value of current token to a
-  /// java.lang.String.
-  /// JSON Strings map naturally; scalar values get converted to
-  /// their textual representation.
-  /// If representation can not be converted to a String value (including structured types
-  /// like Objects and Arrays and {@code null} token), specified default value
-  /// will be returned; no exceptions are thrown.
-  ///@param def Default value to return if conversion to {@code String} is not possible
-  ///@return String value current token is converted to, if possible; {@code def} otherwise
-  ///@throws IOException for low-level read issues, or
-  ///   JsonParseException for decoding problems
-  ///@since 2.1
-  jni.JString getValueAsString1(
-    jni.JString def,
-  ) {
-    return const jni.JStringType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_getValueAsString1,
-        jni.JniCallType.objectType,
-        [def.reference]).object);
-  }
-
-  static final _id_canReadObjectId =
-      jniAccessors.getMethodIDOf(_classRef, r"canReadObjectId", r"()Z");
-
-  /// from: public boolean canReadObjectId()
-  ///
-  /// Introspection method that may be called to see if the underlying
-  /// data format supports some kind of Object Ids natively (many do not;
-  /// for example, JSON doesn't).
-  ///
-  /// Default implementation returns true; overridden by data formats
-  /// that do support native Object Ids. Caller is expected to either
-  /// use a non-native notation (explicit property or such), or fail,
-  /// in case it can not use native object ids.
-  ///@return {@code True} if the format being read supports native Object Ids;
-  ///    {@code false} if not
-  ///@since 2.3
-  bool canReadObjectId() {
-    return jniAccessors.callMethodWithArgs(reference, _id_canReadObjectId,
-        jni.JniCallType.booleanType, []).boolean;
-  }
-
-  static final _id_canReadTypeId =
-      jniAccessors.getMethodIDOf(_classRef, r"canReadTypeId", r"()Z");
-
-  /// from: public boolean canReadTypeId()
-  ///
-  /// Introspection method that may be called to see if the underlying
-  /// data format supports some kind of Type Ids natively (many do not;
-  /// for example, JSON doesn't).
-  ///
-  /// Default implementation returns true; overridden by data formats
-  /// that do support native Type Ids. Caller is expected to either
-  /// use a non-native notation (explicit property or such), or fail,
-  /// in case it can not use native type ids.
-  ///@return {@code True} if the format being read supports native Type Ids;
-  ///    {@code false} if not
-  ///@since 2.3
-  bool canReadTypeId() {
-    return jniAccessors.callMethodWithArgs(
-        reference, _id_canReadTypeId, jni.JniCallType.booleanType, []).boolean;
-  }
-
-  static final _id_getObjectId = jniAccessors.getMethodIDOf(
-      _classRef, r"getObjectId", r"()Ljava/lang/Object;");
-
-  /// from: public java.lang.Object getObjectId()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method that can be called to check whether current token
-  /// (one that was just read) has an associated Object id, and if
-  /// so, return it.
-  /// Note that while typically caller should check with \#canReadObjectId
-  /// first, it is not illegal to call this method even if that method returns
-  /// true; but if so, it will return null. This may be used to simplify calling
-  /// code.
-  ///
-  /// Default implementation will simply return null.
-  ///@return Native Object id associated with the current token, if any; {@code null} if none
-  ///@throws IOException for low-level read issues, or
-  ///   JsonParseException for decoding problems
-  ///@since 2.3
-  jni.JObject getObjectId() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
-        reference, _id_getObjectId, jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_getTypeId = jniAccessors.getMethodIDOf(
-      _classRef, r"getTypeId", r"()Ljava/lang/Object;");
-
-  /// from: public java.lang.Object getTypeId()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method that can be called to check whether current token
-  /// (one that was just read) has an associated type id, and if
-  /// so, return it.
-  /// Note that while typically caller should check with \#canReadTypeId
-  /// first, it is not illegal to call this method even if that method returns
-  /// true; but if so, it will return null. This may be used to simplify calling
-  /// code.
-  ///
-  /// Default implementation will simply return null.
-  ///@return Native Type Id associated with the current token, if any; {@code null} if none
-  ///@throws IOException for low-level read issues, or
-  ///   JsonParseException for decoding problems
-  ///@since 2.3
-  jni.JObject getTypeId() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
-        reference, _id_getTypeId, jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_readValueAs = jniAccessors.getMethodIDOf(
-      _classRef, r"readValueAs", r"(Ljava/lang/Class;)Ljava/lang/Object;");
-
-  /// from: public T readValueAs(java.lang.Class<T> valueType)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method to deserialize JSON content into a non-container
-  /// type (it can be an array type, however): typically a bean, array
-  /// or a wrapper type (like java.lang.Boolean).
-  /// __Note__: method can only be called if the parser has
-  /// an object codec assigned; this is true for parsers constructed
-  /// by <code>MappingJsonFactory</code> (from "jackson-databind" jar)
-  /// but not for JsonFactory (unless its <code>setCodec</code>
-  /// method has been explicitly called).
-  ///
-  /// This method may advance the event stream, for structured types
-  /// the current token will be the closing end marker (END_ARRAY,
-  /// END_OBJECT) of the bound structure. For non-structured Json types
-  /// (and for JsonToken\#VALUE_EMBEDDED_OBJECT)
-  /// stream is not advanced.
-  ///
-  /// Note: this method should NOT be used if the result type is a
-  /// container (java.util.Collection or java.util.Map.
-  /// The reason is that due to type erasure, key and value types
-  /// can not be introspected when using this method.
-  ///@param <T> Nominal type parameter for value type
-  ///@param valueType Java type to read content as (passed to ObjectCodec that
-  ///    deserializes content)
-  ///@return Java value read from content
-  ///@throws IOException if there is either an underlying I/O problem or decoding
-  ///    issue at format layer
-  $T readValueAs<$T extends jni.JObject>(
-    jni.JObject valueType, {
-    required jni.JObjType<$T> T,
-  }) {
-    return T.fromRef(jniAccessors.callMethodWithArgs(reference, _id_readValueAs,
-        jni.JniCallType.objectType, [valueType.reference]).object);
-  }
-
-  static final _id_readValueAs1 = jniAccessors.getMethodIDOf(
-      _classRef,
-      r"readValueAs",
-      r"(Lcom/fasterxml/jackson/core/type/TypeReference;)Ljava/lang/Object;");
-
-  /// from: public T readValueAs(com.fasterxml.jackson.core.type.TypeReference<?> valueTypeRef)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method to deserialize JSON content into a Java type, reference
-  /// to which is passed as argument. Type is passed using so-called
-  /// "super type token"
-  /// and specifically needs to be used if the root type is a
-  /// parameterized (generic) container type.
-  /// __Note__: method can only be called if the parser has
-  /// an object codec assigned; this is true for parsers constructed
-  /// by <code>MappingJsonFactory</code> (defined in 'jackson-databind' bundle)
-  /// but not for JsonFactory (unless its <code>setCodec</code>
-  /// method has been explicitly called).
-  ///
-  /// This method may advance the event stream, for structured types
-  /// the current token will be the closing end marker (END_ARRAY,
-  /// END_OBJECT) of the bound structure. For non-structured Json types
-  /// (and for JsonToken\#VALUE_EMBEDDED_OBJECT)
-  /// stream is not advanced.
-  ///@param <T> Nominal type parameter for value type
-  ///@param valueTypeRef Java type to read content as (passed to ObjectCodec that
-  ///    deserializes content)
-  ///@return Java value read from content
-  ///@throws IOException if there is either an underlying I/O problem or decoding
-  ///    issue at format layer
-  $T readValueAs1<$T extends jni.JObject>(
-    jni.JObject valueTypeRef, {
-    required jni.JObjType<$T> T,
-  }) {
-    return T.fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_readValueAs1,
-        jni.JniCallType.objectType,
-        [valueTypeRef.reference]).object);
-  }
-
-  static final _id_readValuesAs = jniAccessors.getMethodIDOf(
-      _classRef, r"readValuesAs", r"(Ljava/lang/Class;)Ljava/util/Iterator;");
-
-  /// from: public java.util.Iterator<T> readValuesAs(java.lang.Class<T> valueType)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method for reading sequence of Objects from parser stream,
-  /// all with same specified value type.
-  ///@param <T> Nominal type parameter for value type
-  ///@param valueType Java type to read content as (passed to ObjectCodec that
-  ///    deserializes content)
-  ///@return Iterator for reading multiple Java values from content
-  ///@throws IOException if there is either an underlying I/O problem or decoding
-  ///    issue at format layer
-  jni.JObject readValuesAs<$T extends jni.JObject>(
-    jni.JObject valueType, {
-    required jni.JObjType<$T> T,
-  }) {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_readValuesAs,
-        jni.JniCallType.objectType,
-        [valueType.reference]).object);
-  }
-
-  static final _id_readValuesAs1 = jniAccessors.getMethodIDOf(
-      _classRef,
-      r"readValuesAs",
-      r"(Lcom/fasterxml/jackson/core/type/TypeReference;)Ljava/util/Iterator;");
-
-  /// from: public java.util.Iterator<T> readValuesAs(com.fasterxml.jackson.core.type.TypeReference<T> valueTypeRef)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method for reading sequence of Objects from parser stream,
-  /// all with same specified value type.
-  ///@param <T> Nominal type parameter for value type
-  ///@param valueTypeRef Java type to read content as (passed to ObjectCodec that
-  ///    deserializes content)
-  ///@return Iterator for reading multiple Java values from content
-  ///@throws IOException if there is either an underlying I/O problem or decoding
-  ///    issue at format layer
-  jni.JObject readValuesAs1<$T extends jni.JObject>(
-    jni.JObject valueTypeRef, {
-    required jni.JObjType<$T> T,
-  }) {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
-        reference,
-        _id_readValuesAs1,
-        jni.JniCallType.objectType,
-        [valueTypeRef.reference]).object);
-  }
-
-  static final _id_readValueAsTree = jniAccessors.getMethodIDOf(
-      _classRef, r"readValueAsTree", r"()Ljava/lang/Object;");
-
-  /// from: public T readValueAsTree()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  ///
-  /// Method to deserialize JSON content into equivalent "tree model",
-  /// represented by root TreeNode of resulting model.
-  /// For JSON Arrays it will an array node (with child nodes),
-  /// for objects object node (with child nodes), and for other types
-  /// matching leaf node type. Empty or whitespace documents are null.
-  ///@param <T> Nominal type parameter for result node type (to reduce need for casting)
-  ///@return root of the document, or null if empty or whitespace.
-  ///@throws IOException if there is either an underlying I/O problem or decoding
-  ///    issue at format layer
-  $T readValueAsTree<$T extends jni.JObject>({
-    required jni.JObjType<$T> T,
-  }) {
-    return T.fromRef(jniAccessors.callMethodWithArgs(
-        reference, _id_readValueAsTree, jni.JniCallType.objectType, []).object);
-  }
-}
-
-class $JsonParserType extends jni.JObjType<JsonParser> {
-  const $JsonParserType();
-
-  @override
-  String get signature => r"Lcom/fasterxml/jackson/core/JsonParser;";
-
-  @override
-  JsonParser fromRef(jni.JObjectPtr ref) => JsonParser.fromRef(ref);
-
-  @override
-  jni.JObjType get superType => const jni.JObjectType();
-
-  @override
-  final superCount = 1;
-
-  @override
-  int get hashCode => ($JsonParserType).hashCode;
-
-  @override
-  bool operator ==(Object other) {
-    return other.runtimeType == $JsonParserType && other is $JsonParserType;
-  }
-}
-
-/// from: com.fasterxml.jackson.core.JsonParser$Feature
-///
-/// Enumeration that defines all on/off features for parsers.
-class JsonParser_Feature extends jni.JObject {
-  @override
-  late final jni.JObjType $type = type;
-
-  JsonParser_Feature.fromRef(
-    jni.JObjectPtr ref,
-  ) : super.fromRef(ref);
-
-  static final _classRef =
-      jniAccessors.getClassOf(r"com/fasterxml/jackson/core/JsonParser$Feature");
-
-  /// The type which includes information such as the signature of this class.
-  static const type = $JsonParser_FeatureType();
-  static final _id_values = jniAccessors.getStaticMethodIDOf(_classRef,
-      r"values", r"()[Lcom/fasterxml/jackson/core/JsonParser$Feature;");
-
-  /// from: static public com.fasterxml.jackson.core.JsonParser.Feature[] values()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  static jni.JArray<JsonParser_Feature> values() {
-    return const jni.JArrayType($JsonParser_FeatureType()).fromRef(jniAccessors
-        .callStaticMethodWithArgs(
-            _classRef, _id_values, jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_valueOf = jniAccessors.getStaticMethodIDOf(
-      _classRef,
-      r"valueOf",
-      r"(Ljava/lang/String;)Lcom/fasterxml/jackson/core/JsonParser$Feature;");
-
-  /// from: static public com.fasterxml.jackson.core.JsonParser.Feature valueOf(java.lang.String name)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  static JsonParser_Feature valueOf(
-    jni.JString name,
-  ) {
-    return const $JsonParser_FeatureType().fromRef(jniAccessors
-        .callStaticMethodWithArgs(_classRef, _id_valueOf,
-            jni.JniCallType.objectType, [name.reference]).object);
-  }
-
-  static final _id_collectDefaults =
-      jniAccessors.getStaticMethodIDOf(_classRef, r"collectDefaults", r"()I");
-
-  /// from: static public int collectDefaults()
-  ///
-  /// Method that calculates bit set (flags) of all features that
-  /// are enabled by default.
-  ///@return Bit mask of all features that are enabled by default
-  static int collectDefaults() {
-    return jniAccessors.callStaticMethodWithArgs(
-        _classRef, _id_collectDefaults, jni.JniCallType.intType, []).integer;
-  }
-
-  static final _id_enabledByDefault =
-      jniAccessors.getMethodIDOf(_classRef, r"enabledByDefault", r"()Z");
-
-  /// from: public boolean enabledByDefault()
-  bool enabledByDefault() {
-    return jniAccessors.callMethodWithArgs(reference, _id_enabledByDefault,
-        jni.JniCallType.booleanType, []).boolean;
-  }
-
-  static final _id_enabledIn =
-      jniAccessors.getMethodIDOf(_classRef, r"enabledIn", r"(I)Z");
-
-  /// from: public boolean enabledIn(int flags)
-  bool enabledIn(
-    int flags,
-  ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_enabledIn,
-        jni.JniCallType.booleanType, [jni.JValueInt(flags)]).boolean;
-  }
-
-  static final _id_getMask =
-      jniAccessors.getMethodIDOf(_classRef, r"getMask", r"()I");
-
-  /// from: public int getMask()
-  int getMask() {
-    return jniAccessors.callMethodWithArgs(
-        reference, _id_getMask, jni.JniCallType.intType, []).integer;
-  }
-}
-
-class $JsonParser_FeatureType extends jni.JObjType<JsonParser_Feature> {
-  const $JsonParser_FeatureType();
-
-  @override
-  String get signature => r"Lcom/fasterxml/jackson/core/JsonParser$Feature;";
-
-  @override
-  JsonParser_Feature fromRef(jni.JObjectPtr ref) =>
-      JsonParser_Feature.fromRef(ref);
-
-  @override
-  jni.JObjType get superType => const jni.JObjectType();
-
-  @override
-  final superCount = 1;
-
-  @override
-  int get hashCode => ($JsonParser_FeatureType).hashCode;
-
-  @override
-  bool operator ==(Object other) {
-    return other.runtimeType == $JsonParser_FeatureType &&
-        other is $JsonParser_FeatureType;
-  }
-}
-
-/// from: com.fasterxml.jackson.core.JsonParser$NumberType
-///
-/// Enumeration of possible "native" (optimal) types that can be
-/// used for numbers.
-class JsonParser_NumberType extends jni.JObject {
-  @override
-  late final jni.JObjType $type = type;
-
-  JsonParser_NumberType.fromRef(
-    jni.JObjectPtr ref,
-  ) : super.fromRef(ref);
-
-  static final _classRef = jniAccessors
-      .getClassOf(r"com/fasterxml/jackson/core/JsonParser$NumberType");
-
-  /// The type which includes information such as the signature of this class.
-  static const type = $JsonParser_NumberTypeType();
-  static final _id_values = jniAccessors.getStaticMethodIDOf(_classRef,
-      r"values", r"()[Lcom/fasterxml/jackson/core/JsonParser$NumberType;");
-
-  /// from: static public com.fasterxml.jackson.core.JsonParser.NumberType[] values()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  static jni.JArray<JsonParser_NumberType> values() {
-    return const jni.JArrayType($JsonParser_NumberTypeType()).fromRef(
-        jniAccessors.callStaticMethodWithArgs(
-            _classRef, _id_values, jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_valueOf = jniAccessors.getStaticMethodIDOf(
-      _classRef,
-      r"valueOf",
-      r"(Ljava/lang/String;)Lcom/fasterxml/jackson/core/JsonParser$NumberType;");
-
-  /// from: static public com.fasterxml.jackson.core.JsonParser.NumberType valueOf(java.lang.String name)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  static JsonParser_NumberType valueOf(
-    jni.JString name,
-  ) {
-    return const $JsonParser_NumberTypeType().fromRef(jniAccessors
-        .callStaticMethodWithArgs(_classRef, _id_valueOf,
-            jni.JniCallType.objectType, [name.reference]).object);
-  }
-}
-
-class $JsonParser_NumberTypeType extends jni.JObjType<JsonParser_NumberType> {
-  const $JsonParser_NumberTypeType();
-
-  @override
-  String get signature => r"Lcom/fasterxml/jackson/core/JsonParser$NumberType;";
-
-  @override
-  JsonParser_NumberType fromRef(jni.JObjectPtr ref) =>
-      JsonParser_NumberType.fromRef(ref);
-
-  @override
-  jni.JObjType get superType => const jni.JObjectType();
-
-  @override
-  final superCount = 1;
-
-  @override
-  int get hashCode => ($JsonParser_NumberTypeType).hashCode;
-
-  @override
-  bool operator ==(Object other) {
-    return other.runtimeType == $JsonParser_NumberTypeType &&
-        other is $JsonParser_NumberTypeType;
-  }
-}
diff --git a/pkgs/jnigen/test/jackson_core_test/third_party/dart_only/lib/com/fasterxml/jackson/core/JsonToken.dart b/pkgs/jnigen/test/jackson_core_test/third_party/dart_only/lib/com/fasterxml/jackson/core/JsonToken.dart
deleted file mode 100644
index 2a88806..0000000
--- a/pkgs/jnigen/test/jackson_core_test/third_party/dart_only/lib/com/fasterxml/jackson/core/JsonToken.dart
+++ /dev/null
@@ -1,223 +0,0 @@
-// Generated from jackson-core which is licensed under the Apache License 2.0.
-// The following copyright from the original authors applies.
-// See https://github.com/FasterXML/jackson-core/blob/2.14/LICENSE
-//
-// Copyright (c) 2007 - The Jackson Project Authors
-// Licensed under the Apache License, Version 2.0 (the "License")
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// Autogenerated by jnigen. DO NOT EDIT!
-
-// ignore_for_file: annotate_overrides
-// ignore_for_file: camel_case_extensions
-// ignore_for_file: camel_case_types
-// ignore_for_file: constant_identifier_names
-// ignore_for_file: file_names
-// ignore_for_file: no_leading_underscores_for_local_identifiers
-// ignore_for_file: non_constant_identifier_names
-// ignore_for_file: overridden_fields
-// ignore_for_file: unnecessary_cast
-// ignore_for_file: unused_element
-// ignore_for_file: unused_field
-// ignore_for_file: unused_import
-// ignore_for_file: unused_shown_name
-
-import "dart:isolate" show ReceivePort;
-import "dart:ffi" as ffi;
-import "package:jni/internal_helpers_for_jnigen.dart";
-import "package:jni/jni.dart" as jni;
-
-import "../../../../_init.dart";
-
-/// from: com.fasterxml.jackson.core.JsonToken
-///
-/// Enumeration for basic token types used for returning results
-/// of parsing JSON content.
-class JsonToken extends jni.JObject {
-  @override
-  late final jni.JObjType $type = type;
-
-  JsonToken.fromRef(
-    jni.JObjectPtr ref,
-  ) : super.fromRef(ref);
-
-  static final _classRef =
-      jniAccessors.getClassOf(r"com/fasterxml/jackson/core/JsonToken");
-
-  /// The type which includes information such as the signature of this class.
-  static const type = $JsonTokenType();
-  static final _id_values = jniAccessors.getStaticMethodIDOf(
-      _classRef, r"values", r"()[Lcom/fasterxml/jackson/core/JsonToken;");
-
-  /// from: static public com.fasterxml.jackson.core.JsonToken[] values()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  static jni.JArray<JsonToken> values() {
-    return const jni.JArrayType($JsonTokenType()).fromRef(jniAccessors
-        .callStaticMethodWithArgs(
-            _classRef, _id_values, jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_valueOf = jniAccessors.getStaticMethodIDOf(
-      _classRef,
-      r"valueOf",
-      r"(Ljava/lang/String;)Lcom/fasterxml/jackson/core/JsonToken;");
-
-  /// from: static public com.fasterxml.jackson.core.JsonToken valueOf(java.lang.String name)
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  static JsonToken valueOf(
-    jni.JString name,
-  ) {
-    return const $JsonTokenType().fromRef(jniAccessors.callStaticMethodWithArgs(
-        _classRef,
-        _id_valueOf,
-        jni.JniCallType.objectType,
-        [name.reference]).object);
-  }
-
-  static final _id_id = jniAccessors.getMethodIDOf(_classRef, r"id", r"()I");
-
-  /// from: public final int id()
-  int id() {
-    return jniAccessors.callMethodWithArgs(
-        reference, _id_id, jni.JniCallType.intType, []).integer;
-  }
-
-  static final _id_asString = jniAccessors.getMethodIDOf(
-      _classRef, r"asString", r"()Ljava/lang/String;");
-
-  /// from: public final java.lang.String asString()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  jni.JString asString() {
-    return const jni.JStringType().fromRef(jniAccessors.callMethodWithArgs(
-        reference, _id_asString, jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_asCharArray =
-      jniAccessors.getMethodIDOf(_classRef, r"asCharArray", r"()[C");
-
-  /// from: public final char[] asCharArray()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  jni.JArray<jni.JChar> asCharArray() {
-    return const jni.JArrayType(jni.JCharType()).fromRef(jniAccessors
-        .callMethodWithArgs(
-            reference, _id_asCharArray, jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_asByteArray =
-      jniAccessors.getMethodIDOf(_classRef, r"asByteArray", r"()[B");
-
-  /// from: public final byte[] asByteArray()
-  /// The returned object must be deleted after use, by calling the `delete` method.
-  jni.JArray<jni.JByte> asByteArray() {
-    return const jni.JArrayType(jni.JByteType()).fromRef(jniAccessors
-        .callMethodWithArgs(
-            reference, _id_asByteArray, jni.JniCallType.objectType, []).object);
-  }
-
-  static final _id_isNumeric =
-      jniAccessors.getMethodIDOf(_classRef, 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 jniAccessors.callMethodWithArgs(
-        reference, _id_isNumeric, jni.JniCallType.booleanType, []).boolean;
-  }
-
-  static final _id_isStructStart =
-      jniAccessors.getMethodIDOf(_classRef, r"isStructStart", r"()Z");
-
-  /// from: public final boolean isStructStart()
-  ///
-  /// Accessor that is functionally equivalent to:
-  /// <code>
-  ///    this == JsonToken.START_OBJECT || this == JsonToken.START_ARRAY
-  /// </code>
-  ///@return {@code True} if this token is {@code START_OBJECT} or {@code START_ARRAY},
-  ///   {@code false} otherwise
-  ///@since 2.3
-  bool isStructStart() {
-    return jniAccessors.callMethodWithArgs(
-        reference, _id_isStructStart, jni.JniCallType.booleanType, []).boolean;
-  }
-
-  static final _id_isStructEnd =
-      jniAccessors.getMethodIDOf(_classRef, r"isStructEnd", r"()Z");
-
-  /// from: public final boolean isStructEnd()
-  ///
-  /// Accessor that is functionally equivalent to:
-  /// <code>
-  ///    this == JsonToken.END_OBJECT || this == JsonToken.END_ARRAY
-  /// </code>
-  ///@return {@code True} if this token is {@code END_OBJECT} or {@code END_ARRAY},
-  ///   {@code false} otherwise
-  ///@since 2.3
-  bool isStructEnd() {
-    return jniAccessors.callMethodWithArgs(
-        reference, _id_isStructEnd, jni.JniCallType.booleanType, []).boolean;
-  }
-
-  static final _id_isScalarValue =
-      jniAccessors.getMethodIDOf(_classRef, r"isScalarValue", r"()Z");
-
-  /// from: public final boolean isScalarValue()
-  ///
-  /// Method that can be used to check whether this token represents
-  /// a valid non-structured value. This means all {@code VALUE_xxx} tokens;
-  /// excluding {@code START_xxx} and {@code END_xxx} tokens as well
-  /// {@code FIELD_NAME}.
-  ///@return {@code True} if this token is a scalar value token (one of
-  ///   {@code VALUE_xxx} tokens), {@code false} otherwise
-  bool isScalarValue() {
-    return jniAccessors.callMethodWithArgs(
-        reference, _id_isScalarValue, jni.JniCallType.booleanType, []).boolean;
-  }
-
-  static final _id_isBoolean =
-      jniAccessors.getMethodIDOf(_classRef, 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 jniAccessors.callMethodWithArgs(
-        reference, _id_isBoolean, jni.JniCallType.booleanType, []).boolean;
-  }
-}
-
-class $JsonTokenType extends jni.JObjType<JsonToken> {
-  const $JsonTokenType();
-
-  @override
-  String get signature => r"Lcom/fasterxml/jackson/core/JsonToken;";
-
-  @override
-  JsonToken fromRef(jni.JObjectPtr ref) => JsonToken.fromRef(ref);
-
-  @override
-  jni.JObjType get superType => const jni.JObjectType();
-
-  @override
-  final superCount = 1;
-
-  @override
-  int get hashCode => ($JsonTokenType).hashCode;
-
-  @override
-  bool operator ==(Object other) {
-    return other.runtimeType == $JsonTokenType && other is $JsonTokenType;
-  }
-}
diff --git a/pkgs/jnigen/test/jackson_core_test/third_party/dart_only/lib/com/fasterxml/jackson/core/_package.dart b/pkgs/jnigen/test/jackson_core_test/third_party/dart_only/lib/com/fasterxml/jackson/core/_package.dart
deleted file mode 100644
index cae2a52..0000000
--- a/pkgs/jnigen/test/jackson_core_test/third_party/dart_only/lib/com/fasterxml/jackson/core/_package.dart
+++ /dev/null
@@ -1,3 +0,0 @@
-export "JsonFactory.dart";
-export "JsonParser.dart";
-export "JsonToken.dart";
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 59119b4..b8e33c2 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
@@ -31,7 +31,7 @@
 /// from: com.github.dart_lang.jnigen.SuspendFun
 class SuspendFun extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<SuspendFun> $type = type;
 
   SuspendFun.fromRef(
     jni.JObjectPtr ref,
@@ -118,6 +118,6 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $SuspendFunType && other is $SuspendFunType;
+    return other.runtimeType == ($SuspendFunType) && other is $SuspendFunType;
   }
 }
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 f0a4754..a051008 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
@@ -23,44 +23,39 @@
 import "package:jni/internal_helpers_for_jnigen.dart";
 import "package:jni/jni.dart" as jni;
 
-// Auto-generated initialization code.
-
-final jniEnv = jni.Jni.env;
-final jniAccessors = jni.Jni.accessors;
-
 /// from: com.github.dart_lang.jnigen.SuspendFun
 class SuspendFun extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<SuspendFun> $type = type;
 
   SuspendFun.fromRef(
     jni.JObjectPtr ref,
   ) : super.fromRef(ref);
 
-  static final _classRef =
-      jniAccessors.getClassOf(r"com/github/dart_lang/jnigen/SuspendFun");
+  static final _class =
+      jni.Jni.findJClass(r"com/github/dart_lang/jnigen/SuspendFun");
 
   /// The type which includes information such as the signature of this class.
   static const type = $SuspendFunType();
   static final _id_ctor =
-      jniAccessors.getMethodIDOf(_classRef, r"<init>", r"()V");
+      jni.Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"()V");
 
   /// from: public void <init>()
   /// The returned object must be deleted after use, by calling the `delete` method.
   factory SuspendFun() {
-    return SuspendFun.fromRef(
-        jniAccessors.newObjectWithArgs(_classRef, _id_ctor, []).object);
+    return SuspendFun.fromRef(jni.Jni.accessors
+        .newObjectWithArgs(_class.reference, _id_ctor, []).object);
   }
 
-  static final _id_sayHello = jniAccessors.getMethodIDOf(_classRef, r"sayHello",
-      r"(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;");
+  static final _id_sayHello = jni.Jni.accessors.getMethodIDOf(_class.reference,
+      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 deleted after use, by calling the `delete` method.
   Future<jni.JString> sayHello() async {
     final $p = ReceivePort();
     final $c = jni.JObject.fromRef(jni.Jni.newPortContinuation($p));
-    jniAccessors.callMethodWithArgs(reference, _id_sayHello,
+    jni.Jni.accessors.callMethodWithArgs(reference, _id_sayHello,
         jni.JniCallType.objectType, [$c.reference]).object;
     final $o = jni.JObjectPtr.fromAddress(await $p.first);
     final $k = const jni.JStringType().getClass().reference;
@@ -70,8 +65,8 @@
     return const jni.JStringType().fromRef($o);
   }
 
-  static final _id_sayHello1 = jniAccessors.getMethodIDOf(
-      _classRef,
+  static final _id_sayHello1 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
       r"sayHello",
       r"(Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;");
 
@@ -82,7 +77,7 @@
   ) async {
     final $p = ReceivePort();
     final $c = jni.JObject.fromRef(jni.Jni.newPortContinuation($p));
-    jniAccessors.callMethodWithArgs(reference, _id_sayHello1,
+    jni.Jni.accessors.callMethodWithArgs(reference, _id_sayHello1,
         jni.JniCallType.objectType, [string.reference, $c.reference]).object;
     final $o = jni.JObjectPtr.fromAddress(await $p.first);
     final $k = const jni.JStringType().getClass().reference;
@@ -113,6 +108,6 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $SuspendFunType && other is $SuspendFunType;
+    return other.runtimeType == ($SuspendFunType) && other is $SuspendFunType;
   }
 }
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 16e99fc..d8b09c7 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
@@ -31,7 +31,7 @@
 /// from: com.github.dart_lang.jnigen.simple_package.Example
 class Example extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<Example> $type = type;
 
   Example.fromRef(
     jni.JObjectPtr ref,
@@ -471,8 +471,8 @@
 
   /// from: static public int[] getArr()
   /// The returned object must be deleted after use, by calling the `delete` method.
-  static jni.JArray<jni.JInt> getArr() {
-    return const jni.JArrayType(jni.JIntType()).fromRef(_getArr().object);
+  static jni.JArray<jni.jint> getArr() {
+    return const jni.JArrayType(jni.jintType()).fromRef(_getArr().object);
   }
 
   static final _addAll = jniLookup<
@@ -482,7 +482,7 @@
 
   /// from: static public int addAll(int[] arr)
   static int addAll(
-    jni.JArray<jni.JInt> arr,
+    jni.JArray<jni.jint> arr,
   ) {
     return _addAll(arr.reference).integer;
   }
@@ -531,14 +531,14 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $ExampleType && other is $ExampleType;
+    return other.runtimeType == ($ExampleType) && other is $ExampleType;
   }
 }
 
 /// from: com.github.dart_lang.jnigen.simple_package.Example$Nested
 class Example_Nested extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<Example_Nested> $type = type;
 
   Example_Nested.fromRef(
     jni.JObjectPtr ref,
@@ -605,7 +605,7 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $Example_NestedType &&
+    return other.runtimeType == ($Example_NestedType) &&
         other is $Example_NestedType;
   }
 }
@@ -613,7 +613,7 @@
 /// from: com.github.dart_lang.jnigen.simple_package.Exceptions
 class Exceptions extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<Exceptions> $type = type;
 
   Exceptions.fromRef(
     jni.JObjectPtr ref,
@@ -703,8 +703,8 @@
 
   /// from: static public int[] staticIntArrayMethod()
   /// The returned object must be deleted after use, by calling the `delete` method.
-  static jni.JArray<jni.JInt> staticIntArrayMethod() {
-    return const jni.JArrayType(jni.JIntType())
+  static jni.JArray<jni.jint> staticIntArrayMethod() {
+    return const jni.JArrayType(jni.jintType())
         .fromRef(_staticIntArrayMethod().object);
   }
 
@@ -752,8 +752,8 @@
 
   /// from: public int[] intArrayMethod()
   /// The returned object must be deleted after use, by calling the `delete` method.
-  jni.JArray<jni.JInt> intArrayMethod() {
-    return const jni.JArrayType(jni.JIntType())
+  jni.JArray<jni.jint> intArrayMethod() {
+    return const jni.JArrayType(jni.jintType())
         .fromRef(_intArrayMethod(reference).object);
   }
 
@@ -848,14 +848,14 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $ExceptionsType && other is $ExceptionsType;
+    return other.runtimeType == ($ExceptionsType) && other is $ExceptionsType;
   }
 }
 
 /// from: com.github.dart_lang.jnigen.simple_package.Fields
 class Fields extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<Fields> $type = type;
 
   Fields.fromRef(
     jni.JObjectPtr ref,
@@ -1103,14 +1103,14 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $FieldsType && other is $FieldsType;
+    return other.runtimeType == ($FieldsType) && other is $FieldsType;
   }
 }
 
 /// from: com.github.dart_lang.jnigen.simple_package.Fields$Nested
 class Fields_Nested extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<Fields_Nested> $type = type;
 
   Fields_Nested.fromRef(
     jni.JObjectPtr ref,
@@ -1193,7 +1193,7 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $Fields_NestedType &&
+    return other.runtimeType == ($Fields_NestedType) &&
         other is $Fields_NestedType;
   }
 }
@@ -1201,7 +1201,7 @@
 /// from: com.github.dart_lang.jnigen.pkg2.C2
 class C2 extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<C2> $type = type;
 
   C2.fromRef(
     jni.JObjectPtr ref,
@@ -1256,14 +1256,14 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $C2Type && other is $C2Type;
+    return other.runtimeType == ($C2Type) && other is $C2Type;
   }
 }
 
 /// from: com.github.dart_lang.jnigen.pkg2.Example
 class Example1 extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<Example1> $type = type;
 
   Example1.fromRef(
     jni.JObjectPtr ref,
@@ -1313,14 +1313,14 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $Example1Type && other is $Example1Type;
+    return other.runtimeType == ($Example1Type) && other is $Example1Type;
   }
 }
 
 /// from: com.github.dart_lang.jnigen.generics.GrandParent
 class GrandParent<$T extends jni.JObject> extends jni.JObject {
   @override
-  late final jni.JObjType $type = type(T);
+  late final jni.JObjType<GrandParent<$T>> $type = type(T);
 
   final jni.JObjType<$T> T;
 
@@ -1485,8 +1485,8 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $GrandParentType &&
-        other is $GrandParentType &&
+    return other.runtimeType == ($GrandParentType<$T>) &&
+        other is $GrandParentType<$T> &&
         T == other.T;
   }
 }
@@ -1495,7 +1495,7 @@
 class GrandParent_Parent<$T extends jni.JObject, $S extends jni.JObject>
     extends jni.JObject {
   @override
-  late final jni.JObjType $type = type(T, S);
+  late final jni.JObjType<GrandParent_Parent<$T, $S>> $type = type(T, S);
 
   final jni.JObjType<$T> T;
   final jni.JObjType<$S> S;
@@ -1626,8 +1626,8 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $GrandParent_ParentType &&
-        other is $GrandParent_ParentType &&
+    return other.runtimeType == ($GrandParent_ParentType<$T, $S>) &&
+        other is $GrandParent_ParentType<$T, $S> &&
         T == other.T &&
         S == other.S;
   }
@@ -1637,7 +1637,8 @@
 class GrandParent_Parent_Child<$T extends jni.JObject, $S extends jni.JObject,
     $U extends jni.JObject> extends jni.JObject {
   @override
-  late final jni.JObjType $type = type(T, S, U);
+  late final jni.JObjType<GrandParent_Parent_Child<$T, $S, $U>> $type =
+      type(T, S, U);
 
   final jni.JObjType<$T> T;
   final jni.JObjType<$S> S;
@@ -1815,8 +1816,8 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $GrandParent_Parent_ChildType &&
-        other is $GrandParent_Parent_ChildType &&
+    return other.runtimeType == ($GrandParent_Parent_ChildType<$T, $S, $U>) &&
+        other is $GrandParent_Parent_ChildType<$T, $S, $U> &&
         T == other.T &&
         S == other.S &&
         U == other.U;
@@ -1826,7 +1827,7 @@
 /// from: com.github.dart_lang.jnigen.generics.GrandParent$StaticParent
 class GrandParent_StaticParent<$S extends jni.JObject> extends jni.JObject {
   @override
-  late final jni.JObjType $type = type(S);
+  late final jni.JObjType<GrandParent_StaticParent<$S>> $type = type(S);
 
   final jni.JObjType<$S> S;
 
@@ -1916,8 +1917,8 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $GrandParent_StaticParentType &&
-        other is $GrandParent_StaticParentType &&
+    return other.runtimeType == ($GrandParent_StaticParentType<$S>) &&
+        other is $GrandParent_StaticParentType<$S> &&
         S == other.S;
   }
 }
@@ -1926,7 +1927,8 @@
 class GrandParent_StaticParent_Child<$S extends jni.JObject,
     $U extends jni.JObject> extends jni.JObject {
   @override
-  late final jni.JObjType $type = type(S, U);
+  late final jni.JObjType<GrandParent_StaticParent_Child<$S, $U>> $type =
+      type(S, U);
 
   final jni.JObjType<$S> S;
   final jni.JObjType<$U> U;
@@ -2060,8 +2062,8 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $GrandParent_StaticParent_ChildType &&
-        other is $GrandParent_StaticParent_ChildType &&
+    return other.runtimeType == ($GrandParent_StaticParent_ChildType<$S, $U>) &&
+        other is $GrandParent_StaticParent_ChildType<$S, $U> &&
         S == other.S &&
         U == other.U;
   }
@@ -2071,7 +2073,7 @@
 class MyMap<$K extends jni.JObject, $V extends jni.JObject>
     extends jni.JObject {
   @override
-  late final jni.JObjType $type = type(K, V);
+  late final jni.JObjType<MyMap<$K, $V>> $type = type(K, V);
 
   final jni.JObjType<$K> K;
   final jni.JObjType<$V> V;
@@ -2182,8 +2184,8 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $MyMapType &&
-        other is $MyMapType &&
+    return other.runtimeType == ($MyMapType<$K, $V>) &&
+        other is $MyMapType<$K, $V> &&
         K == other.K &&
         V == other.V;
   }
@@ -2193,7 +2195,7 @@
 class MyMap_MyEntry<$K extends jni.JObject, $V extends jni.JObject>
     extends jni.JObject {
   @override
-  late final jni.JObjType $type = type(K, V);
+  late final jni.JObjType<MyMap_MyEntry<$K, $V>> $type = type(K, V);
 
   final jni.JObjType<$K> K;
   final jni.JObjType<$V> V;
@@ -2322,8 +2324,8 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $MyMap_MyEntryType &&
-        other is $MyMap_MyEntryType &&
+    return other.runtimeType == ($MyMap_MyEntryType<$K, $V>) &&
+        other is $MyMap_MyEntryType<$K, $V> &&
         K == other.K &&
         V == other.V;
   }
@@ -2332,7 +2334,7 @@
 /// from: com.github.dart_lang.jnigen.generics.MyStack
 class MyStack<$T extends jni.JObject> extends jni.JObject {
   @override
-  late final jni.JObjType $type = type(T);
+  late final jni.JObjType<MyStack<$T>> $type = type(T);
 
   final jni.JObjType<$T> T;
 
@@ -2514,8 +2516,8 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $MyStackType &&
-        other is $MyStackType &&
+    return other.runtimeType == ($MyStackType<$T>) &&
+        other is $MyStackType<$T> &&
         T == other.T;
   }
 }
@@ -2523,7 +2525,7 @@
 /// from: com.github.dart_lang.jnigen.generics.StringKeyedMap
 class StringKeyedMap<$V extends jni.JObject> extends MyMap<jni.JString, $V> {
   @override
-  late final jni.JObjType $type = type(V);
+  late final jni.JObjType<StringKeyedMap<$V>> $type = type(V);
 
   final jni.JObjType<$V> V;
 
@@ -2581,8 +2583,8 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $StringKeyedMapType &&
-        other is $StringKeyedMapType &&
+    return other.runtimeType == ($StringKeyedMapType<$V>) &&
+        other is $StringKeyedMapType<$V> &&
         V == other.V;
   }
 }
@@ -2590,7 +2592,7 @@
 /// from: com.github.dart_lang.jnigen.generics.StringMap
 class StringMap extends StringKeyedMap<jni.JString> {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<StringMap> $type = type;
 
   StringMap.fromRef(
     jni.JObjectPtr ref,
@@ -2629,14 +2631,14 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $StringMapType && other is $StringMapType;
+    return other.runtimeType == ($StringMapType) && other is $StringMapType;
   }
 }
 
 /// from: com.github.dart_lang.jnigen.generics.StringStack
 class StringStack extends MyStack<jni.JString> {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<StringStack> $type = type;
 
   StringStack.fromRef(
     jni.JObjectPtr ref,
@@ -2675,14 +2677,14 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $StringStackType && other is $StringStackType;
+    return other.runtimeType == ($StringStackType) && other is $StringStackType;
   }
 }
 
 /// from: com.github.dart_lang.jnigen.generics.StringValuedMap
 class StringValuedMap<$K extends jni.JObject> extends MyMap<$K, jni.JString> {
   @override
-  late final jni.JObjType $type = type(K);
+  late final jni.JObjType<StringValuedMap<$K>> $type = type(K);
 
   final jni.JObjType<$K> K;
 
@@ -2740,8 +2742,8 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $StringValuedMapType &&
-        other is $StringValuedMapType &&
+    return other.runtimeType == ($StringValuedMapType<$K>) &&
+        other is $StringValuedMapType<$K> &&
         K == other.K;
   }
 }
@@ -2749,7 +2751,7 @@
 /// from: com.github.dart_lang.jnigen.annotations.JsonSerializable$Case
 class JsonSerializable_Case extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<JsonSerializable_Case> $type = type;
 
   JsonSerializable_Case.fromRef(
     jni.JObjectPtr ref,
@@ -2807,7 +2809,7 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $JsonSerializable_CaseType &&
+    return other.runtimeType == ($JsonSerializable_CaseType) &&
         other is $JsonSerializable_CaseType;
   }
 }
@@ -2815,7 +2817,7 @@
 /// from: com.github.dart_lang.jnigen.annotations.MyDataClass
 class MyDataClass extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<MyDataClass> $type = type;
 
   MyDataClass.fromRef(
     jni.JObjectPtr ref,
@@ -2855,6 +2857,6 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $MyDataClassType && other is $MyDataClassType;
+    return other.runtimeType == ($MyDataClassType) && other is $MyDataClassType;
   }
 }
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 d1c4bdb..24b9657 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
@@ -23,22 +23,17 @@
 import "package:jni/internal_helpers_for_jnigen.dart";
 import "package:jni/jni.dart" as jni;
 
-// Auto-generated initialization code.
-
-final jniEnv = jni.Jni.env;
-final jniAccessors = jni.Jni.accessors;
-
 /// from: com.github.dart_lang.jnigen.simple_package.Example
 class Example extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<Example> $type = type;
 
   Example.fromRef(
     jni.JObjectPtr ref,
   ) : super.fromRef(ref);
 
-  static final _classRef = jniAccessors
-      .getClassOf(r"com/github/dart_lang/jnigen/simple_package/Example");
+  static final _class =
+      jni.Jni.findJClass(r"com/github/dart_lang/jnigen/simple_package/Example");
 
   /// The type which includes information such as the signature of this class.
   static const type = $ExampleType();
@@ -58,81 +53,84 @@
   /// from: static public final java.lang.String SEMICOLON_STRING
   static const SEMICOLON_STRING = r""";""";
 
-  static final _id_getAmount =
-      jniAccessors.getStaticMethodIDOf(_classRef, r"getAmount", r"()I");
+  static final _id_getAmount = jni.Jni.accessors
+      .getStaticMethodIDOf(_class.reference, r"getAmount", r"()I");
 
   /// from: static public int getAmount()
   static int getAmount() {
-    return jniAccessors.callStaticMethodWithArgs(
-        _classRef, _id_getAmount, jni.JniCallType.intType, []).integer;
+    return jni.Jni.accessors.callStaticMethodWithArgs(
+        _class.reference, _id_getAmount, jni.JniCallType.intType, []).integer;
   }
 
   static final _id_getPi =
-      jniAccessors.getStaticMethodIDOf(_classRef, r"getPi", r"()D");
+      jni.Jni.accessors.getStaticMethodIDOf(_class.reference, r"getPi", r"()D");
 
   /// from: static public double getPi()
   static double getPi() {
-    return jniAccessors.callStaticMethodWithArgs(
-        _classRef, _id_getPi, jni.JniCallType.doubleType, []).doubleFloat;
+    return jni.Jni.accessors.callStaticMethodWithArgs(_class.reference,
+        _id_getPi, jni.JniCallType.doubleType, []).doubleFloat;
   }
 
-  static final _id_getAsterisk =
-      jniAccessors.getStaticMethodIDOf(_classRef, r"getAsterisk", r"()C");
+  static final _id_getAsterisk = jni.Jni.accessors
+      .getStaticMethodIDOf(_class.reference, r"getAsterisk", r"()C");
 
   /// from: static public char getAsterisk()
   static int getAsterisk() {
-    return jniAccessors.callStaticMethodWithArgs(
-        _classRef, _id_getAsterisk, jni.JniCallType.charType, []).char;
+    return jni.Jni.accessors.callStaticMethodWithArgs(
+        _class.reference, _id_getAsterisk, jni.JniCallType.charType, []).char;
   }
 
-  static final _id_getName = jniAccessors.getStaticMethodIDOf(
-      _classRef, r"getName", r"()Ljava/lang/String;");
+  static final _id_getName = jni.Jni.accessors.getStaticMethodIDOf(
+      _class.reference, r"getName", r"()Ljava/lang/String;");
 
   /// from: static public java.lang.String getName()
   /// The returned object must be deleted after use, by calling the `delete` method.
   static jni.JString getName() {
-    return const jni.JStringType().fromRef(jniAccessors
-        .callStaticMethodWithArgs(
-            _classRef, _id_getName, jni.JniCallType.objectType, []).object);
+    return const jni.JStringType().fromRef(jni.Jni.accessors
+        .callStaticMethodWithArgs(_class.reference, _id_getName,
+            jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_getNestedInstance = jniAccessors.getStaticMethodIDOf(
-      _classRef,
+  static final _id_getNestedInstance = jni.Jni.accessors.getStaticMethodIDOf(
+      _class.reference,
       r"getNestedInstance",
       r"()Lcom/github/dart_lang/jnigen/simple_package/Example$Nested;");
 
   /// from: static public com.github.dart_lang.jnigen.simple_package.Example.Nested getNestedInstance()
   /// The returned object must be deleted after use, by calling the `delete` method.
   static Example_Nested getNestedInstance() {
-    return const $Example_NestedType().fromRef(jniAccessors
-        .callStaticMethodWithArgs(_classRef, _id_getNestedInstance,
+    return const $Example_NestedType().fromRef(jni.Jni.accessors
+        .callStaticMethodWithArgs(_class.reference, _id_getNestedInstance,
             jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_setAmount =
-      jniAccessors.getStaticMethodIDOf(_classRef, r"setAmount", r"(I)V");
+  static final _id_setAmount = jni.Jni.accessors
+      .getStaticMethodIDOf(_class.reference, r"setAmount", r"(I)V");
 
   /// from: static public void setAmount(int newAmount)
   static void setAmount(
     int newAmount,
   ) {
-    return jniAccessors.callStaticMethodWithArgs(_classRef, _id_setAmount,
-        jni.JniCallType.voidType, [jni.JValueInt(newAmount)]).check();
+    return jni.Jni.accessors.callStaticMethodWithArgs(
+        _class.reference,
+        _id_setAmount,
+        jni.JniCallType.voidType,
+        [jni.JValueInt(newAmount)]).check();
   }
 
-  static final _id_setName = jniAccessors.getStaticMethodIDOf(
-      _classRef, r"setName", r"(Ljava/lang/String;)V");
+  static final _id_setName = jni.Jni.accessors.getStaticMethodIDOf(
+      _class.reference, r"setName", r"(Ljava/lang/String;)V");
 
   /// from: static public void setName(java.lang.String newName)
   static void setName(
     jni.JString newName,
   ) {
-    return jniAccessors.callStaticMethodWithArgs(_classRef, _id_setName,
-        jni.JniCallType.voidType, [newName.reference]).check();
+    return jni.Jni.accessors.callStaticMethodWithArgs(_class.reference,
+        _id_setName, jni.JniCallType.voidType, [newName.reference]).check();
   }
 
-  static final _id_setNestedInstance = jniAccessors.getStaticMethodIDOf(
-      _classRef,
+  static final _id_setNestedInstance = jni.Jni.accessors.getStaticMethodIDOf(
+      _class.reference,
       r"setNestedInstance",
       r"(Lcom/github/dart_lang/jnigen/simple_package/Example$Nested;)V");
 
@@ -140,15 +138,15 @@
   static void setNestedInstance(
     Example_Nested newNested,
   ) {
-    return jniAccessors.callStaticMethodWithArgs(
-        _classRef,
+    return jni.Jni.accessors.callStaticMethodWithArgs(
+        _class.reference,
         _id_setNestedInstance,
         jni.JniCallType.voidType,
         [newNested.reference]).check();
   }
 
-  static final _id_max4 =
-      jniAccessors.getStaticMethodIDOf(_classRef, r"max4", r"(IIII)I");
+  static final _id_max4 = jni.Jni.accessors
+      .getStaticMethodIDOf(_class.reference, r"max4", r"(IIII)I");
 
   /// from: static public int max4(int a, int b, int c, int d)
   static int max4(
@@ -157,8 +155,8 @@
     int c,
     int d,
   ) {
-    return jniAccessors.callStaticMethodWithArgs(
-        _classRef, _id_max4, jni.JniCallType.intType, [
+    return jni.Jni.accessors.callStaticMethodWithArgs(
+        _class.reference, _id_max4, jni.JniCallType.intType, [
       jni.JValueInt(a),
       jni.JValueInt(b),
       jni.JValueInt(c),
@@ -166,8 +164,8 @@
     ]).integer;
   }
 
-  static final _id_max8 =
-      jniAccessors.getStaticMethodIDOf(_classRef, r"max8", r"(IIIIIIII)I");
+  static final _id_max8 = jni.Jni.accessors
+      .getStaticMethodIDOf(_class.reference, 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(
@@ -180,8 +178,8 @@
     int g,
     int h,
   ) {
-    return jniAccessors.callStaticMethodWithArgs(
-        _classRef, _id_max8, jni.JniCallType.intType, [
+    return jni.Jni.accessors.callStaticMethodWithArgs(
+        _class.reference, _id_max8, jni.JniCallType.intType, [
       jni.JValueInt(a),
       jni.JValueInt(b),
       jni.JValueInt(c),
@@ -194,98 +192,98 @@
   }
 
   static final _id_getNumber =
-      jniAccessors.getMethodIDOf(_classRef, r"getNumber", r"()I");
+      jni.Jni.accessors.getMethodIDOf(_class.reference, r"getNumber", r"()I");
 
   /// from: public int getNumber()
   int getNumber() {
-    return jniAccessors.callMethodWithArgs(
+    return jni.Jni.accessors.callMethodWithArgs(
         reference, _id_getNumber, jni.JniCallType.intType, []).integer;
   }
 
   static final _id_setNumber =
-      jniAccessors.getMethodIDOf(_classRef, r"setNumber", r"(I)V");
+      jni.Jni.accessors.getMethodIDOf(_class.reference, r"setNumber", r"(I)V");
 
   /// from: public void setNumber(int number)
   void setNumber(
     int number,
   ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_setNumber,
+    return jni.Jni.accessors.callMethodWithArgs(reference, _id_setNumber,
         jni.JniCallType.voidType, [jni.JValueInt(number)]).check();
   }
 
   static final _id_getIsUp =
-      jniAccessors.getMethodIDOf(_classRef, r"getIsUp", r"()Z");
+      jni.Jni.accessors.getMethodIDOf(_class.reference, r"getIsUp", r"()Z");
 
   /// from: public boolean getIsUp()
   bool getIsUp() {
-    return jniAccessors.callMethodWithArgs(
+    return jni.Jni.accessors.callMethodWithArgs(
         reference, _id_getIsUp, jni.JniCallType.booleanType, []).boolean;
   }
 
   static final _id_setUp =
-      jniAccessors.getMethodIDOf(_classRef, r"setUp", r"(Z)V");
+      jni.Jni.accessors.getMethodIDOf(_class.reference, r"setUp", r"(Z)V");
 
   /// from: public void setUp(boolean isUp)
   void setUp(
     bool isUp,
   ) {
-    return jniAccessors.callMethodWithArgs(
+    return jni.Jni.accessors.callMethodWithArgs(
         reference, _id_setUp, jni.JniCallType.voidType, [isUp ? 1 : 0]).check();
   }
 
-  static final _id_getCodename = jniAccessors.getMethodIDOf(
-      _classRef, r"getCodename", r"()Ljava/lang/String;");
+  static final _id_getCodename = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"getCodename", r"()Ljava/lang/String;");
 
   /// from: public java.lang.String getCodename()
   /// The returned object must be deleted after use, by calling the `delete` method.
   jni.JString getCodename() {
-    return const jni.JStringType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JStringType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference, _id_getCodename, jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_setCodename = jniAccessors.getMethodIDOf(
-      _classRef, r"setCodename", r"(Ljava/lang/String;)V");
+  static final _id_setCodename = jni.Jni.accessors.getMethodIDOf(
+      _class.reference, r"setCodename", r"(Ljava/lang/String;)V");
 
   /// from: public void setCodename(java.lang.String codename)
   void setCodename(
     jni.JString codename,
   ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_setCodename,
+    return jni.Jni.accessors.callMethodWithArgs(reference, _id_setCodename,
         jni.JniCallType.voidType, [codename.reference]).check();
   }
 
-  static final _id_getRandom = jniAccessors.getMethodIDOf(
-      _classRef, r"getRandom", r"()Ljava/util/Random;");
+  static final _id_getRandom = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"getRandom", r"()Ljava/util/Random;");
 
   /// from: public java.util.Random getRandom()
   /// The returned object must be deleted after use, by calling the `delete` method.
   jni.JObject getRandom() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference, _id_getRandom, jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_setRandom = jniAccessors.getMethodIDOf(
-      _classRef, r"setRandom", r"(Ljava/util/Random;)V");
+  static final _id_setRandom = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"setRandom", r"(Ljava/util/Random;)V");
 
   /// from: public void setRandom(java.util.Random random)
   void setRandom(
     jni.JObject random,
   ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_setRandom,
+    return jni.Jni.accessors.callMethodWithArgs(reference, _id_setRandom,
         jni.JniCallType.voidType, [random.reference]).check();
   }
 
-  static final _id_getRandomLong =
-      jniAccessors.getMethodIDOf(_classRef, r"getRandomLong", r"()J");
+  static final _id_getRandomLong = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"getRandomLong", r"()J");
 
   /// from: public long getRandomLong()
   int getRandomLong() {
-    return jniAccessors.callMethodWithArgs(
+    return jni.Jni.accessors.callMethodWithArgs(
         reference, _id_getRandomLong, jni.JniCallType.longType, []).long;
   }
 
-  static final _id_add4Longs =
-      jniAccessors.getMethodIDOf(_classRef, r"add4Longs", r"(JJJJ)J");
+  static final _id_add4Longs = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"add4Longs", r"(JJJJ)J");
 
   /// from: public long add4Longs(long a, long b, long c, long d)
   int add4Longs(
@@ -294,12 +292,12 @@
     int c,
     int d,
   ) {
-    return jniAccessors.callMethodWithArgs(
+    return jni.Jni.accessors.callMethodWithArgs(
         reference, _id_add4Longs, jni.JniCallType.longType, [a, b, c, d]).long;
   }
 
-  static final _id_add8Longs =
-      jniAccessors.getMethodIDOf(_classRef, r"add8Longs", r"(JJJJJJJJ)J");
+  static final _id_add8Longs = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, 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(
@@ -312,12 +310,12 @@
     int g,
     int h,
   ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_add8Longs,
+    return jni.Jni.accessors.callMethodWithArgs(reference, _id_add8Longs,
         jni.JniCallType.longType, [a, b, c, d, e, f, g, h]).long;
   }
 
-  static final _id_getRandomNumericString = jniAccessors.getMethodIDOf(
-      _classRef,
+  static final _id_getRandomNumericString = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
       r"getRandomNumericString",
       r"(Ljava/util/Random;)Ljava/lang/String;");
 
@@ -326,7 +324,7 @@
   jni.JString getRandomNumericString(
     jni.JObject random,
   ) {
-    return const jni.JStringType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JStringType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference,
         _id_getRandomNumericString,
         jni.JniCallType.objectType,
@@ -334,29 +332,29 @@
   }
 
   static final _id_ctor =
-      jniAccessors.getMethodIDOf(_classRef, r"<init>", r"()V");
+      jni.Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"()V");
 
   /// from: public void <init>()
   /// The returned object must be deleted after use, by calling the `delete` method.
   factory Example() {
-    return Example.fromRef(
-        jniAccessors.newObjectWithArgs(_classRef, _id_ctor, []).object);
+    return Example.fromRef(jni.Jni.accessors
+        .newObjectWithArgs(_class.reference, _id_ctor, []).object);
   }
 
   static final _id_ctor1 =
-      jniAccessors.getMethodIDOf(_classRef, r"<init>", r"(I)V");
+      jni.Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"(I)V");
 
   /// from: public void <init>(int number)
   /// The returned object must be deleted after use, by calling the `delete` method.
   factory Example.ctor1(
     int number,
   ) {
-    return Example.fromRef(jniAccessors.newObjectWithArgs(
-        _classRef, _id_ctor1, [jni.JValueInt(number)]).object);
+    return Example.fromRef(jni.Jni.accessors.newObjectWithArgs(
+        _class.reference, _id_ctor1, [jni.JValueInt(number)]).object);
   }
 
   static final _id_ctor2 =
-      jniAccessors.getMethodIDOf(_classRef, r"<init>", r"(IZ)V");
+      jni.Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"(IZ)V");
 
   /// from: public void <init>(int number, boolean isUp)
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -364,12 +362,12 @@
     int number,
     bool isUp,
   ) {
-    return Example.fromRef(jniAccessors.newObjectWithArgs(
-        _classRef, _id_ctor2, [jni.JValueInt(number), isUp ? 1 : 0]).object);
+    return Example.fromRef(jni.Jni.accessors.newObjectWithArgs(_class.reference,
+        _id_ctor2, [jni.JValueInt(number), isUp ? 1 : 0]).object);
   }
 
-  static final _id_ctor3 = jniAccessors.getMethodIDOf(
-      _classRef, r"<init>", r"(IZLjava/lang/String;)V");
+  static final _id_ctor3 = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"<init>", r"(IZLjava/lang/String;)V");
 
   /// from: public void <init>(int number, boolean isUp, java.lang.String codename)
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -378,12 +376,14 @@
     bool isUp,
     jni.JString codename,
   ) {
-    return Example.fromRef(jniAccessors.newObjectWithArgs(_classRef, _id_ctor3,
+    return Example.fromRef(jni.Jni.accessors.newObjectWithArgs(
+        _class.reference,
+        _id_ctor3,
         [jni.JValueInt(number), isUp ? 1 : 0, codename.reference]).object);
   }
 
-  static final _id_ctor4 =
-      jniAccessors.getMethodIDOf(_classRef, r"<init>", r"(IIIIIIII)V");
+  static final _id_ctor4 = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, 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 deleted after use, by calling the `delete` method.
@@ -398,7 +398,7 @@
     int h,
   ) {
     return Example.fromRef(
-        jniAccessors.newObjectWithArgs(_classRef, _id_ctor4, [
+        jni.Jni.accessors.newObjectWithArgs(_class.reference, _id_ctor4, [
       jni.JValueInt(a),
       jni.JValueInt(b),
       jni.JValueInt(c),
@@ -410,66 +410,69 @@
     ]).object);
   }
 
-  static final _id_whichExample =
-      jniAccessors.getMethodIDOf(_classRef, r"whichExample", r"()I");
+  static final _id_whichExample = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"whichExample", r"()I");
 
   /// from: public int whichExample()
   int whichExample() {
-    return jniAccessors.callMethodWithArgs(
+    return jni.Jni.accessors.callMethodWithArgs(
         reference, _id_whichExample, jni.JniCallType.intType, []).integer;
   }
 
-  static final _id_addInts =
-      jniAccessors.getStaticMethodIDOf(_classRef, r"addInts", r"(II)I");
+  static final _id_addInts = jni.Jni.accessors
+      .getStaticMethodIDOf(_class.reference, r"addInts", r"(II)I");
 
   /// from: static public int addInts(int a, int b)
   static int addInts(
     int a,
     int b,
   ) {
-    return jniAccessors.callStaticMethodWithArgs(_classRef, _id_addInts,
-        jni.JniCallType.intType, [jni.JValueInt(a), jni.JValueInt(b)]).integer;
+    return jni.Jni.accessors.callStaticMethodWithArgs(
+        _class.reference,
+        _id_addInts,
+        jni.JniCallType.intType,
+        [jni.JValueInt(a), jni.JValueInt(b)]).integer;
   }
 
-  static final _id_getArr =
-      jniAccessors.getStaticMethodIDOf(_classRef, r"getArr", r"()[I");
+  static final _id_getArr = jni.Jni.accessors
+      .getStaticMethodIDOf(_class.reference, r"getArr", r"()[I");
 
   /// from: static public int[] getArr()
   /// The returned object must be deleted after use, by calling the `delete` method.
-  static jni.JArray<jni.JInt> getArr() {
-    return const jni.JArrayType(jni.JIntType()).fromRef(jniAccessors
-        .callStaticMethodWithArgs(
-            _classRef, _id_getArr, jni.JniCallType.objectType, []).object);
+  static jni.JArray<jni.jint> getArr() {
+    return const jni.JArrayType(jni.jintType()).fromRef(jni.Jni.accessors
+        .callStaticMethodWithArgs(_class.reference, _id_getArr,
+            jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_addAll =
-      jniAccessors.getStaticMethodIDOf(_classRef, r"addAll", r"([I)I");
+  static final _id_addAll = jni.Jni.accessors
+      .getStaticMethodIDOf(_class.reference, r"addAll", r"([I)I");
 
   /// from: static public int addAll(int[] arr)
   static int addAll(
-    jni.JArray<jni.JInt> arr,
+    jni.JArray<jni.jint> arr,
   ) {
-    return jniAccessors.callStaticMethodWithArgs(_classRef, _id_addAll,
-        jni.JniCallType.intType, [arr.reference]).integer;
+    return jni.Jni.accessors.callStaticMethodWithArgs(_class.reference,
+        _id_addAll, jni.JniCallType.intType, [arr.reference]).integer;
   }
 
-  static final _id_getSelf = jniAccessors.getMethodIDOf(_classRef, r"getSelf",
-      r"()Lcom/github/dart_lang/jnigen/simple_package/Example;");
+  static final _id_getSelf = jni.Jni.accessors.getMethodIDOf(_class.reference,
+      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 deleted after use, by calling the `delete` method.
   Example getSelf() {
-    return const $ExampleType().fromRef(jniAccessors.callMethodWithArgs(
+    return const $ExampleType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference, _id_getSelf, jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_throwException =
-      jniAccessors.getStaticMethodIDOf(_classRef, r"throwException", r"()V");
+  static final _id_throwException = jni.Jni.accessors
+      .getStaticMethodIDOf(_class.reference, r"throwException", r"()V");
 
   /// from: static public void throwException()
   static void throwException() {
-    return jniAccessors.callStaticMethodWithArgs(
-        _classRef, _id_throwException, jni.JniCallType.voidType, []).check();
+    return jni.Jni.accessors.callStaticMethodWithArgs(_class.reference,
+        _id_throwException, jni.JniCallType.voidType, []).check();
   }
 }
 
@@ -494,53 +497,53 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $ExampleType && other is $ExampleType;
+    return other.runtimeType == ($ExampleType) && other is $ExampleType;
   }
 }
 
 /// from: com.github.dart_lang.jnigen.simple_package.Example$Nested
 class Example_Nested extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<Example_Nested> $type = type;
 
   Example_Nested.fromRef(
     jni.JObjectPtr ref,
   ) : super.fromRef(ref);
 
-  static final _classRef = jniAccessors
-      .getClassOf(r"com/github/dart_lang/jnigen/simple_package/Example$Nested");
+  static final _class = jni.Jni.findJClass(
+      r"com/github/dart_lang/jnigen/simple_package/Example$Nested");
 
   /// The type which includes information such as the signature of this class.
   static const type = $Example_NestedType();
   static final _id_ctor =
-      jniAccessors.getMethodIDOf(_classRef, r"<init>", r"(Z)V");
+      jni.Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"(Z)V");
 
   /// from: public void <init>(boolean value)
   /// The returned object must be deleted after use, by calling the `delete` method.
   factory Example_Nested(
     bool value,
   ) {
-    return Example_Nested.fromRef(jniAccessors
-        .newObjectWithArgs(_classRef, _id_ctor, [value ? 1 : 0]).object);
+    return Example_Nested.fromRef(jni.Jni.accessors
+        .newObjectWithArgs(_class.reference, _id_ctor, [value ? 1 : 0]).object);
   }
 
   static final _id_getValue =
-      jniAccessors.getMethodIDOf(_classRef, r"getValue", r"()Z");
+      jni.Jni.accessors.getMethodIDOf(_class.reference, r"getValue", r"()Z");
 
   /// from: public boolean getValue()
   bool getValue() {
-    return jniAccessors.callMethodWithArgs(
+    return jni.Jni.accessors.callMethodWithArgs(
         reference, _id_getValue, jni.JniCallType.booleanType, []).boolean;
   }
 
   static final _id_setValue =
-      jniAccessors.getMethodIDOf(_classRef, r"setValue", r"(Z)V");
+      jni.Jni.accessors.getMethodIDOf(_class.reference, r"setValue", r"(Z)V");
 
   /// from: public void setValue(boolean value)
   void setValue(
     bool value,
   ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_setValue,
+    return jni.Jni.accessors.callMethodWithArgs(reference, _id_setValue,
         jni.JniCallType.voidType, [value ? 1 : 0]).check();
   }
 }
@@ -566,7 +569,7 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $Example_NestedType &&
+    return other.runtimeType == ($Example_NestedType) &&
         other is $Example_NestedType;
   }
 }
@@ -574,41 +577,41 @@
 /// from: com.github.dart_lang.jnigen.simple_package.Exceptions
 class Exceptions extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<Exceptions> $type = type;
 
   Exceptions.fromRef(
     jni.JObjectPtr ref,
   ) : super.fromRef(ref);
 
-  static final _classRef = jniAccessors
-      .getClassOf(r"com/github/dart_lang/jnigen/simple_package/Exceptions");
+  static final _class = jni.Jni.findJClass(
+      r"com/github/dart_lang/jnigen/simple_package/Exceptions");
 
   /// The type which includes information such as the signature of this class.
   static const type = $ExceptionsType();
   static final _id_ctor =
-      jniAccessors.getMethodIDOf(_classRef, r"<init>", r"()V");
+      jni.Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"()V");
 
   /// from: public void <init>()
   /// The returned object must be deleted after use, by calling the `delete` method.
   factory Exceptions() {
-    return Exceptions.fromRef(
-        jniAccessors.newObjectWithArgs(_classRef, _id_ctor, []).object);
+    return Exceptions.fromRef(jni.Jni.accessors
+        .newObjectWithArgs(_class.reference, _id_ctor, []).object);
   }
 
   static final _id_ctor1 =
-      jniAccessors.getMethodIDOf(_classRef, r"<init>", r"(F)V");
+      jni.Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"(F)V");
 
   /// from: public void <init>(float x)
   /// The returned object must be deleted after use, by calling the `delete` method.
   factory Exceptions.ctor1(
     double x,
   ) {
-    return Exceptions.fromRef(jniAccessors
-        .newObjectWithArgs(_classRef, _id_ctor1, [jni.JValueFloat(x)]).object);
+    return Exceptions.fromRef(jni.Jni.accessors.newObjectWithArgs(
+        _class.reference, _id_ctor1, [jni.JValueFloat(x)]).object);
   }
 
-  static final _id_ctor2 =
-      jniAccessors.getMethodIDOf(_classRef, r"<init>", r"(IIIIII)V");
+  static final _id_ctor2 = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, 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 deleted after use, by calling the `delete` method.
@@ -621,7 +624,7 @@
     int f,
   ) {
     return Exceptions.fromRef(
-        jniAccessors.newObjectWithArgs(_classRef, _id_ctor2, [
+        jni.Jni.accessors.newObjectWithArgs(_class.reference, _id_ctor2, [
       jni.JValueInt(a),
       jni.JValueInt(b),
       jni.JValueInt(c),
@@ -631,147 +634,152 @@
     ]).object);
   }
 
-  static final _id_staticObjectMethod = jniAccessors.getStaticMethodIDOf(
-      _classRef, r"staticObjectMethod", r"()Ljava/lang/Object;");
+  static final _id_staticObjectMethod = jni.Jni.accessors.getStaticMethodIDOf(
+      _class.reference, r"staticObjectMethod", r"()Ljava/lang/Object;");
 
   /// from: static public java.lang.Object staticObjectMethod()
   /// The returned object must be deleted after use, by calling the `delete` method.
   static jni.JObject staticObjectMethod() {
-    return const jni.JObjectType().fromRef(jniAccessors
-        .callStaticMethodWithArgs(_classRef, _id_staticObjectMethod,
+    return const jni.JObjectType().fromRef(jni.Jni.accessors
+        .callStaticMethodWithArgs(_class.reference, _id_staticObjectMethod,
             jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_staticIntMethod =
-      jniAccessors.getStaticMethodIDOf(_classRef, r"staticIntMethod", r"()I");
+  static final _id_staticIntMethod = jni.Jni.accessors
+      .getStaticMethodIDOf(_class.reference, r"staticIntMethod", r"()I");
 
   /// from: static public int staticIntMethod()
   static int staticIntMethod() {
-    return jniAccessors.callStaticMethodWithArgs(
-        _classRef, _id_staticIntMethod, jni.JniCallType.intType, []).integer;
+    return jni.Jni.accessors.callStaticMethodWithArgs(_class.reference,
+        _id_staticIntMethod, jni.JniCallType.intType, []).integer;
   }
 
-  static final _id_staticObjectArrayMethod = jniAccessors.getStaticMethodIDOf(
-      _classRef, r"staticObjectArrayMethod", r"()[Ljava/lang/Object;");
+  static final _id_staticObjectArrayMethod = jni.Jni.accessors
+      .getStaticMethodIDOf(_class.reference, r"staticObjectArrayMethod",
+          r"()[Ljava/lang/Object;");
 
   /// from: static public java.lang.Object[] staticObjectArrayMethod()
   /// The returned object must be deleted after use, by calling the `delete` method.
   static jni.JArray<jni.JObject> staticObjectArrayMethod() {
-    return const jni.JArrayType(jni.JObjectType()).fromRef(jniAccessors
-        .callStaticMethodWithArgs(_classRef, _id_staticObjectArrayMethod,
+    return const jni.JArrayType(jni.JObjectType()).fromRef(jni.Jni.accessors
+        .callStaticMethodWithArgs(_class.reference, _id_staticObjectArrayMethod,
             jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_staticIntArrayMethod = jniAccessors.getStaticMethodIDOf(
-      _classRef, r"staticIntArrayMethod", r"()[I");
+  static final _id_staticIntArrayMethod = jni.Jni.accessors
+      .getStaticMethodIDOf(_class.reference, r"staticIntArrayMethod", r"()[I");
 
   /// from: static public int[] staticIntArrayMethod()
   /// The returned object must be deleted after use, by calling the `delete` method.
-  static jni.JArray<jni.JInt> staticIntArrayMethod() {
-    return const jni.JArrayType(jni.JIntType()).fromRef(jniAccessors
-        .callStaticMethodWithArgs(_classRef, _id_staticIntArrayMethod,
+  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);
   }
 
-  static final _id_objectMethod = jniAccessors.getMethodIDOf(
-      _classRef, r"objectMethod", r"()Ljava/lang/Object;");
+  static final _id_objectMethod = jni.Jni.accessors.getMethodIDOf(
+      _class.reference, r"objectMethod", r"()Ljava/lang/Object;");
 
   /// from: public java.lang.Object objectMethod()
   /// The returned object must be deleted after use, by calling the `delete` method.
   jni.JObject objectMethod() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference, _id_objectMethod, jni.JniCallType.objectType, []).object);
   }
 
   static final _id_intMethod =
-      jniAccessors.getMethodIDOf(_classRef, r"intMethod", r"()I");
+      jni.Jni.accessors.getMethodIDOf(_class.reference, r"intMethod", r"()I");
 
   /// from: public int intMethod()
   int intMethod() {
-    return jniAccessors.callMethodWithArgs(
+    return jni.Jni.accessors.callMethodWithArgs(
         reference, _id_intMethod, jni.JniCallType.intType, []).integer;
   }
 
-  static final _id_objectArrayMethod = jniAccessors.getMethodIDOf(
-      _classRef, r"objectArrayMethod", r"()[Ljava/lang/Object;");
+  static final _id_objectArrayMethod = jni.Jni.accessors.getMethodIDOf(
+      _class.reference, r"objectArrayMethod", r"()[Ljava/lang/Object;");
 
   /// from: public java.lang.Object[] objectArrayMethod()
   /// The returned object must be deleted after use, by calling the `delete` method.
   jni.JArray<jni.JObject> objectArrayMethod() {
-    return const jni.JArrayType(jni.JObjectType()).fromRef(jniAccessors
+    return const jni.JArrayType(jni.JObjectType()).fromRef(jni.Jni.accessors
         .callMethodWithArgs(reference, _id_objectArrayMethod,
             jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_intArrayMethod =
-      jniAccessors.getMethodIDOf(_classRef, r"intArrayMethod", r"()[I");
+  static final _id_intArrayMethod = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"intArrayMethod", r"()[I");
 
   /// from: public int[] intArrayMethod()
   /// The returned object must be deleted after use, by calling the `delete` method.
-  jni.JArray<jni.JInt> intArrayMethod() {
-    return const jni.JArrayType(jni.JIntType()).fromRef(jniAccessors
+  jni.JArray<jni.jint> intArrayMethod() {
+    return const jni.JArrayType(jni.jintType()).fromRef(jni.Jni.accessors
         .callMethodWithArgs(reference, _id_intArrayMethod,
             jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_throwNullPointerException = jniAccessors.getMethodIDOf(
-      _classRef, r"throwNullPointerException", r"()I");
+  static final _id_throwNullPointerException = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"throwNullPointerException", r"()I");
 
   /// from: public int throwNullPointerException()
   int throwNullPointerException() {
-    return jniAccessors.callMethodWithArgs(reference,
+    return jni.Jni.accessors.callMethodWithArgs(reference,
         _id_throwNullPointerException, jni.JniCallType.intType, []).integer;
   }
 
-  static final _id_throwFileNotFoundException = jniAccessors.getMethodIDOf(
-      _classRef, r"throwFileNotFoundException", r"()Ljava/io/InputStream;");
+  static final _id_throwFileNotFoundException = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
+      r"throwFileNotFoundException",
+      r"()Ljava/io/InputStream;");
 
   /// from: public java.io.InputStream throwFileNotFoundException()
   /// The returned object must be deleted after use, by calling the `delete` method.
   jni.JObject throwFileNotFoundException() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference,
         _id_throwFileNotFoundException,
         jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_throwClassCastException = jniAccessors.getMethodIDOf(
-      _classRef, r"throwClassCastException", r"()Ljava/io/FileInputStream;");
+  static final _id_throwClassCastException = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
+      r"throwClassCastException",
+      r"()Ljava/io/FileInputStream;");
 
   /// from: public java.io.FileInputStream throwClassCastException()
   /// The returned object must be deleted after use, by calling the `delete` method.
   jni.JObject throwClassCastException() {
-    return const jni.JObjectType().fromRef(jniAccessors.callMethodWithArgs(
+    return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference,
         _id_throwClassCastException,
         jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_throwArrayIndexException = jniAccessors.getMethodIDOf(
-      _classRef, r"throwArrayIndexException", r"()I");
+  static final _id_throwArrayIndexException = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"throwArrayIndexException", r"()I");
 
   /// from: public int throwArrayIndexException()
   int throwArrayIndexException() {
-    return jniAccessors.callMethodWithArgs(reference,
+    return jni.Jni.accessors.callMethodWithArgs(reference,
         _id_throwArrayIndexException, jni.JniCallType.intType, []).integer;
   }
 
-  static final _id_throwArithmeticException = jniAccessors.getMethodIDOf(
-      _classRef, r"throwArithmeticException", r"()I");
+  static final _id_throwArithmeticException = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"throwArithmeticException", r"()I");
 
   /// from: public int throwArithmeticException()
   int throwArithmeticException() {
-    return jniAccessors.callMethodWithArgs(reference,
+    return jni.Jni.accessors.callMethodWithArgs(reference,
         _id_throwArithmeticException, jni.JniCallType.intType, []).integer;
   }
 
-  static final _id_throwLoremIpsum =
-      jniAccessors.getStaticMethodIDOf(_classRef, r"throwLoremIpsum", r"()V");
+  static final _id_throwLoremIpsum = jni.Jni.accessors
+      .getStaticMethodIDOf(_class.reference, r"throwLoremIpsum", r"()V");
 
   /// from: static public void throwLoremIpsum()
   static void throwLoremIpsum() {
-    return jniAccessors.callStaticMethodWithArgs(
-        _classRef, _id_throwLoremIpsum, jni.JniCallType.voidType, []).check();
+    return jni.Jni.accessors.callStaticMethodWithArgs(_class.reference,
+        _id_throwLoremIpsum, jni.JniCallType.voidType, []).check();
   }
 }
 
@@ -796,192 +804,193 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $ExceptionsType && other is $ExceptionsType;
+    return other.runtimeType == ($ExceptionsType) && other is $ExceptionsType;
   }
 }
 
 /// from: com.github.dart_lang.jnigen.simple_package.Fields
 class Fields extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<Fields> $type = type;
 
   Fields.fromRef(
     jni.JObjectPtr ref,
   ) : super.fromRef(ref);
 
-  static final _classRef = jniAccessors
-      .getClassOf(r"com/github/dart_lang/jnigen/simple_package/Fields");
+  static final _class =
+      jni.Jni.findJClass(r"com/github/dart_lang/jnigen/simple_package/Fields");
 
   /// The type which includes information such as the signature of this class.
   static const type = $FieldsType();
-  static final _id_amount = jniAccessors.getStaticFieldIDOf(
-    _classRef,
+  static final _id_amount = jni.Jni.accessors.getStaticFieldIDOf(
+    _class.reference,
     r"amount",
     r"I",
   );
 
   /// from: static public int amount
-  static int get amount => jniAccessors
-      .getStaticField(_classRef, _id_amount, jni.JniCallType.intType)
+  static int get amount => jni.Jni.accessors
+      .getStaticField(_class.reference, _id_amount, jni.JniCallType.intType)
       .integer;
 
   /// from: static public int amount
   static set amount(int value) =>
-      jniEnv.SetStaticIntField(_classRef, _id_amount, value);
+      jni.Jni.env.SetStaticIntField(_class.reference, _id_amount, value);
 
-  static final _id_pi = jniAccessors.getStaticFieldIDOf(
-    _classRef,
+  static final _id_pi = jni.Jni.accessors.getStaticFieldIDOf(
+    _class.reference,
     r"pi",
     r"D",
   );
 
   /// from: static public double pi
-  static double get pi => jniAccessors
-      .getStaticField(_classRef, _id_pi, jni.JniCallType.doubleType)
+  static double get pi => jni.Jni.accessors
+      .getStaticField(_class.reference, _id_pi, jni.JniCallType.doubleType)
       .doubleFloat;
 
   /// from: static public double pi
   static set pi(double value) =>
-      jniEnv.SetStaticDoubleField(_classRef, _id_pi, value);
+      jni.Jni.env.SetStaticDoubleField(_class.reference, _id_pi, value);
 
-  static final _id_asterisk = jniAccessors.getStaticFieldIDOf(
-    _classRef,
+  static final _id_asterisk = jni.Jni.accessors.getStaticFieldIDOf(
+    _class.reference,
     r"asterisk",
     r"C",
   );
 
   /// from: static public char asterisk
-  static int get asterisk => jniAccessors
-      .getStaticField(_classRef, _id_asterisk, jni.JniCallType.charType)
+  static int get asterisk => jni.Jni.accessors
+      .getStaticField(_class.reference, _id_asterisk, jni.JniCallType.charType)
       .char;
 
   /// from: static public char asterisk
   static set asterisk(int value) =>
-      jniEnv.SetStaticCharField(_classRef, _id_asterisk, value);
+      jni.Jni.env.SetStaticCharField(_class.reference, _id_asterisk, value);
 
-  static final _id_name = jniAccessors.getStaticFieldIDOf(
-    _classRef,
+  static final _id_name = jni.Jni.accessors.getStaticFieldIDOf(
+    _class.reference,
     r"name",
     r"Ljava/lang/String;",
   );
 
   /// from: static public java.lang.String name
   /// The returned object must be deleted after use, by calling the `delete` method.
-  static jni.JString get name => const jni.JStringType().fromRef(jniAccessors
-      .getStaticField(_classRef, _id_name, jni.JniCallType.objectType)
+  static jni.JString get name => const jni.JStringType().fromRef(jni
+      .Jni.accessors
+      .getStaticField(_class.reference, _id_name, jni.JniCallType.objectType)
       .object);
 
   /// from: static public java.lang.String name
   /// The returned object must be deleted after use, by calling the `delete` method.
-  static set name(jni.JString value) =>
-      jniEnv.SetStaticObjectField(_classRef, _id_name, value.reference);
+  static set name(jni.JString value) => jni.Jni.env
+      .SetStaticObjectField(_class.reference, _id_name, value.reference);
 
-  static final _id_i = jniAccessors.getFieldIDOf(
-    _classRef,
+  static final _id_i = jni.Jni.accessors.getFieldIDOf(
+    _class.reference,
     r"i",
     r"Ljava/lang/Integer;",
   );
 
   /// from: public java.lang.Integer i
   /// The returned object must be deleted after use, by calling the `delete` method.
-  jni.JObject get i => const jni.JObjectType().fromRef(jniAccessors
+  jni.JObject get i => const jni.JObjectType().fromRef(jni.Jni.accessors
       .getField(reference, _id_i, jni.JniCallType.objectType)
       .object);
 
   /// from: public java.lang.Integer i
   /// The returned object must be deleted after use, by calling the `delete` method.
   set i(jni.JObject value) =>
-      jniEnv.SetObjectField(reference, _id_i, value.reference);
+      jni.Jni.env.SetObjectField(reference, _id_i, value.reference);
 
-  static final _id_trillion = jniAccessors.getFieldIDOf(
-    _classRef,
+  static final _id_trillion = jni.Jni.accessors.getFieldIDOf(
+    _class.reference,
     r"trillion",
     r"J",
   );
 
   /// from: public long trillion
-  int get trillion => jniAccessors
+  int get trillion => jni.Jni.accessors
       .getField(reference, _id_trillion, jni.JniCallType.longType)
       .long;
 
   /// from: public long trillion
   set trillion(int value) =>
-      jniEnv.SetLongField(reference, _id_trillion, value);
+      jni.Jni.env.SetLongField(reference, _id_trillion, value);
 
-  static final _id_isAchillesDead = jniAccessors.getFieldIDOf(
-    _classRef,
+  static final _id_isAchillesDead = jni.Jni.accessors.getFieldIDOf(
+    _class.reference,
     r"isAchillesDead",
     r"Z",
   );
 
   /// from: public boolean isAchillesDead
-  bool get isAchillesDead => jniAccessors
+  bool get isAchillesDead => jni.Jni.accessors
       .getField(reference, _id_isAchillesDead, jni.JniCallType.booleanType)
       .boolean;
 
   /// from: public boolean isAchillesDead
   set isAchillesDead(bool value) =>
-      jniEnv.SetBooleanField(reference, _id_isAchillesDead, value ? 1 : 0);
+      jni.Jni.env.SetBooleanField(reference, _id_isAchillesDead, value ? 1 : 0);
 
-  static final _id_bestFighterInGreece = jniAccessors.getFieldIDOf(
-    _classRef,
+  static final _id_bestFighterInGreece = jni.Jni.accessors.getFieldIDOf(
+    _class.reference,
     r"bestFighterInGreece",
     r"Ljava/lang/String;",
   );
 
   /// from: public java.lang.String bestFighterInGreece
   /// The returned object must be deleted after use, by calling the `delete` method.
-  jni.JString get bestFighterInGreece =>
-      const jni.JStringType().fromRef(jniAccessors
-          .getField(
-              reference, _id_bestFighterInGreece, jni.JniCallType.objectType)
-          .object);
+  jni.JString get bestFighterInGreece => const jni.JStringType().fromRef(jni
+      .Jni.accessors
+      .getField(reference, _id_bestFighterInGreece, jni.JniCallType.objectType)
+      .object);
 
   /// from: public java.lang.String bestFighterInGreece
   /// The returned object must be deleted after use, by calling the `delete` method.
-  set bestFighterInGreece(jni.JString value) => jniEnv.SetObjectField(
-      reference, _id_bestFighterInGreece, value.reference);
+  set bestFighterInGreece(jni.JString value) => jni.Jni.env
+      .SetObjectField(reference, _id_bestFighterInGreece, value.reference);
 
-  static final _id_random = jniAccessors.getFieldIDOf(
-    _classRef,
+  static final _id_random = jni.Jni.accessors.getFieldIDOf(
+    _class.reference,
     r"random",
     r"Ljava/util/Random;",
   );
 
   /// from: public java.util.Random random
   /// The returned object must be deleted after use, by calling the `delete` method.
-  jni.JObject get random => const jni.JObjectType().fromRef(jniAccessors
+  jni.JObject get random => const jni.JObjectType().fromRef(jni.Jni.accessors
       .getField(reference, _id_random, jni.JniCallType.objectType)
       .object);
 
   /// from: public java.util.Random random
   /// The returned object must be deleted after use, by calling the `delete` method.
   set random(jni.JObject value) =>
-      jniEnv.SetObjectField(reference, _id_random, value.reference);
+      jni.Jni.env.SetObjectField(reference, _id_random, value.reference);
 
-  static final _id_euroSymbol = jniAccessors.getStaticFieldIDOf(
-    _classRef,
+  static final _id_euroSymbol = jni.Jni.accessors.getStaticFieldIDOf(
+    _class.reference,
     r"euroSymbol",
     r"C",
   );
 
   /// from: static public char euroSymbol
-  static int get euroSymbol => jniAccessors
-      .getStaticField(_classRef, _id_euroSymbol, jni.JniCallType.charType)
+  static int get euroSymbol => jni.Jni.accessors
+      .getStaticField(
+          _class.reference, _id_euroSymbol, jni.JniCallType.charType)
       .char;
 
   /// from: static public char euroSymbol
   static set euroSymbol(int value) =>
-      jniEnv.SetStaticCharField(_classRef, _id_euroSymbol, value);
+      jni.Jni.env.SetStaticCharField(_class.reference, _id_euroSymbol, value);
 
   static final _id_ctor =
-      jniAccessors.getMethodIDOf(_classRef, r"<init>", r"()V");
+      jni.Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"()V");
 
   /// from: public void <init>()
   /// The returned object must be deleted after use, by calling the `delete` method.
   factory Fields() {
-    return Fields.fromRef(
-        jniAccessors.newObjectWithArgs(_classRef, _id_ctor, []).object);
+    return Fields.fromRef(jni.Jni.accessors
+        .newObjectWithArgs(_class.reference, _id_ctor, []).object);
   }
 }
 
@@ -1006,40 +1015,41 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $FieldsType && other is $FieldsType;
+    return other.runtimeType == ($FieldsType) && other is $FieldsType;
   }
 }
 
 /// from: com.github.dart_lang.jnigen.simple_package.Fields$Nested
 class Fields_Nested extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<Fields_Nested> $type = type;
 
   Fields_Nested.fromRef(
     jni.JObjectPtr ref,
   ) : super.fromRef(ref);
 
-  static final _classRef = jniAccessors
-      .getClassOf(r"com/github/dart_lang/jnigen/simple_package/Fields$Nested");
+  static final _class = jni.Jni.findJClass(
+      r"com/github/dart_lang/jnigen/simple_package/Fields$Nested");
 
   /// The type which includes information such as the signature of this class.
   static const type = $Fields_NestedType();
-  static final _id_hundred = jniAccessors.getFieldIDOf(
-    _classRef,
+  static final _id_hundred = jni.Jni.accessors.getFieldIDOf(
+    _class.reference,
     r"hundred",
     r"J",
   );
 
   /// from: public long hundred
-  int get hundred => jniAccessors
+  int get hundred => jni.Jni.accessors
       .getField(reference, _id_hundred, jni.JniCallType.longType)
       .long;
 
   /// from: public long hundred
-  set hundred(int value) => jniEnv.SetLongField(reference, _id_hundred, value);
+  set hundred(int value) =>
+      jni.Jni.env.SetLongField(reference, _id_hundred, value);
 
-  static final _id_BEST_GOD = jniAccessors.getStaticFieldIDOf(
-    _classRef,
+  static final _id_BEST_GOD = jni.Jni.accessors.getStaticFieldIDOf(
+    _class.reference,
     r"BEST_GOD",
     r"Ljava/lang/String;",
   );
@@ -1047,23 +1057,24 @@
   /// from: static public java.lang.String BEST_GOD
   /// The returned object must be deleted after use, by calling the `delete` method.
   static jni.JString get BEST_GOD =>
-      const jni.JStringType().fromRef(jniAccessors
-          .getStaticField(_classRef, _id_BEST_GOD, jni.JniCallType.objectType)
+      const jni.JStringType().fromRef(jni.Jni.accessors
+          .getStaticField(
+              _class.reference, _id_BEST_GOD, jni.JniCallType.objectType)
           .object);
 
   /// from: static public java.lang.String BEST_GOD
   /// The returned object must be deleted after use, by calling the `delete` method.
-  static set BEST_GOD(jni.JString value) =>
-      jniEnv.SetStaticObjectField(_classRef, _id_BEST_GOD, value.reference);
+  static set BEST_GOD(jni.JString value) => jni.Jni.env
+      .SetStaticObjectField(_class.reference, _id_BEST_GOD, value.reference);
 
   static final _id_ctor =
-      jniAccessors.getMethodIDOf(_classRef, r"<init>", r"()V");
+      jni.Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"()V");
 
   /// from: public void <init>()
   /// The returned object must be deleted after use, by calling the `delete` method.
   factory Fields_Nested() {
-    return Fields_Nested.fromRef(
-        jniAccessors.newObjectWithArgs(_classRef, _id_ctor, []).object);
+    return Fields_Nested.fromRef(jni.Jni.accessors
+        .newObjectWithArgs(_class.reference, _id_ctor, []).object);
   }
 }
 
@@ -1088,7 +1099,7 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $Fields_NestedType &&
+    return other.runtimeType == ($Fields_NestedType) &&
         other is $Fields_NestedType;
   }
 }
@@ -1096,40 +1107,40 @@
 /// from: com.github.dart_lang.jnigen.pkg2.C2
 class C2 extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<C2> $type = type;
 
   C2.fromRef(
     jni.JObjectPtr ref,
   ) : super.fromRef(ref);
 
-  static final _classRef =
-      jniAccessors.getClassOf(r"com/github/dart_lang/jnigen/pkg2/C2");
+  static final _class =
+      jni.Jni.findJClass(r"com/github/dart_lang/jnigen/pkg2/C2");
 
   /// The type which includes information such as the signature of this class.
   static const type = $C2Type();
-  static final _id_CONSTANT = jniAccessors.getStaticFieldIDOf(
-    _classRef,
+  static final _id_CONSTANT = jni.Jni.accessors.getStaticFieldIDOf(
+    _class.reference,
     r"CONSTANT",
     r"I",
   );
 
   /// from: static public int CONSTANT
-  static int get CONSTANT => jniAccessors
-      .getStaticField(_classRef, _id_CONSTANT, jni.JniCallType.intType)
+  static int get CONSTANT => jni.Jni.accessors
+      .getStaticField(_class.reference, _id_CONSTANT, jni.JniCallType.intType)
       .integer;
 
   /// from: static public int CONSTANT
   static set CONSTANT(int value) =>
-      jniEnv.SetStaticIntField(_classRef, _id_CONSTANT, value);
+      jni.Jni.env.SetStaticIntField(_class.reference, _id_CONSTANT, value);
 
   static final _id_ctor =
-      jniAccessors.getMethodIDOf(_classRef, r"<init>", r"()V");
+      jni.Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"()V");
 
   /// from: public void <init>()
   /// The returned object must be deleted after use, by calling the `delete` method.
   factory C2() {
-    return C2.fromRef(
-        jniAccessors.newObjectWithArgs(_classRef, _id_ctor, []).object);
+    return C2.fromRef(jni.Jni.accessors
+        .newObjectWithArgs(_class.reference, _id_ctor, []).object);
   }
 }
 
@@ -1153,40 +1164,40 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $C2Type && other is $C2Type;
+    return other.runtimeType == ($C2Type) && other is $C2Type;
   }
 }
 
 /// from: com.github.dart_lang.jnigen.pkg2.Example
 class Example1 extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<Example1> $type = type;
 
   Example1.fromRef(
     jni.JObjectPtr ref,
   ) : super.fromRef(ref);
 
-  static final _classRef =
-      jniAccessors.getClassOf(r"com/github/dart_lang/jnigen/pkg2/Example");
+  static final _class =
+      jni.Jni.findJClass(r"com/github/dart_lang/jnigen/pkg2/Example");
 
   /// The type which includes information such as the signature of this class.
   static const type = $Example1Type();
   static final _id_ctor =
-      jniAccessors.getMethodIDOf(_classRef, r"<init>", r"()V");
+      jni.Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"()V");
 
   /// from: public void <init>()
   /// The returned object must be deleted after use, by calling the `delete` method.
   factory Example1() {
-    return Example1.fromRef(
-        jniAccessors.newObjectWithArgs(_classRef, _id_ctor, []).object);
+    return Example1.fromRef(jni.Jni.accessors
+        .newObjectWithArgs(_class.reference, _id_ctor, []).object);
   }
 
-  static final _id_whichExample =
-      jniAccessors.getMethodIDOf(_classRef, r"whichExample", r"()I");
+  static final _id_whichExample = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"whichExample", r"()I");
 
   /// from: public int whichExample()
   int whichExample() {
-    return jniAccessors.callMethodWithArgs(
+    return jni.Jni.accessors.callMethodWithArgs(
         reference, _id_whichExample, jni.JniCallType.intType, []).integer;
   }
 }
@@ -1211,14 +1222,14 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $Example1Type && other is $Example1Type;
+    return other.runtimeType == ($Example1Type) && other is $Example1Type;
   }
 }
 
 /// from: com.github.dart_lang.jnigen.generics.GrandParent
 class GrandParent<$T extends jni.JObject> extends jni.JObject {
   @override
-  late final jni.JObjType $type = type(T);
+  late final jni.JObjType<GrandParent<$T>> $type = type(T);
 
   final jni.JObjType<$T> T;
 
@@ -1227,8 +1238,8 @@
     jni.JObjectPtr ref,
   ) : super.fromRef(ref);
 
-  static final _classRef = jniAccessors
-      .getClassOf(r"com/github/dart_lang/jnigen/generics/GrandParent");
+  static final _class =
+      jni.Jni.findJClass(r"com/github/dart_lang/jnigen/generics/GrandParent");
 
   /// The type which includes information such as the signature of this class.
   static $GrandParentType<$T> type<$T extends jni.JObject>(
@@ -1239,25 +1250,25 @@
     );
   }
 
-  static final _id_value = jniAccessors.getFieldIDOf(
-    _classRef,
+  static final _id_value = jni.Jni.accessors.getFieldIDOf(
+    _class.reference,
     r"value",
     r"Ljava/lang/Object;",
   );
 
   /// from: public T value
   /// The returned object must be deleted after use, by calling the `delete` method.
-  $T get value => T.fromRef(jniAccessors
+  $T get value => T.fromRef(jni.Jni.accessors
       .getField(reference, _id_value, jni.JniCallType.objectType)
       .object);
 
   /// from: public T value
   /// The returned object must be deleted after use, by calling the `delete` method.
   set value($T value) =>
-      jniEnv.SetObjectField(reference, _id_value, value.reference);
+      jni.Jni.env.SetObjectField(reference, _id_value, value.reference);
 
-  static final _id_ctor = jniAccessors.getMethodIDOf(
-      _classRef, r"<init>", r"(Ljava/lang/Object;)V");
+  static final _id_ctor = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"<init>", r"(Ljava/lang/Object;)V");
 
   /// from: public void <init>(T value)
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -1270,12 +1281,12 @@
     ]) as jni.JObjType<$T>;
     return GrandParent.fromRef(
         T,
-        jniAccessors
-            .newObjectWithArgs(_classRef, _id_ctor, [value.reference]).object);
+        jni.Jni.accessors.newObjectWithArgs(
+            _class.reference, _id_ctor, [value.reference]).object);
   }
 
-  static final _id_stringParent = jniAccessors.getMethodIDOf(
-      _classRef,
+  static final _id_stringParent = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
       r"stringParent",
       r"()Lcom/github/dart_lang/jnigen/generics/GrandParent$Parent;");
 
@@ -1283,12 +1294,12 @@
   /// The returned object must be deleted after use, by calling the `delete` method.
   GrandParent_Parent<jni.JObject, jni.JString> stringParent() {
     return const $GrandParent_ParentType(jni.JObjectType(), jni.JStringType())
-        .fromRef(jniAccessors.callMethodWithArgs(reference, _id_stringParent,
-            jni.JniCallType.objectType, []).object);
+        .fromRef(jni.Jni.accessors.callMethodWithArgs(reference,
+            _id_stringParent, jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_varParent = jniAccessors.getMethodIDOf(
-      _classRef,
+  static final _id_varParent = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
       r"varParent",
       r"(Ljava/lang/Object;)Lcom/github/dart_lang/jnigen/generics/GrandParent$Parent;");
 
@@ -1302,12 +1313,12 @@
       nestedValue.$type,
     ]) as jni.JObjType<$S>;
     return $GrandParent_ParentType(const jni.JObjectType(), S).fromRef(
-        jniAccessors.callMethodWithArgs(reference, _id_varParent,
+        jni.Jni.accessors.callMethodWithArgs(reference, _id_varParent,
             jni.JniCallType.objectType, [nestedValue.reference]).object);
   }
 
-  static final _id_stringStaticParent = jniAccessors.getStaticMethodIDOf(
-      _classRef,
+  static final _id_stringStaticParent = jni.Jni.accessors.getStaticMethodIDOf(
+      _class.reference,
       r"stringStaticParent",
       r"()Lcom/github/dart_lang/jnigen/generics/GrandParent$StaticParent;");
 
@@ -1315,12 +1326,12 @@
   /// The returned object must be deleted after use, by calling the `delete` method.
   static GrandParent_StaticParent<jni.JString> stringStaticParent() {
     return const $GrandParent_StaticParentType(jni.JStringType()).fromRef(
-        jniAccessors.callStaticMethodWithArgs(_classRef, _id_stringStaticParent,
-            jni.JniCallType.objectType, []).object);
+        jni.Jni.accessors.callStaticMethodWithArgs(_class.reference,
+            _id_stringStaticParent, jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_varStaticParent = jniAccessors.getStaticMethodIDOf(
-      _classRef,
+  static final _id_varStaticParent = jni.Jni.accessors.getStaticMethodIDOf(
+      _class.reference,
       r"varStaticParent",
       r"(Ljava/lang/Object;)Lcom/github/dart_lang/jnigen/generics/GrandParent$StaticParent;");
 
@@ -1333,20 +1344,20 @@
     S ??= jni.lowestCommonSuperType([
       value.$type,
     ]) as jni.JObjType<$S>;
-    return $GrandParent_StaticParentType(S).fromRef(jniAccessors
-        .callStaticMethodWithArgs(_classRef, _id_varStaticParent,
+    return $GrandParent_StaticParentType(S).fromRef(jni.Jni.accessors
+        .callStaticMethodWithArgs(_class.reference, _id_varStaticParent,
             jni.JniCallType.objectType, [value.reference]).object);
   }
 
-  static final _id_staticParentWithSameType = jniAccessors.getMethodIDOf(
-      _classRef,
+  static final _id_staticParentWithSameType = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
       r"staticParentWithSameType",
       r"()Lcom/github/dart_lang/jnigen/generics/GrandParent$StaticParent;");
 
   /// from: public com.github.dart_lang.jnigen.generics.GrandParent.StaticParent<T> staticParentWithSameType()
   /// The returned object must be deleted after use, by calling the `delete` method.
   GrandParent_StaticParent<$T> staticParentWithSameType() {
-    return $GrandParent_StaticParentType(T).fromRef(jniAccessors
+    return $GrandParent_StaticParentType(T).fromRef(jni.Jni.accessors
         .callMethodWithArgs(reference, _id_staticParentWithSameType,
             jni.JniCallType.objectType, []).object);
   }
@@ -1377,8 +1388,8 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $GrandParentType &&
-        other is $GrandParentType &&
+    return other.runtimeType == ($GrandParentType<$T>) &&
+        other is $GrandParentType<$T> &&
         T == other.T;
   }
 }
@@ -1387,7 +1398,7 @@
 class GrandParent_Parent<$T extends jni.JObject, $S extends jni.JObject>
     extends jni.JObject {
   @override
-  late final jni.JObjType $type = type(T, S);
+  late final jni.JObjType<GrandParent_Parent<$T, $S>> $type = type(T, S);
 
   final jni.JObjType<$T> T;
   final jni.JObjType<$S> S;
@@ -1398,8 +1409,8 @@
     jni.JObjectPtr ref,
   ) : super.fromRef(ref);
 
-  static final _classRef = jniAccessors
-      .getClassOf(r"com/github/dart_lang/jnigen/generics/GrandParent$Parent");
+  static final _class = jni.Jni.findJClass(
+      r"com/github/dart_lang/jnigen/generics/GrandParent$Parent");
 
   /// The type which includes information such as the signature of this class.
   static $GrandParent_ParentType<$T, $S>
@@ -1413,42 +1424,42 @@
     );
   }
 
-  static final _id_parentValue = jniAccessors.getFieldIDOf(
-    _classRef,
+  static final _id_parentValue = jni.Jni.accessors.getFieldIDOf(
+    _class.reference,
     r"parentValue",
     r"Ljava/lang/Object;",
   );
 
   /// from: public T parentValue
   /// The returned object must be deleted after use, by calling the `delete` method.
-  $T get parentValue => T.fromRef(jniAccessors
+  $T get parentValue => T.fromRef(jni.Jni.accessors
       .getField(reference, _id_parentValue, jni.JniCallType.objectType)
       .object);
 
   /// from: public T parentValue
   /// The returned object must be deleted after use, by calling the `delete` method.
   set parentValue($T value) =>
-      jniEnv.SetObjectField(reference, _id_parentValue, value.reference);
+      jni.Jni.env.SetObjectField(reference, _id_parentValue, value.reference);
 
-  static final _id_value = jniAccessors.getFieldIDOf(
-    _classRef,
+  static final _id_value = jni.Jni.accessors.getFieldIDOf(
+    _class.reference,
     r"value",
     r"Ljava/lang/Object;",
   );
 
   /// from: public S value
   /// The returned object must be deleted after use, by calling the `delete` method.
-  $S get value => S.fromRef(jniAccessors
+  $S get value => S.fromRef(jni.Jni.accessors
       .getField(reference, _id_value, jni.JniCallType.objectType)
       .object);
 
   /// from: public S value
   /// The returned object must be deleted after use, by calling the `delete` method.
   set value($S value) =>
-      jniEnv.SetObjectField(reference, _id_value, value.reference);
+      jni.Jni.env.SetObjectField(reference, _id_value, value.reference);
 
-  static final _id_ctor = jniAccessors.getMethodIDOf(
-      _classRef, r"<init>", r"(Ljava/lang/Object;Ljava/lang/Object;)V");
+  static final _id_ctor = jni.Jni.accessors.getMethodIDOf(
+      _class.reference, r"<init>", r"(Ljava/lang/Object;Ljava/lang/Object;)V");
 
   /// from: public void <init>(T parentValue, S value)
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -1467,7 +1478,7 @@
     return GrandParent_Parent.fromRef(
         T,
         S,
-        jniAccessors.newObjectWithArgs(_classRef, _id_ctor,
+        jni.Jni.accessors.newObjectWithArgs(_class.reference, _id_ctor,
             [parentValue.reference, value.reference]).object);
   }
 }
@@ -1501,8 +1512,8 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $GrandParent_ParentType &&
-        other is $GrandParent_ParentType &&
+    return other.runtimeType == ($GrandParent_ParentType<$T, $S>) &&
+        other is $GrandParent_ParentType<$T, $S> &&
         T == other.T &&
         S == other.S;
   }
@@ -1512,7 +1523,8 @@
 class GrandParent_Parent_Child<$T extends jni.JObject, $S extends jni.JObject,
     $U extends jni.JObject> extends jni.JObject {
   @override
-  late final jni.JObjType $type = type(T, S, U);
+  late final jni.JObjType<GrandParent_Parent_Child<$T, $S, $U>> $type =
+      type(T, S, U);
 
   final jni.JObjType<$T> T;
   final jni.JObjType<$S> S;
@@ -1525,7 +1537,7 @@
     jni.JObjectPtr ref,
   ) : super.fromRef(ref);
 
-  static final _classRef = jniAccessors.getClassOf(
+  static final _class = jni.Jni.findJClass(
       r"com/github/dart_lang/jnigen/generics/GrandParent$Parent$Child");
 
   /// The type which includes information such as the signature of this class.
@@ -1542,59 +1554,59 @@
     );
   }
 
-  static final _id_grandParentValue = jniAccessors.getFieldIDOf(
-    _classRef,
+  static final _id_grandParentValue = jni.Jni.accessors.getFieldIDOf(
+    _class.reference,
     r"grandParentValue",
     r"Ljava/lang/Object;",
   );
 
   /// from: public T grandParentValue
   /// The returned object must be deleted after use, by calling the `delete` method.
-  $T get grandParentValue => T.fromRef(jniAccessors
+  $T get grandParentValue => T.fromRef(jni.Jni.accessors
       .getField(reference, _id_grandParentValue, jni.JniCallType.objectType)
       .object);
 
   /// from: public T grandParentValue
   /// The returned object must be deleted after use, by calling the `delete` method.
-  set grandParentValue($T value) =>
-      jniEnv.SetObjectField(reference, _id_grandParentValue, value.reference);
+  set grandParentValue($T value) => jni.Jni.env
+      .SetObjectField(reference, _id_grandParentValue, value.reference);
 
-  static final _id_parentValue = jniAccessors.getFieldIDOf(
-    _classRef,
+  static final _id_parentValue = jni.Jni.accessors.getFieldIDOf(
+    _class.reference,
     r"parentValue",
     r"Ljava/lang/Object;",
   );
 
   /// from: public S parentValue
   /// The returned object must be deleted after use, by calling the `delete` method.
-  $S get parentValue => S.fromRef(jniAccessors
+  $S get parentValue => S.fromRef(jni.Jni.accessors
       .getField(reference, _id_parentValue, jni.JniCallType.objectType)
       .object);
 
   /// from: public S parentValue
   /// The returned object must be deleted after use, by calling the `delete` method.
   set parentValue($S value) =>
-      jniEnv.SetObjectField(reference, _id_parentValue, value.reference);
+      jni.Jni.env.SetObjectField(reference, _id_parentValue, value.reference);
 
-  static final _id_value = jniAccessors.getFieldIDOf(
-    _classRef,
+  static final _id_value = jni.Jni.accessors.getFieldIDOf(
+    _class.reference,
     r"value",
     r"Ljava/lang/Object;",
   );
 
   /// from: public U value
   /// The returned object must be deleted after use, by calling the `delete` method.
-  $U get value => U.fromRef(jniAccessors
+  $U get value => U.fromRef(jni.Jni.accessors
       .getField(reference, _id_value, jni.JniCallType.objectType)
       .object);
 
   /// from: public U value
   /// The returned object must be deleted after use, by calling the `delete` method.
   set value($U value) =>
-      jniEnv.SetObjectField(reference, _id_value, value.reference);
+      jni.Jni.env.SetObjectField(reference, _id_value, value.reference);
 
-  static final _id_ctor = jniAccessors.getMethodIDOf(_classRef, r"<init>",
-      r"(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V");
+  static final _id_ctor = jni.Jni.accessors.getMethodIDOf(_class.reference,
+      r"<init>", r"(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V");
 
   /// from: public void <init>(T grandParentValue, S parentValue, U value)
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -1619,7 +1631,7 @@
         T,
         S,
         U,
-        jniAccessors.newObjectWithArgs(_classRef, _id_ctor, [
+        jni.Jni.accessors.newObjectWithArgs(_class.reference, _id_ctor, [
           grandParentValue.reference,
           parentValue.reference,
           value.reference
@@ -1659,8 +1671,8 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $GrandParent_Parent_ChildType &&
-        other is $GrandParent_Parent_ChildType &&
+    return other.runtimeType == ($GrandParent_Parent_ChildType<$T, $S, $U>) &&
+        other is $GrandParent_Parent_ChildType<$T, $S, $U> &&
         T == other.T &&
         S == other.S &&
         U == other.U;
@@ -1670,7 +1682,7 @@
 /// from: com.github.dart_lang.jnigen.generics.GrandParent$StaticParent
 class GrandParent_StaticParent<$S extends jni.JObject> extends jni.JObject {
   @override
-  late final jni.JObjType $type = type(S);
+  late final jni.JObjType<GrandParent_StaticParent<$S>> $type = type(S);
 
   final jni.JObjType<$S> S;
 
@@ -1679,7 +1691,7 @@
     jni.JObjectPtr ref,
   ) : super.fromRef(ref);
 
-  static final _classRef = jniAccessors.getClassOf(
+  static final _class = jni.Jni.findJClass(
       r"com/github/dart_lang/jnigen/generics/GrandParent$StaticParent");
 
   /// The type which includes information such as the signature of this class.
@@ -1691,25 +1703,25 @@
     );
   }
 
-  static final _id_value = jniAccessors.getFieldIDOf(
-    _classRef,
+  static final _id_value = jni.Jni.accessors.getFieldIDOf(
+    _class.reference,
     r"value",
     r"Ljava/lang/Object;",
   );
 
   /// from: public S value
   /// The returned object must be deleted after use, by calling the `delete` method.
-  $S get value => S.fromRef(jniAccessors
+  $S get value => S.fromRef(jni.Jni.accessors
       .getField(reference, _id_value, jni.JniCallType.objectType)
       .object);
 
   /// from: public S value
   /// The returned object must be deleted after use, by calling the `delete` method.
   set value($S value) =>
-      jniEnv.SetObjectField(reference, _id_value, value.reference);
+      jni.Jni.env.SetObjectField(reference, _id_value, value.reference);
 
-  static final _id_ctor = jniAccessors.getMethodIDOf(
-      _classRef, r"<init>", r"(Ljava/lang/Object;)V");
+  static final _id_ctor = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"<init>", r"(Ljava/lang/Object;)V");
 
   /// from: public void <init>(S value)
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -1722,8 +1734,8 @@
     ]) as jni.JObjType<$S>;
     return GrandParent_StaticParent.fromRef(
         S,
-        jniAccessors
-            .newObjectWithArgs(_classRef, _id_ctor, [value.reference]).object);
+        jni.Jni.accessors.newObjectWithArgs(
+            _class.reference, _id_ctor, [value.reference]).object);
   }
 }
 
@@ -1754,8 +1766,8 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $GrandParent_StaticParentType &&
-        other is $GrandParent_StaticParentType &&
+    return other.runtimeType == ($GrandParent_StaticParentType<$S>) &&
+        other is $GrandParent_StaticParentType<$S> &&
         S == other.S;
   }
 }
@@ -1764,7 +1776,8 @@
 class GrandParent_StaticParent_Child<$S extends jni.JObject,
     $U extends jni.JObject> extends jni.JObject {
   @override
-  late final jni.JObjType $type = type(S, U);
+  late final jni.JObjType<GrandParent_StaticParent_Child<$S, $U>> $type =
+      type(S, U);
 
   final jni.JObjType<$S> S;
   final jni.JObjType<$U> U;
@@ -1775,7 +1788,7 @@
     jni.JObjectPtr ref,
   ) : super.fromRef(ref);
 
-  static final _classRef = jniAccessors.getClassOf(
+  static final _class = jni.Jni.findJClass(
       r"com/github/dart_lang/jnigen/generics/GrandParent$StaticParent$Child");
 
   /// The type which includes information such as the signature of this class.
@@ -1790,42 +1803,42 @@
     );
   }
 
-  static final _id_parentValue = jniAccessors.getFieldIDOf(
-    _classRef,
+  static final _id_parentValue = jni.Jni.accessors.getFieldIDOf(
+    _class.reference,
     r"parentValue",
     r"Ljava/lang/Object;",
   );
 
   /// from: public S parentValue
   /// The returned object must be deleted after use, by calling the `delete` method.
-  $S get parentValue => S.fromRef(jniAccessors
+  $S get parentValue => S.fromRef(jni.Jni.accessors
       .getField(reference, _id_parentValue, jni.JniCallType.objectType)
       .object);
 
   /// from: public S parentValue
   /// The returned object must be deleted after use, by calling the `delete` method.
   set parentValue($S value) =>
-      jniEnv.SetObjectField(reference, _id_parentValue, value.reference);
+      jni.Jni.env.SetObjectField(reference, _id_parentValue, value.reference);
 
-  static final _id_value = jniAccessors.getFieldIDOf(
-    _classRef,
+  static final _id_value = jni.Jni.accessors.getFieldIDOf(
+    _class.reference,
     r"value",
     r"Ljava/lang/Object;",
   );
 
   /// from: public U value
   /// The returned object must be deleted after use, by calling the `delete` method.
-  $U get value => U.fromRef(jniAccessors
+  $U get value => U.fromRef(jni.Jni.accessors
       .getField(reference, _id_value, jni.JniCallType.objectType)
       .object);
 
   /// from: public U value
   /// The returned object must be deleted after use, by calling the `delete` method.
   set value($U value) =>
-      jniEnv.SetObjectField(reference, _id_value, value.reference);
+      jni.Jni.env.SetObjectField(reference, _id_value, value.reference);
 
-  static final _id_ctor = jniAccessors.getMethodIDOf(
-      _classRef, r"<init>", r"(Ljava/lang/Object;Ljava/lang/Object;)V");
+  static final _id_ctor = jni.Jni.accessors.getMethodIDOf(
+      _class.reference, r"<init>", r"(Ljava/lang/Object;Ljava/lang/Object;)V");
 
   /// from: public void <init>(S parentValue, U value)
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -1844,7 +1857,7 @@
     return GrandParent_StaticParent_Child.fromRef(
         S,
         U,
-        jniAccessors.newObjectWithArgs(_classRef, _id_ctor,
+        jni.Jni.accessors.newObjectWithArgs(_class.reference, _id_ctor,
             [parentValue.reference, value.reference]).object);
   }
 }
@@ -1879,8 +1892,8 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $GrandParent_StaticParent_ChildType &&
-        other is $GrandParent_StaticParent_ChildType &&
+    return other.runtimeType == ($GrandParent_StaticParent_ChildType<$S, $U>) &&
+        other is $GrandParent_StaticParent_ChildType<$S, $U> &&
         S == other.S &&
         U == other.U;
   }
@@ -1890,7 +1903,7 @@
 class MyMap<$K extends jni.JObject, $V extends jni.JObject>
     extends jni.JObject {
   @override
-  late final jni.JObjType $type = type(K, V);
+  late final jni.JObjType<MyMap<$K, $V>> $type = type(K, V);
 
   final jni.JObjType<$K> K;
   final jni.JObjType<$V> V;
@@ -1901,8 +1914,8 @@
     jni.JObjectPtr ref,
   ) : super.fromRef(ref);
 
-  static final _classRef =
-      jniAccessors.getClassOf(r"com/github/dart_lang/jnigen/generics/MyMap");
+  static final _class =
+      jni.Jni.findJClass(r"com/github/dart_lang/jnigen/generics/MyMap");
 
   /// The type which includes information such as the signature of this class.
   static $MyMapType<$K, $V>
@@ -1917,7 +1930,7 @@
   }
 
   static final _id_ctor =
-      jniAccessors.getMethodIDOf(_classRef, r"<init>", r"()V");
+      jni.Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"()V");
 
   /// from: public void <init>()
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -1926,23 +1939,26 @@
     required jni.JObjType<$V> V,
   }) {
     return MyMap.fromRef(
-        K, V, jniAccessors.newObjectWithArgs(_classRef, _id_ctor, []).object);
+        K,
+        V,
+        jni.Jni.accessors
+            .newObjectWithArgs(_class.reference, _id_ctor, []).object);
   }
 
-  static final _id_get0 = jniAccessors.getMethodIDOf(
-      _classRef, r"get", r"(Ljava/lang/Object;)Ljava/lang/Object;");
+  static final _id_get0 = jni.Jni.accessors.getMethodIDOf(
+      _class.reference, r"get", r"(Ljava/lang/Object;)Ljava/lang/Object;");
 
   /// from: public V get(K key)
   /// The returned object must be deleted after use, by calling the `delete` method.
   $V get0(
     $K key,
   ) {
-    return V.fromRef(jniAccessors.callMethodWithArgs(reference, _id_get0,
+    return V.fromRef(jni.Jni.accessors.callMethodWithArgs(reference, _id_get0,
         jni.JniCallType.objectType, [key.reference]).object);
   }
 
-  static final _id_put = jniAccessors.getMethodIDOf(_classRef, r"put",
-      r"(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
+  static final _id_put = jni.Jni.accessors.getMethodIDOf(_class.reference,
+      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 deleted after use, by calling the `delete` method.
@@ -1950,19 +1966,21 @@
     $K key,
     $V value,
   ) {
-    return V.fromRef(jniAccessors.callMethodWithArgs(reference, _id_put,
+    return V.fromRef(jni.Jni.accessors.callMethodWithArgs(reference, _id_put,
         jni.JniCallType.objectType, [key.reference, value.reference]).object);
   }
 
-  static final _id_entryStack = jniAccessors.getMethodIDOf(_classRef,
-      r"entryStack", r"()Lcom/github/dart_lang/jnigen/generics/MyStack;");
+  static final _id_entryStack = jni.Jni.accessors.getMethodIDOf(
+      _class.reference,
+      r"entryStack",
+      r"()Lcom/github/dart_lang/jnigen/generics/MyStack;");
 
   /// from: public com.github.dart_lang.jnigen.generics.MyStack<com.github.dart_lang.jnigen.generics.MyMap<K,V>.MyEntry> entryStack()
   /// The returned object must be deleted after use, by calling the `delete` method.
   MyStack<MyMap_MyEntry<jni.JObject, jni.JObject>> entryStack() {
     return const $MyStackType(
             $MyMap_MyEntryType(jni.JObjectType(), jni.JObjectType()))
-        .fromRef(jniAccessors.callMethodWithArgs(
+        .fromRef(jni.Jni.accessors.callMethodWithArgs(
             reference, _id_entryStack, jni.JniCallType.objectType, []).object);
   }
 }
@@ -1994,8 +2012,8 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $MyMapType &&
-        other is $MyMapType &&
+    return other.runtimeType == ($MyMapType<$K, $V>) &&
+        other is $MyMapType<$K, $V> &&
         K == other.K &&
         V == other.V;
   }
@@ -2005,7 +2023,7 @@
 class MyMap_MyEntry<$K extends jni.JObject, $V extends jni.JObject>
     extends jni.JObject {
   @override
-  late final jni.JObjType $type = type(K, V);
+  late final jni.JObjType<MyMap_MyEntry<$K, $V>> $type = type(K, V);
 
   final jni.JObjType<$K> K;
   final jni.JObjType<$V> V;
@@ -2016,8 +2034,8 @@
     jni.JObjectPtr ref,
   ) : super.fromRef(ref);
 
-  static final _classRef = jniAccessors
-      .getClassOf(r"com/github/dart_lang/jnigen/generics/MyMap$MyEntry");
+  static final _class =
+      jni.Jni.findJClass(r"com/github/dart_lang/jnigen/generics/MyMap$MyEntry");
 
   /// The type which includes information such as the signature of this class.
   static $MyMap_MyEntryType<$K, $V>
@@ -2031,42 +2049,42 @@
     );
   }
 
-  static final _id_key = jniAccessors.getFieldIDOf(
-    _classRef,
+  static final _id_key = jni.Jni.accessors.getFieldIDOf(
+    _class.reference,
     r"key",
     r"Ljava/lang/Object;",
   );
 
   /// from: public K key
   /// The returned object must be deleted after use, by calling the `delete` method.
-  $K get key => K.fromRef(jniAccessors
+  $K get key => K.fromRef(jni.Jni.accessors
       .getField(reference, _id_key, jni.JniCallType.objectType)
       .object);
 
   /// from: public K key
   /// The returned object must be deleted after use, by calling the `delete` method.
   set key($K value) =>
-      jniEnv.SetObjectField(reference, _id_key, value.reference);
+      jni.Jni.env.SetObjectField(reference, _id_key, value.reference);
 
-  static final _id_value = jniAccessors.getFieldIDOf(
-    _classRef,
+  static final _id_value = jni.Jni.accessors.getFieldIDOf(
+    _class.reference,
     r"value",
     r"Ljava/lang/Object;",
   );
 
   /// from: public V value
   /// The returned object must be deleted after use, by calling the `delete` method.
-  $V get value => V.fromRef(jniAccessors
+  $V get value => V.fromRef(jni.Jni.accessors
       .getField(reference, _id_value, jni.JniCallType.objectType)
       .object);
 
   /// from: public V value
   /// The returned object must be deleted after use, by calling the `delete` method.
   set value($V value) =>
-      jniEnv.SetObjectField(reference, _id_value, value.reference);
+      jni.Jni.env.SetObjectField(reference, _id_value, value.reference);
 
-  static final _id_ctor = jniAccessors.getMethodIDOf(
-      _classRef, r"<init>", r"(Ljava/lang/Object;Ljava/lang/Object;)V");
+  static final _id_ctor = jni.Jni.accessors.getMethodIDOf(
+      _class.reference, r"<init>", r"(Ljava/lang/Object;Ljava/lang/Object;)V");
 
   /// from: public void <init>(K key, V value)
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -2085,8 +2103,8 @@
     return MyMap_MyEntry.fromRef(
         K,
         V,
-        jniAccessors.newObjectWithArgs(
-            _classRef, _id_ctor, [key.reference, value.reference]).object);
+        jni.Jni.accessors.newObjectWithArgs(_class.reference, _id_ctor,
+            [key.reference, value.reference]).object);
   }
 }
 
@@ -2119,8 +2137,8 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $MyMap_MyEntryType &&
-        other is $MyMap_MyEntryType &&
+    return other.runtimeType == ($MyMap_MyEntryType<$K, $V>) &&
+        other is $MyMap_MyEntryType<$K, $V> &&
         K == other.K &&
         V == other.V;
   }
@@ -2129,7 +2147,7 @@
 /// from: com.github.dart_lang.jnigen.generics.MyStack
 class MyStack<$T extends jni.JObject> extends jni.JObject {
   @override
-  late final jni.JObjType $type = type(T);
+  late final jni.JObjType<MyStack<$T>> $type = type(T);
 
   final jni.JObjType<$T> T;
 
@@ -2138,8 +2156,8 @@
     jni.JObjectPtr ref,
   ) : super.fromRef(ref);
 
-  static final _classRef =
-      jniAccessors.getClassOf(r"com/github/dart_lang/jnigen/generics/MyStack");
+  static final _class =
+      jni.Jni.findJClass(r"com/github/dart_lang/jnigen/generics/MyStack");
 
   /// The type which includes information such as the signature of this class.
   static $MyStackType<$T> type<$T extends jni.JObject>(
@@ -2151,7 +2169,7 @@
   }
 
   static final _id_ctor =
-      jniAccessors.getMethodIDOf(_classRef, r"<init>", r"()V");
+      jni.Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"()V");
 
   /// from: public void <init>()
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -2159,11 +2177,13 @@
     required jni.JObjType<$T> T,
   }) {
     return MyStack.fromRef(
-        T, jniAccessors.newObjectWithArgs(_classRef, _id_ctor, []).object);
+        T,
+        jni.Jni.accessors
+            .newObjectWithArgs(_class.reference, _id_ctor, []).object);
   }
 
-  static final _id_fromArray = jniAccessors.getStaticMethodIDOf(
-      _classRef,
+  static final _id_fromArray = jni.Jni.accessors.getStaticMethodIDOf(
+      _class.reference,
       r"fromArray",
       r"([Ljava/lang/Object;)Lcom/github/dart_lang/jnigen/generics/MyStack;");
 
@@ -2176,17 +2196,15 @@
     T ??= jni.lowestCommonSuperType([
       ((arr.$type as jni.JArrayType).elementType as jni.JObjType),
     ]) as jni.JObjType<$T>;
-    return $MyStackType(T).fromRef(jniAccessors.callStaticMethodWithArgs(
-        _classRef,
+    return $MyStackType(T).fromRef(jni.Jni.accessors.callStaticMethodWithArgs(
+        _class.reference,
         _id_fromArray,
         jni.JniCallType.objectType,
         [arr.reference]).object);
   }
 
-  static final _id_fromArrayOfArrayOfGrandParents =
-      jniAccessors.getStaticMethodIDOf(
-          _classRef,
-          r"fromArrayOfArrayOfGrandParents",
+  static final _id_fromArrayOfArrayOfGrandParents = jni.Jni.accessors
+      .getStaticMethodIDOf(_class.reference, 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)
@@ -2201,26 +2219,28 @@
               .elementType as jni.JObjType) as $GrandParentType)
           .T,
     ]) as jni.JObjType<$S>;
-    return $MyStackType(S).fromRef(jniAccessors.callStaticMethodWithArgs(
-        _classRef,
+    return $MyStackType(S).fromRef(jni.Jni.accessors.callStaticMethodWithArgs(
+        _class.reference,
         _id_fromArrayOfArrayOfGrandParents,
         jni.JniCallType.objectType,
         [arr.reference]).object);
   }
 
-  static final _id_of = jniAccessors.getStaticMethodIDOf(
-      _classRef, r"of", r"()Lcom/github/dart_lang/jnigen/generics/MyStack;");
+  static final _id_of = jni.Jni.accessors.getStaticMethodIDOf(_class.reference,
+      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 deleted after use, by calling the `delete` method.
   static MyStack<$T> of<$T extends jni.JObject>({
     required jni.JObjType<$T> T,
   }) {
-    return $MyStackType(T).fromRef(jniAccessors.callStaticMethodWithArgs(
-        _classRef, _id_of, jni.JniCallType.objectType, []).object);
+    return $MyStackType(T).fromRef(jni.Jni.accessors.callStaticMethodWithArgs(
+        _class.reference, _id_of, jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_of1 = jniAccessors.getStaticMethodIDOf(_classRef, r"of",
+  static final _id_of1 = jni.Jni.accessors.getStaticMethodIDOf(
+      _class.reference,
+      r"of",
       r"(Ljava/lang/Object;)Lcom/github/dart_lang/jnigen/generics/MyStack;");
 
   /// from: static public com.github.dart_lang.jnigen.generics.MyStack<T> of(T obj)
@@ -2232,14 +2252,16 @@
     T ??= jni.lowestCommonSuperType([
       obj.$type,
     ]) as jni.JObjType<$T>;
-    return $MyStackType(T).fromRef(jniAccessors.callStaticMethodWithArgs(
-        _classRef,
+    return $MyStackType(T).fromRef(jni.Jni.accessors.callStaticMethodWithArgs(
+        _class.reference,
         _id_of1,
         jni.JniCallType.objectType,
         [obj.reference]).object);
   }
 
-  static final _id_of2 = jniAccessors.getStaticMethodIDOf(_classRef, r"of",
+  static final _id_of2 = jni.Jni.accessors.getStaticMethodIDOf(
+      _class.reference,
+      r"of",
       r"(Ljava/lang/Object;Ljava/lang/Object;)Lcom/github/dart_lang/jnigen/generics/MyStack;");
 
   /// from: static public com.github.dart_lang.jnigen.generics.MyStack<T> of(T obj, T obj2)
@@ -2253,40 +2275,40 @@
       obj2.$type,
       obj.$type,
     ]) as jni.JObjType<$T>;
-    return $MyStackType(T).fromRef(jniAccessors.callStaticMethodWithArgs(
-        _classRef,
+    return $MyStackType(T).fromRef(jni.Jni.accessors.callStaticMethodWithArgs(
+        _class.reference,
         _id_of2,
         jni.JniCallType.objectType,
         [obj.reference, obj2.reference]).object);
   }
 
-  static final _id_push =
-      jniAccessors.getMethodIDOf(_classRef, r"push", r"(Ljava/lang/Object;)V");
+  static final _id_push = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"push", r"(Ljava/lang/Object;)V");
 
   /// from: public void push(T item)
   void push(
     $T item,
   ) {
-    return jniAccessors.callMethodWithArgs(reference, _id_push,
+    return jni.Jni.accessors.callMethodWithArgs(reference, _id_push,
         jni.JniCallType.voidType, [item.reference]).check();
   }
 
-  static final _id_pop =
-      jniAccessors.getMethodIDOf(_classRef, r"pop", r"()Ljava/lang/Object;");
+  static final _id_pop = jni.Jni.accessors
+      .getMethodIDOf(_class.reference, r"pop", r"()Ljava/lang/Object;");
 
   /// from: public T pop()
   /// The returned object must be deleted after use, by calling the `delete` method.
   $T pop() {
-    return T.fromRef(jniAccessors.callMethodWithArgs(
+    return T.fromRef(jni.Jni.accessors.callMethodWithArgs(
         reference, _id_pop, jni.JniCallType.objectType, []).object);
   }
 
   static final _id_size =
-      jniAccessors.getMethodIDOf(_classRef, r"size", r"()I");
+      jni.Jni.accessors.getMethodIDOf(_class.reference, r"size", r"()I");
 
   /// from: public int size()
   int size() {
-    return jniAccessors.callMethodWithArgs(
+    return jni.Jni.accessors.callMethodWithArgs(
         reference, _id_size, jni.JniCallType.intType, []).integer;
   }
 }
@@ -2315,8 +2337,8 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $MyStackType &&
-        other is $MyStackType &&
+    return other.runtimeType == ($MyStackType<$T>) &&
+        other is $MyStackType<$T> &&
         T == other.T;
   }
 }
@@ -2324,7 +2346,7 @@
 /// from: com.github.dart_lang.jnigen.generics.StringKeyedMap
 class StringKeyedMap<$V extends jni.JObject> extends MyMap<jni.JString, $V> {
   @override
-  late final jni.JObjType $type = type(V);
+  late final jni.JObjType<StringKeyedMap<$V>> $type = type(V);
 
   final jni.JObjType<$V> V;
 
@@ -2333,8 +2355,8 @@
     jni.JObjectPtr ref,
   ) : super.fromRef(const jni.JStringType(), V, ref);
 
-  static final _classRef = jniAccessors
-      .getClassOf(r"com/github/dart_lang/jnigen/generics/StringKeyedMap");
+  static final _class = jni.Jni.findJClass(
+      r"com/github/dart_lang/jnigen/generics/StringKeyedMap");
 
   /// The type which includes information such as the signature of this class.
   static $StringKeyedMapType<$V> type<$V extends jni.JObject>(
@@ -2346,7 +2368,7 @@
   }
 
   static final _id_ctor =
-      jniAccessors.getMethodIDOf(_classRef, r"<init>", r"()V");
+      jni.Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"()V");
 
   /// from: public void <init>()
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -2354,7 +2376,9 @@
     required jni.JObjType<$V> V,
   }) {
     return StringKeyedMap.fromRef(
-        V, jniAccessors.newObjectWithArgs(_classRef, _id_ctor, []).object);
+        V,
+        jni.Jni.accessors
+            .newObjectWithArgs(_class.reference, _id_ctor, []).object);
   }
 }
 
@@ -2385,8 +2409,8 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $StringKeyedMapType &&
-        other is $StringKeyedMapType &&
+    return other.runtimeType == ($StringKeyedMapType<$V>) &&
+        other is $StringKeyedMapType<$V> &&
         V == other.V;
   }
 }
@@ -2394,25 +2418,25 @@
 /// from: com.github.dart_lang.jnigen.generics.StringMap
 class StringMap extends StringKeyedMap<jni.JString> {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<StringMap> $type = type;
 
   StringMap.fromRef(
     jni.JObjectPtr ref,
   ) : super.fromRef(const jni.JStringType(), ref);
 
-  static final _classRef = jniAccessors
-      .getClassOf(r"com/github/dart_lang/jnigen/generics/StringMap");
+  static final _class =
+      jni.Jni.findJClass(r"com/github/dart_lang/jnigen/generics/StringMap");
 
   /// The type which includes information such as the signature of this class.
   static const type = $StringMapType();
   static final _id_ctor =
-      jniAccessors.getMethodIDOf(_classRef, r"<init>", r"()V");
+      jni.Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"()V");
 
   /// from: public void <init>()
   /// The returned object must be deleted after use, by calling the `delete` method.
   factory StringMap() {
-    return StringMap.fromRef(
-        jniAccessors.newObjectWithArgs(_classRef, _id_ctor, []).object);
+    return StringMap.fromRef(jni.Jni.accessors
+        .newObjectWithArgs(_class.reference, _id_ctor, []).object);
   }
 }
 
@@ -2436,32 +2460,32 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $StringMapType && other is $StringMapType;
+    return other.runtimeType == ($StringMapType) && other is $StringMapType;
   }
 }
 
 /// from: com.github.dart_lang.jnigen.generics.StringStack
 class StringStack extends MyStack<jni.JString> {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<StringStack> $type = type;
 
   StringStack.fromRef(
     jni.JObjectPtr ref,
   ) : super.fromRef(const jni.JStringType(), ref);
 
-  static final _classRef = jniAccessors
-      .getClassOf(r"com/github/dart_lang/jnigen/generics/StringStack");
+  static final _class =
+      jni.Jni.findJClass(r"com/github/dart_lang/jnigen/generics/StringStack");
 
   /// The type which includes information such as the signature of this class.
   static const type = $StringStackType();
   static final _id_ctor =
-      jniAccessors.getMethodIDOf(_classRef, r"<init>", r"()V");
+      jni.Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"()V");
 
   /// from: public void <init>()
   /// The returned object must be deleted after use, by calling the `delete` method.
   factory StringStack() {
-    return StringStack.fromRef(
-        jniAccessors.newObjectWithArgs(_classRef, _id_ctor, []).object);
+    return StringStack.fromRef(jni.Jni.accessors
+        .newObjectWithArgs(_class.reference, _id_ctor, []).object);
   }
 }
 
@@ -2485,14 +2509,14 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $StringStackType && other is $StringStackType;
+    return other.runtimeType == ($StringStackType) && other is $StringStackType;
   }
 }
 
 /// from: com.github.dart_lang.jnigen.generics.StringValuedMap
 class StringValuedMap<$K extends jni.JObject> extends MyMap<$K, jni.JString> {
   @override
-  late final jni.JObjType $type = type(K);
+  late final jni.JObjType<StringValuedMap<$K>> $type = type(K);
 
   final jni.JObjType<$K> K;
 
@@ -2501,8 +2525,8 @@
     jni.JObjectPtr ref,
   ) : super.fromRef(K, const jni.JStringType(), ref);
 
-  static final _classRef = jniAccessors
-      .getClassOf(r"com/github/dart_lang/jnigen/generics/StringValuedMap");
+  static final _class = jni.Jni.findJClass(
+      r"com/github/dart_lang/jnigen/generics/StringValuedMap");
 
   /// The type which includes information such as the signature of this class.
   static $StringValuedMapType<$K> type<$K extends jni.JObject>(
@@ -2514,7 +2538,7 @@
   }
 
   static final _id_ctor =
-      jniAccessors.getMethodIDOf(_classRef, r"<init>", r"()V");
+      jni.Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"()V");
 
   /// from: public void <init>()
   /// The returned object must be deleted after use, by calling the `delete` method.
@@ -2522,7 +2546,9 @@
     required jni.JObjType<$K> K,
   }) {
     return StringValuedMap.fromRef(
-        K, jniAccessors.newObjectWithArgs(_classRef, _id_ctor, []).object);
+        K,
+        jni.Jni.accessors
+            .newObjectWithArgs(_class.reference, _id_ctor, []).object);
   }
 }
 
@@ -2553,8 +2579,8 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $StringValuedMapType &&
-        other is $StringValuedMapType &&
+    return other.runtimeType == ($StringValuedMapType<$K>) &&
+        other is $StringValuedMapType<$K> &&
         K == other.K;
   }
 }
@@ -2562,19 +2588,19 @@
 /// from: com.github.dart_lang.jnigen.annotations.JsonSerializable$Case
 class JsonSerializable_Case extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<JsonSerializable_Case> $type = type;
 
   JsonSerializable_Case.fromRef(
     jni.JObjectPtr ref,
   ) : super.fromRef(ref);
 
-  static final _classRef = jniAccessors.getClassOf(
+  static final _class = jni.Jni.findJClass(
       r"com/github/dart_lang/jnigen/annotations/JsonSerializable$Case");
 
   /// The type which includes information such as the signature of this class.
   static const type = $JsonSerializable_CaseType();
-  static final _id_values = jniAccessors.getStaticMethodIDOf(
-      _classRef,
+  static final _id_values = jni.Jni.accessors.getStaticMethodIDOf(
+      _class.reference,
       r"values",
       r"()[Lcom/github/dart_lang/jnigen/annotations/JsonSerializable$Case;");
 
@@ -2582,12 +2608,12 @@
   /// The returned object must be deleted after use, by calling the `delete` method.
   static jni.JArray<JsonSerializable_Case> values() {
     return const jni.JArrayType($JsonSerializable_CaseType()).fromRef(
-        jniAccessors.callStaticMethodWithArgs(
-            _classRef, _id_values, jni.JniCallType.objectType, []).object);
+        jni.Jni.accessors.callStaticMethodWithArgs(_class.reference, _id_values,
+            jni.JniCallType.objectType, []).object);
   }
 
-  static final _id_valueOf = jniAccessors.getStaticMethodIDOf(
-      _classRef,
+  static final _id_valueOf = jni.Jni.accessors.getStaticMethodIDOf(
+      _class.reference,
       r"valueOf",
       r"(Ljava/lang/String;)Lcom/github/dart_lang/jnigen/annotations/JsonSerializable$Case;");
 
@@ -2596,8 +2622,8 @@
   static JsonSerializable_Case valueOf(
     jni.JString name,
   ) {
-    return const $JsonSerializable_CaseType().fromRef(jniAccessors
-        .callStaticMethodWithArgs(_classRef, _id_valueOf,
+    return const $JsonSerializable_CaseType().fromRef(jni.Jni.accessors
+        .callStaticMethodWithArgs(_class.reference, _id_valueOf,
             jni.JniCallType.objectType, [name.reference]).object);
   }
 }
@@ -2624,7 +2650,7 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $JsonSerializable_CaseType &&
+    return other.runtimeType == ($JsonSerializable_CaseType) &&
         other is $JsonSerializable_CaseType;
   }
 }
@@ -2632,25 +2658,25 @@
 /// from: com.github.dart_lang.jnigen.annotations.MyDataClass
 class MyDataClass extends jni.JObject {
   @override
-  late final jni.JObjType $type = type;
+  late final jni.JObjType<MyDataClass> $type = type;
 
   MyDataClass.fromRef(
     jni.JObjectPtr ref,
   ) : super.fromRef(ref);
 
-  static final _classRef = jniAccessors
-      .getClassOf(r"com/github/dart_lang/jnigen/annotations/MyDataClass");
+  static final _class = jni.Jni.findJClass(
+      r"com/github/dart_lang/jnigen/annotations/MyDataClass");
 
   /// The type which includes information such as the signature of this class.
   static const type = $MyDataClassType();
   static final _id_ctor =
-      jniAccessors.getMethodIDOf(_classRef, r"<init>", r"()V");
+      jni.Jni.accessors.getMethodIDOf(_class.reference, r"<init>", r"()V");
 
   /// from: public void <init>()
   /// The returned object must be deleted after use, by calling the `delete` method.
   factory MyDataClass() {
-    return MyDataClass.fromRef(
-        jniAccessors.newObjectWithArgs(_classRef, _id_ctor, []).object);
+    return MyDataClass.fromRef(jni.Jni.accessors
+        .newObjectWithArgs(_class.reference, _id_ctor, []).object);
   }
 }
 
@@ -2675,6 +2701,6 @@
 
   @override
   bool operator ==(Object other) {
-    return other.runtimeType == $MyDataClassType && other is $MyDataClassType;
+    return other.runtimeType == ($MyDataClassType) && other is $MyDataClassType;
   }
 }
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 d46dcf7..6472985 100644
--- a/pkgs/jnigen/test/simple_package_test/runtime_test_registrant.dart
+++ b/pkgs/jnigen/test/simple_package_test/runtime_test_registrant.dart
@@ -264,6 +264,24 @@
           expect(stack.pop().toDartString(deleteOriginal: true), 'Hello');
         });
       });
+      test('Different stacks have different types, same stacks have same types',
+          () {
+        using((arena) {
+          final aStringStack = MyStack(T: JString.type)..deletedIn(arena);
+          final anotherStringStack = MyStack(T: JString.type)..deletedIn(arena);
+          final anObjectStack = MyStack(T: JObject.type)..deletedIn(arena);
+          expect(aStringStack.$type, anotherStringStack.$type);
+          expect(
+            aStringStack.$type.hashCode,
+            anotherStringStack.$type.hashCode,
+          );
+          expect(aStringStack.$type, isNot(anObjectStack.$type));
+          expect(
+            aStringStack.$type.hashCode,
+            isNot(anObjectStack.$type.hashCode),
+          );
+        });
+      });
       test('MyMap<K, V>', () {
         using((arena) {
           final map = MyMap(K: JString.type, V: Example.type)..deletedIn(arena);