Skip to content

Commit 9823301

Browse files
java2swift: add non-optional-returning as function to JavaClassMacro (#74)
Co-authored-by: Konrad `ktoso` Malawski <konrad.malawski@project13.pl>
1 parent a874bca commit 9823301

File tree

3 files changed

+17
-2
lines changed

3 files changed

+17
-2
lines changed

Sources/JavaKit/Macros.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@
3737
named(javaThis),
3838
named(javaEnvironment),
3939
named(init(javaHolder:)),
40-
named(JavaSuperclass)
40+
named(JavaSuperclass),
41+
named(`as`)
4142
)
4243
@attached(extension, conformances: AnyJavaObject)
4344
@attached(peer)
@@ -73,7 +74,8 @@ public macro JavaClass(
7374
named(javaThis),
7475
named(javaEnvironment),
7576
named(init(javaHolder:)),
76-
named(JavaSuperclass)
77+
named(JavaSuperclass),
78+
named(`as`)
7779
)
7880
@attached(extension, conformances: AnyJavaObject)
7981
public macro JavaInterface(_ fullClassName: String, extends: (any AnyJavaObject.Type)?...) =

Sources/JavaKitMacros/JavaClassMacro.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,13 +87,21 @@ extension JavaClassMacro: MemberMacro {
8787
}
8888
"""
8989

90+
let nonOptionalAs: DeclSyntax = """
91+
/// Casting to ``\(raw: superclass)`` will never be nil because ``\(raw: className.split(separator: ".").last!)`` extends it.
92+
public func `as`(_: \(raw: superclass).Type) -> \(raw: superclass) {
93+
return \(raw: superclass)(javaHolder: javaHolder)
94+
}
95+
"""
96+
9097
return [
9198
fullJavaClassNameMember,
9299
superclassTypealias,
93100
javaHolderMember,
94101
javaThisMember,
95102
javaEnvironmentMember,
96103
initMember,
104+
nonOptionalAs,
97105
]
98106
}
99107
}

Tests/JavaKitMacroTests/JavaClassMacroTests.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,11 @@ class JavaKitMacroTests: XCTestCase {
7878
public init(javaHolder: JavaObjectHolder) {
7979
self.javaHolder = javaHolder
8080
}
81+
82+
/// Casting to ``JavaObject`` will never be nil because ``HelloWorld`` extends it.
83+
public func `as`(_: JavaObject.Type) -> JavaObject {
84+
return JavaObject(javaHolder: javaHolder)
85+
}
8186
}
8287
""",
8388
macros: Self.javaKitMacros

0 commit comments

Comments
 (0)