From 7efb82ff2229b4f3a2f6fd45afb928c40008d220 Mon Sep 17 00:00:00 2001 From: rikner Date: Fri, 12 Mar 2021 16:55:28 +0100 Subject: [PATCH 1/3] implement JNI.GetDirectBufferAddress() --- Sources/JNI/JNI.swift | 5 +++++ 1 file changed, 5 insertions(+) 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) + } } From ffa9bf7e1df9ec83c4a23613f7a7e8cb8dc48155 Mon Sep 17 00:00:00 2001 From: rikner Date: Fri, 12 Mar 2021 16:55:53 +0100 Subject: [PATCH 2/3] implement JNIObject.getField() --- Sources/JNI/JNIFields.swift | 8 ++++++++ Sources/JNI/JNIObjects.swift | 4 ++++ 2 files changed, 12 insertions(+) diff --git a/Sources/JNI/JNIFields.swift b/Sources/JNI/JNIFields.swift index c470bec..4bfd738 100644 --- a/Sources/JNI/JNIFields.swift +++ b/Sources/JNI/JNIFields.swift @@ -25,6 +25,14 @@ 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) + 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) } From 52a0dd21d7d791c821e1aded5fe4e93fa3c9f723 Mon Sep 17 00:00:00 2001 From: rikner Date: Mon, 15 Mar 2021 12:18:18 +0100 Subject: [PATCH 3/3] cleanup local class ref --- Sources/JNI/JNIFields.swift | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Sources/JNI/JNIFields.swift b/Sources/JNI/JNIFields.swift index 4bfd738..c52425f 100644 --- a/Sources/JNI/JNIFields.swift +++ b/Sources/JNI/JNIFields.swift @@ -29,6 +29,9 @@ public extension JNI { 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)