as<T extends JObject?> method

T as<T extends JObject?>(
  1. JObjType<T> type, {
  2. bool releaseOriginal = false,
})
inherited

Casts this object to another type.

If releaseOriginal is true, the casted object will be released.

Implementation

T as<T extends JObject?>(
  JObjType<T> type, {
  bool releaseOriginal = false,
}) {
  assert(
    () {
      final jClass = type.jClass.reference.toPointer();
      final canBeCasted = Jni.env.IsInstanceOf(reference.pointer, jClass);
      Jni.env.DeleteGlobalRef(jClass);
      return canBeCasted;
    }(),
    'The object must be of type "${type.signature}".',
  );
  if (releaseOriginal) {
    final ret = type.fromReference(JGlobalReference(reference.pointer));
    reference.setAsReleased();
    return ret;
  }
  final newRef = JGlobalReference(Jni.env.NewGlobalRef(reference.pointer));
  return type.fromReference(newRef);
}