diff --git a/Sources/JNI/JNIFields.swift b/Sources/JNI/JNIFields.swift index 8e86fb9..d823477 100644 --- a/Sources/JNI/JNIFields.swift +++ b/Sources/JNI/JNIFields.swift @@ -49,6 +49,13 @@ public extension JNI { return result } + 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() + 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 GetStaticLongField(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..37414c4 100644 --- a/Sources/JNI/JNIMethods.swift +++ b/Sources/JNI/JNIMethods.swift @@ -123,6 +123,14 @@ extension JNI { return result } + 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) + 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 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) + 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..033f456 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) } } + +// JavaLong aka Int64 + +extension JavaLong: JavaParameterConvertible, JavaInitializableFromMethod, JavaInitializableFromField { + public static let asJNIParameterString = "J" + + public func toJavaParameter() -> JavaParameter { + return JavaParameter(long: self) + } + + 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 -> JavaLong { + return try jni.CallLongMethod(methodID, on: object, 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 -> JavaLong { + return try jni.GetLongField(of: javaObject, id: fieldID) + } +}