Skip to content

Commit b0d2fca

Browse files
committed
Fix macro to use extension
1 parent d56bb3d commit b0d2fca

File tree

2 files changed

+29
-8
lines changed

2 files changed

+29
-8
lines changed

Sources/JavaKitMacros/JavaFieldMacro.swift

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ extension JavaFieldMacro: AccessorMacro {
3434
}
3535

3636
let isStatic = node.attributeName.trimmedDescription == "JavaStaticField"
37-
guard !isStatic || isInStaticContext(context: context) else {
37+
guard !isStatic || isInJavaClassContext(context: context) else {
3838
throw MacroExpansionErrorMessage("Cannot use @JavaStaticField outside of a JavaClass instance")
3939
}
4040

@@ -85,14 +85,10 @@ extension JavaFieldMacro: AccessorMacro {
8585
return accessors
8686
}
8787

88-
private static func isInStaticContext(context: some MacroExpansionContext) -> Bool {
88+
private static func isInJavaClassContext(context: some MacroExpansionContext) -> Bool {
8989
for lexicalContext in context.lexicalContext {
90-
if let classSyntax = lexicalContext.as(ClassDeclSyntax.self) {
91-
if classSyntax.name.trimmedDescription.starts(with: "JavaClass<") {
92-
return true
93-
} else {
94-
return false
95-
}
90+
if let classSyntax = lexicalContext.as(ExtensionDeclSyntax.self) {
91+
return classSyntax.extendedType.trimmedDescription.starts(with: "JavaClass<")
9692
}
9793
}
9894

Tests/JavaKitMacroTests/JavaClassMacroTests.swift

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,31 @@ class JavaKitMacroTests: XCTestCase {
5656
)
5757
}
5858

59+
func testJavaStaticMethodSuccess() throws {
60+
assertMacroExpansion(
61+
"""
62+
extension JavaClass<HelloWorld> {
63+
@JavaStaticField
64+
public var test: String
65+
}
66+
""",
67+
expandedSource: """
68+
69+
extension JavaClass<HelloWorld> {
70+
public var test: String {
71+
get {
72+
self[javaFieldName: "test", fieldType: String.self]
73+
}
74+
set {
75+
self[javaFieldName: "test", fieldType: String.self] = newValue
76+
}
77+
}
78+
}
79+
""",
80+
macros: Self.javaKitMacros
81+
)
82+
}
83+
5984
func testJavaClass() throws {
6085
assertMacroExpansion("""
6186
@JavaClass("org.swift.example.HelloWorld")

0 commit comments

Comments
 (0)