@@ -22,6 +22,7 @@ import XCTest
2222class JavaKitMacroTests : XCTestCase {
2323 static let javaKitMacros : [ String : any Macro . Type ] = [
2424 " JavaClass " : JavaClassMacro . self ,
25+ " JavaRecord " : JavaClassMacro . self ,
2526 " JavaMethod " : JavaMethodMacro . self ,
2627 " JavaField " : JavaFieldMacro . self ,
2728 " JavaStaticMethod " : JavaMethodMacro . self ,
@@ -468,6 +469,64 @@ class JavaKitMacroTests: XCTestCase {
468469 )
469470 }
470471
472+ func testJavaRecord ( ) throws {
473+ assertMacroExpansion (
474+ """
475+ @JavaRecord( " com.example.Point " )
476+ open class Point: JavaObject {
477+ @JavaMethod
478+ @_nonoverride public convenience init(_ x: Int32, _ y: Int32, environment: JNIEnvironment? = nil)
479+
480+ @JavaMethod
481+ open func x() -> Int32
482+ }
483+ """ ,
484+ expandedSource : """
485+
486+ open class Point: JavaObject {
487+ @_nonoverride public convenience init(_ x: Int32, _ y: Int32, environment: JNIEnvironment? = nil) {
488+ let _environment = if let environment {
489+ environment
490+ } else {
491+ try! JavaVirtualMachine.shared().environment()
492+ }
493+ let javaThis = try! Self.dynamicJavaNewObjectInstance(in: _environment, arguments: x.self, y.self)
494+ self.init(javaThis: javaThis, environment: _environment)
495+ }
496+ open func x() -> Int32 {
497+ return {
498+ do {
499+ return try dynamicJavaMethodCall(methodName: " x " , resultType: Int32.self)
500+ } catch {
501+ if let throwable = error as? Throwable {
502+ let sw = StringWriter()
503+ let pw = PrintWriter(sw)
504+ throwable.printStackTrace(pw)
505+ fatalError( " Java call threw unhandled exception: \\ (error) \\ n \\ (sw.toString()) " )
506+ }
507+ fatalError( " Java call threw unhandled exception: \\ (error) " )
508+ }
509+ }()
510+ }
511+
512+ /// The full Java class name for this Swift type.
513+ open override class var fullJavaClassName: String {
514+ #if os(Android) && AndroidCoreLibraryDesugaring
515+ AndroidSupport.androidDesugarClassNameConversion(for: " com.example.Point " )
516+ #else
517+ " com.example.Point "
518+ #endif
519+ }
520+
521+ public required init(javaHolder: JavaObjectHolder) {
522+ super.init(javaHolder: javaHolder)
523+ }
524+ }
525+ """ ,
526+ macros : Self . javaKitMacros
527+ )
528+ }
529+
471530 func testJavaGenericClassGenericMethodParameter ( ) throws {
472531 assertMacroExpansion (
473532 """
0 commit comments