diff --git a/Sources/JNI/JNI.swift b/Sources/JNI/JNI.swift index 4dba25a..b954f27 100644 --- a/Sources/JNI/JNI.swift +++ b/Sources/JNI/JNI.swift @@ -64,4 +64,9 @@ public extension JNI { let env = self._env return env.pointee.pointee.MonitorExit(env, obj) } + + func GetDirectBufferAddress(buffer: JavaObject) -> UnsafeMutableRawPointer? { + let env = self._env + return env.pointee.pointee.GetDirectBufferAddress(env, buffer) + } } diff --git a/Sources/JNI/JNIFields.swift b/Sources/JNI/JNIFields.swift index c470bec..c52425f 100644 --- a/Sources/JNI/JNIFields.swift +++ b/Sources/JNI/JNIFields.swift @@ -25,6 +25,17 @@ public extension JNI { try checkAndThrowOnJNIError() return try T.fromField(fieldID!, on: javaObject) } + + func GetField(_ fieldName: String, fieldJavaClassName: String, from javaObject: JavaObject) throws -> JavaObject { + let env = self._env + let javaClass = try GetObjectClass(obj: javaObject) + defer { + jni.DeleteLocalRef(javaClass) + } + let fieldID = env.pointee.pointee.GetFieldID(env, javaClass, fieldName, "L\(fieldJavaClassName);") + try checkAndThrowOnJNIError() + return try JavaObject.fromField(fieldID!, on: javaObject) + } } diff --git a/Sources/JNI/JNIObjects.swift b/Sources/JNI/JNIObjects.swift index 476c9c8..8242333 100644 --- a/Sources/JNI/JNIObjects.swift +++ b/Sources/JNI/JNIObjects.swift @@ -87,6 +87,10 @@ open class JNIObject { return try jni.GetField(fieldName, from: self.instance) } + public func getField(_ fieldName: String, fieldJavaClassName: String) throws -> JavaObject { + return try jni.GetField(fieldName, fieldJavaClassName: fieldJavaClassName, from: self.instance) + } + public static func callStatic(methodName: String, arguments: [JavaParameterConvertible] = []) throws { try jni.callStatic(methodName, on: self.javaClass, arguments: arguments) }