From 5a61886e5e476f405c026c07ba855c192b7eafc1 Mon Sep 17 00:00:00 2001 From: Doug Gregor Date: Mon, 28 Oct 2024 13:38:15 -0700 Subject: [PATCH] JavaClass macro: stop generating javaThis and javaEnvironment members Provide these properties via an extension to AnyJavaObject, accessing the holder values, rather than splatting that same code into every @JavaClass. --- Sources/JavaKit/AnyJavaObject.swift | 12 ++++++++---- Sources/JavaKit/Macros.swift | 4 ---- Sources/JavaKitMacros/JavaClassMacro.swift | 14 -------------- Tests/JavaKitMacroTests/JavaClassMacroTests.swift | 8 -------- 4 files changed, 8 insertions(+), 30 deletions(-) diff --git a/Sources/JavaKit/AnyJavaObject.swift b/Sources/JavaKit/AnyJavaObject.swift index 8f28c098..711b953d 100644 --- a/Sources/JavaKit/AnyJavaObject.swift +++ b/Sources/JavaKit/AnyJavaObject.swift @@ -50,15 +50,19 @@ public protocol AnyJavaObject { /// The Swift instance that keeps the Java holder alive. var javaHolder: JavaObjectHolder { get } +} +extension AnyJavaObject { /// Retrieve the underlying Java object. - var javaThis: jobject { get } + public var javaThis: jobject { + javaHolder.object! + } /// Retrieve the environment in which this Java object resides. - var javaEnvironment: JNIEnvironment { get } -} + public var javaEnvironment: JNIEnvironment { + javaHolder.environment + } -extension AnyJavaObject { /// The full Java class name, where each component is separated by a "/". static var fullJavaClassNameWithSlashes: String { let seq = fullJavaClassName.map { $0 == "." ? "/" as Character : $0 } diff --git a/Sources/JavaKit/Macros.swift b/Sources/JavaKit/Macros.swift index 4caef659..029344d8 100644 --- a/Sources/JavaKit/Macros.swift +++ b/Sources/JavaKit/Macros.swift @@ -34,8 +34,6 @@ member, names: named(fullJavaClassName), named(javaHolder), - named(javaThis), - named(javaEnvironment), named(init(javaHolder:)), named(JavaSuperclass), named(`as`) @@ -70,8 +68,6 @@ public macro JavaClass( member, names: named(fullJavaClassName), named(javaHolder), - named(javaThis), - named(javaEnvironment), named(init(javaHolder:)), named(JavaSuperclass), named(`as`) diff --git a/Sources/JavaKitMacros/JavaClassMacro.swift b/Sources/JavaKitMacros/JavaClassMacro.swift index 2f0783f1..5a6e25cb 100644 --- a/Sources/JavaKitMacros/JavaClassMacro.swift +++ b/Sources/JavaKitMacros/JavaClassMacro.swift @@ -69,18 +69,6 @@ extension JavaClassMacro: MemberMacro { public var javaHolder: JavaObjectHolder """ - let javaThisMember: DeclSyntax = """ - public var javaThis: jobject { - javaHolder.object! - } - """ - - let javaEnvironmentMember: DeclSyntax = """ - public var javaEnvironment: JNIEnvironment { - javaHolder.environment - } - """ - let initMember: DeclSyntax = """ public init(javaHolder: JavaObjectHolder) { self.javaHolder = javaHolder @@ -98,8 +86,6 @@ extension JavaClassMacro: MemberMacro { fullJavaClassNameMember, superclassTypealias, javaHolderMember, - javaThisMember, - javaEnvironmentMember, initMember, nonOptionalAs, ] diff --git a/Tests/JavaKitMacroTests/JavaClassMacroTests.swift b/Tests/JavaKitMacroTests/JavaClassMacroTests.swift index 42ce532f..e83356c0 100644 --- a/Tests/JavaKitMacroTests/JavaClassMacroTests.swift +++ b/Tests/JavaKitMacroTests/JavaClassMacroTests.swift @@ -102,14 +102,6 @@ class JavaKitMacroTests: XCTestCase { public var javaHolder: JavaObjectHolder - public var javaThis: jobject { - javaHolder.object! - } - - public var javaEnvironment: JNIEnvironment { - javaHolder.environment - } - public init(javaHolder: JavaObjectHolder) { self.javaHolder = javaHolder }