From 327e1ff59cab40e0bd10707c56c160c698c162a7 Mon Sep 17 00:00:00 2001 From: michaelknoch Date: Fri, 25 May 2018 10:07:28 +0200 Subject: [PATCH 1/2] allow passing Int64 aka JavaFloat through JNI --- Sources/JNI/JNIFields.swift | 14 ++++++++++ Sources/JNI/JNIMethods.swift | 16 ++++++++++++ .../JavaParameterConvertible+Primitives.swift | 26 +++++++++++++++++++ 3 files changed, 56 insertions(+) diff --git a/Sources/JNI/JNIFields.swift b/Sources/JNI/JNIFields.swift index 8e86fb9..10aaba4 100644 --- a/Sources/JNI/JNIFields.swift +++ b/Sources/JNI/JNIFields.swift @@ -49,6 +49,13 @@ public extension JNI { return result } + public func GetInt64Field(of javaObject: JavaObject, id: JavaFieldID) throws -> JavaLong { + let _env = self._env + let result = _env.pointee.pointee.GetLongField(_env, javaObject, id) + try checkAndThrowOnJNIError() + return result + } + public func GetDoubleField(of javaObject: JavaObject, id: JavaFieldID) throws -> JavaDouble { let _env = self._env let result = _env.pointee.pointee.GetDoubleField(_env, javaObject, id) @@ -86,6 +93,13 @@ public extension JNI { return result } + public func GetStaticInt64Field(of javaClass: JavaClass, id: JavaFieldID) throws -> JavaLong { + let _env = self._env + let result = _env.pointee.pointee.GetStaticLongField(_env, javaClass, id) + try checkAndThrowOnJNIError() + return result + } + public func GetStaticDoubleField(of javaClass: JavaClass, id: JavaFieldID) throws -> JavaDouble { let _env = self._env let result = _env.pointee.pointee.GetStaticDoubleField(_env, javaClass, id) diff --git a/Sources/JNI/JNIMethods.swift b/Sources/JNI/JNIMethods.swift index 4a9c5a1..de1f9ce 100644 --- a/Sources/JNI/JNIMethods.swift +++ b/Sources/JNI/JNIMethods.swift @@ -123,6 +123,14 @@ extension JNI { return result } + public func CallInt64Method(_ method: JavaMethodID, on object: JavaObject, parameters: [JavaParameter]) throws -> JavaLong { + let _env = self._env + var methodArgs = parameters + let result = _env.pointee.pointee.CallLongMethod(_env, object, method, &methodArgs) + try checkAndThrowOnJNIError() + return result + } + public func CallDoubleMethod(_ method: JavaMethodID, on object: JavaObject, parameters: [JavaParameter]) throws -> JavaDouble { let _env = self._env var methodArgs = parameters @@ -168,6 +176,14 @@ extension JNI { return result } + public func CallStaticInt64Method(_ method: JavaMethodID, on javaClass: JavaClass, parameters: [JavaParameter]) throws -> JavaLong { + let _env = self._env + var methodArgs = parameters + let result = _env.pointee.pointee.CallStaticLongMethodA(_env, javaClass, method, &methodArgs) + try checkAndThrowOnJNIError() + return result + } + public func CallStaticFloatMethod(_ method: JavaMethodID, on javaClass: JavaClass, parameters: [JavaParameter]) throws -> JavaFloat { let _env = self._env var methodArgs = parameters diff --git a/Sources/JNI/JavaParameterConvertible+Primitives.swift b/Sources/JNI/JavaParameterConvertible+Primitives.swift index c324e32..c07594d 100644 --- a/Sources/JNI/JavaParameterConvertible+Primitives.swift +++ b/Sources/JNI/JavaParameterConvertible+Primitives.swift @@ -107,3 +107,29 @@ extension Float: JavaParameterConvertible, JavaInitializableFromMethod, JavaInit return try jni.GetFloatField(of: javaObject, id: fieldID) } } + +// Int64 aka JavaLong + +extension Int64: JavaParameterConvertible, JavaInitializableFromMethod, JavaInitializableFromField { + public static let asJNIParameterString = "J" + + public func toJavaParameter() -> JavaParameter { + return JavaParameter(long: Int64(self)) + } + + public static func fromStaticField(_ fieldID: JavaFieldID, of javaClass: JavaClass) throws -> Int64 { + return try Int64(jni.GetStaticInt64Field(of: javaClass, id: fieldID)) + } + + public static func fromMethod(calling methodID: JavaMethodID, on object: JavaObject, args: [JavaParameter]) throws -> Int64 { + return try jni.CallInt64Method(methodID, on: object, parameters: args) + } + + public static func fromStaticMethod(calling methodID: JavaMethodID, on javaClass: JavaClass, args: [JavaParameter]) throws -> Int64 { + return try jni.CallStaticInt64Method(methodID, on: javaClass, parameters: args) + } + + public static func fromField(_ fieldID: JavaFieldID, on javaObject: JavaObject) throws -> Int64 { + return try jni.GetInt64Field(of: javaObject, id: fieldID) + } +} From 249779159c3e95404567b1a2ada021cd5af8cec9 Mon Sep 17 00:00:00 2001 From: michaelknoch Date: Fri, 25 May 2018 13:11:48 +0200 Subject: [PATCH 2/2] fix function signature and cleanup --- Sources/JNI/JNIFields.swift | 4 ++-- Sources/JNI/JNIMethods.swift | 4 ++-- .../JavaParameterConvertible+Primitives.swift | 22 +++++++++---------- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/Sources/JNI/JNIFields.swift b/Sources/JNI/JNIFields.swift index 10aaba4..d823477 100644 --- a/Sources/JNI/JNIFields.swift +++ b/Sources/JNI/JNIFields.swift @@ -49,7 +49,7 @@ public extension JNI { return result } - public func GetInt64Field(of javaObject: JavaObject, id: JavaFieldID) throws -> JavaLong { + public func GetLongField(of javaObject: JavaObject, id: JavaFieldID) throws -> JavaLong { let _env = self._env let result = _env.pointee.pointee.GetLongField(_env, javaObject, id) try checkAndThrowOnJNIError() @@ -93,7 +93,7 @@ public extension JNI { return result } - public func GetStaticInt64Field(of javaClass: JavaClass, id: JavaFieldID) throws -> JavaLong { + public func GetStaticLongField(of javaClass: JavaClass, id: JavaFieldID) throws -> JavaLong { let _env = self._env let result = _env.pointee.pointee.GetStaticLongField(_env, javaClass, id) try checkAndThrowOnJNIError() diff --git a/Sources/JNI/JNIMethods.swift b/Sources/JNI/JNIMethods.swift index de1f9ce..37414c4 100644 --- a/Sources/JNI/JNIMethods.swift +++ b/Sources/JNI/JNIMethods.swift @@ -123,7 +123,7 @@ extension JNI { return result } - public func CallInt64Method(_ method: JavaMethodID, on object: JavaObject, parameters: [JavaParameter]) throws -> JavaLong { + public func CallLongMethod(_ method: JavaMethodID, on object: JavaObject, parameters: [JavaParameter]) throws -> JavaLong { let _env = self._env var methodArgs = parameters let result = _env.pointee.pointee.CallLongMethod(_env, object, method, &methodArgs) @@ -176,7 +176,7 @@ extension JNI { return result } - public func CallStaticInt64Method(_ method: JavaMethodID, on javaClass: JavaClass, parameters: [JavaParameter]) throws -> JavaLong { + public func CallStaticLongMethod(_ method: JavaMethodID, on javaClass: JavaClass, parameters: [JavaParameter]) throws -> JavaLong { let _env = self._env var methodArgs = parameters let result = _env.pointee.pointee.CallStaticLongMethodA(_env, javaClass, method, &methodArgs) diff --git a/Sources/JNI/JavaParameterConvertible+Primitives.swift b/Sources/JNI/JavaParameterConvertible+Primitives.swift index c07594d..033f456 100644 --- a/Sources/JNI/JavaParameterConvertible+Primitives.swift +++ b/Sources/JNI/JavaParameterConvertible+Primitives.swift @@ -108,28 +108,28 @@ extension Float: JavaParameterConvertible, JavaInitializableFromMethod, JavaInit } } -// Int64 aka JavaLong +// JavaLong aka Int64 -extension Int64: JavaParameterConvertible, JavaInitializableFromMethod, JavaInitializableFromField { +extension JavaLong: JavaParameterConvertible, JavaInitializableFromMethod, JavaInitializableFromField { public static let asJNIParameterString = "J" public func toJavaParameter() -> JavaParameter { - return JavaParameter(long: Int64(self)) + return JavaParameter(long: self) } - public static func fromStaticField(_ fieldID: JavaFieldID, of javaClass: JavaClass) throws -> Int64 { - return try Int64(jni.GetStaticInt64Field(of: javaClass, id: fieldID)) + public static func fromStaticField(_ fieldID: JavaFieldID, of javaClass: JavaClass) throws -> JavaLong { + return try JavaLong(jni.GetStaticLongField(of: javaClass, id: fieldID)) } - public static func fromMethod(calling methodID: JavaMethodID, on object: JavaObject, args: [JavaParameter]) throws -> Int64 { - return try jni.CallInt64Method(methodID, on: object, parameters: args) + public static func fromMethod(calling methodID: JavaMethodID, on object: JavaObject, args: [JavaParameter]) throws -> JavaLong { + return try jni.CallLongMethod(methodID, on: object, parameters: args) } - public static func fromStaticMethod(calling methodID: JavaMethodID, on javaClass: JavaClass, args: [JavaParameter]) throws -> Int64 { - return try jni.CallStaticInt64Method(methodID, on: javaClass, parameters: args) + public static func fromStaticMethod(calling methodID: JavaMethodID, on javaClass: JavaClass, args: [JavaParameter]) throws -> JavaLong { + return try jni.CallStaticLongMethod(methodID, on: javaClass, parameters: args) } - public static func fromField(_ fieldID: JavaFieldID, on javaObject: JavaObject) throws -> Int64 { - return try jni.GetInt64Field(of: javaObject, id: fieldID) + public static func fromField(_ fieldID: JavaFieldID, on javaObject: JavaObject) throws -> JavaLong { + return try jni.GetLongField(of: javaObject, id: fieldID) } }