@@ -102,7 +102,7 @@ extension Swift2JavaTranslator {
102
102
printModuleClass ( & printer) { printer in
103
103
// TODO: print all "static" methods
104
104
for decl in importedGlobalFuncs {
105
- printDowncallMethods ( & printer, decl)
105
+ printFunctionDowncallMethods ( & printer, decl)
106
106
}
107
107
}
108
108
}
@@ -133,7 +133,7 @@ extension Swift2JavaTranslator {
133
133
134
134
// Methods
135
135
for funcDecl in decl. methods {
136
- printDowncallMethods ( & printer, funcDecl)
136
+ printFunctionDowncallMethods ( & printer, funcDecl)
137
137
}
138
138
}
139
139
}
@@ -456,7 +456,7 @@ extension Swift2JavaTranslator {
456
456
)
457
457
}
458
458
459
- public func printDowncallMethods ( _ printer: inout CodePrinter , _ decl: ImportedFunc ) {
459
+ public func printFunctionDowncallMethods ( _ printer: inout CodePrinter , _ decl: ImportedFunc ) {
460
460
printer. printSeparator ( decl. identifier)
461
461
462
462
printer. printTypeDecl ( " private static class \( decl. baseIdentifier) " ) { printer in
@@ -551,6 +551,7 @@ extension Swift2JavaTranslator {
551
551
}
552
552
}
553
553
554
+ // First print all the supporting infra
554
555
for accessorKind in decl. supportedAccessorKinds {
555
556
guard let accessor = decl. accessorFunc ( kind: accessorKind) else {
556
557
log. warning ( " Skip print for \( accessorKind) of \( decl. identifier) ! " )
@@ -561,12 +562,20 @@ extension Swift2JavaTranslator {
561
562
printFunctionAddressMethod ( & printer, decl: accessor, accessorKind: accessorKind)
562
563
}
563
564
564
- // Render the basic "make the downcall" function
565
- if decl. hasParent {
566
- // printFuncDowncallMethod(&printer, decl: decl, selfVariant: .memorySegment)
567
- // printFuncDowncallMethod(&printer, decl: decl, selfVariant: .wrapper)
568
- } else {
569
- // printFuncDowncallMethod(&printer, decl: decl, selfVariant: nil)
565
+ // Then print the actual downcall methods
566
+ for accessorKind in decl. supportedAccessorKinds {
567
+ guard let accessor = decl. accessorFunc ( kind: accessorKind) else {
568
+ log. warning ( " Skip print for \( accessorKind) of \( decl. identifier) ! " )
569
+ continue
570
+ }
571
+
572
+ // Render the basic "make the downcall" function
573
+ if decl. hasParent {
574
+ printFuncDowncallMethod ( & printer, decl: accessor, selfVariant: . memorySegment, accessorKind: accessorKind)
575
+ printFuncDowncallMethod ( & printer, decl: accessor, selfVariant: . wrapper, accessorKind: accessorKind)
576
+ } else {
577
+ printFuncDowncallMethod ( & printer, decl: accessor, selfVariant: nil , accessorKind: accessorKind)
578
+ }
570
579
}
571
580
}
572
581
@@ -594,7 +603,8 @@ extension Swift2JavaTranslator {
594
603
public func printFuncDowncallMethod(
595
604
_ printer: inout CodePrinter ,
596
605
decl: ImportedFunc ,
597
- selfVariant: SelfParameterVariant ?
606
+ selfVariant: SelfParameterVariant ? ,
607
+ accessorKind: VariableAccessorKind ? = nil
598
608
) {
599
609
let returnTy = decl. returnType. javaType
600
610
@@ -605,32 +615,37 @@ extension Swift2JavaTranslator {
605
615
maybeReturnCast = " return ( \( returnTy) ) "
606
616
}
607
617
618
+ // TODO: we could copy the Swift method's documentation over here, that'd be great UX
619
+ let javaDocComment : String =
620
+ """
621
+ /**
622
+ * Downcall to Swift:
623
+ \(decl.renderCommentSnippet ?? "* ")
624
+ */
625
+ """
626
+
627
+ // An identifier may be "getX", "setX" or just the plain method name
628
+ let identifier = accessorKind. renderMethodName ( decl)
629
+
608
630
if selfVariant == SelfParameterVariant . wrapper {
609
631
// delegate to the MemorySegment "self" accepting overload
610
632
printer. print (
611
633
"""
612
- /**
613
- * {@snippet lang=swift :
614
- * \(/*TODO: make a printSnippet func*/decl.syntax ?? "")
615
- * }
616
- */
617
- public \( returnTy) \( decl. baseIdentifier) ( \( renderJavaParamDecls ( decl, selfVariant: . wrapper) ) ) {
618
- \( maybeReturnCast) \( decl. baseIdentifier) ( \( renderForwardParams ( decl, selfVariant: . wrapper) ) );
634
+ \( javaDocComment)
635
+ public \( returnTy) \( identifier) ( \( renderJavaParamDecls ( decl, selfVariant: . wrapper) ) ) {
636
+ \( maybeReturnCast) \( identifier) ( \( renderForwardParams ( decl, selfVariant: . wrapper) ) );
619
637
}
620
638
"""
621
639
)
622
640
return
623
641
}
624
642
643
+ let handleName = accessorKind. renderHandleFieldName
625
644
printer. print (
626
645
"""
627
- /**
628
- * {@snippet lang=swift :
629
- * \(/*TODO: make a printSnippet func*/decl.syntax ?? "")
630
- * }
631
- */
632
- public static \( returnTy) \( decl. baseIdentifier) ( \( renderJavaParamDecls ( decl, selfVariant: selfVariant) ) ) {
633
- var mh$ = \( decl. baseIdentifier) .HANDLE;
646
+ \( javaDocComment)
647
+ public static \( returnTy) \( identifier) ( \( renderJavaParamDecls ( decl, selfVariant: selfVariant) ) ) {
648
+ var mh$ = \( decl. baseIdentifier) . \( handleName) ;
634
649
try {
635
650
if (TRACE_DOWNCALLS) {
636
651
traceDowncall( \( renderForwardParams ( decl, selfVariant: . memorySegment) ) );
0 commit comments