blob: 704caac349a55c2b22416a2ddac13a4611661094 [file] [log] [blame] [edit]
// Copyright (c) 2022, 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:ffi';
import 'package:meta/meta.dart' show internal;
import 'jni.dart';
import 'jobject.dart';
import 'jreference.dart';
import 'third_party/generated_bindings.dart';
import 'types.dart';
void _check(JThrowablePtr exception) {
if (exception != nullptr) {
Jni.throwException(exception);
}
}
@internal
extension JniResultMethods on JniResult {
void check() => _check(exception);
int get byte {
check();
return value.b;
}
int get short {
check();
return value.s;
}
int get char {
check();
return value.c;
}
int get integer {
check();
return value.i;
}
int get long {
check();
return value.j;
}
double get float {
check();
return value.f;
}
double get doubleFloat {
check();
return value.d;
}
JObjectPtr get objectPointer {
check();
return value.l;
}
JObjectRefType get referenceType {
check();
return JObjectRefType.fromValue(value.i);
}
JReference get reference {
final pointer = objectPointer;
return pointer == nullptr ? jNullReference : JGlobalReference(pointer);
}
T object<T extends JObject?>(JType<T> type) {
return type.fromReference(reference);
}
bool get boolean {
check();
return value.z != 0;
}
}
@internal
extension JniIdLookupResultMethods on JniPointerResult {
JMethodIDPtr get methodID {
_check(exception);
return value.cast<jmethodID_>();
}
JFieldIDPtr get fieldID {
_check(exception);
return value.cast<jfieldID_>();
}
Pointer<Void> get checkedRef {
_check(exception);
return value;
}
Pointer<T> getPointer<T extends NativeType>() {
return value.cast<T>();
}
}
@internal
extension JniClassLookupResultMethods on JniClassLookupResult {
JClassPtr get checkedClassRef {
_check(exception);
return value;
}
}
@internal
extension JThrowableCheckMethod on JThrowablePtr {
void check() {
_check(this);
}
}