@@ -16,6 +16,8 @@ import JavaTypes
1616
1717// MARK: Defaults
1818
19+ private let globalArenaName = " GLOBAL_ARENA "
20+
1921extension JNISwift2JavaGenerator {
2022 /// Default set Java imports for every generated file
2123 static let defaultJavaImports : Array < String > = [
@@ -72,6 +74,11 @@ extension JNISwift2JavaGenerator {
7274 printImports ( & printer)
7375
7476 printModuleClass ( & printer) { printer in
77+ if config. effectiveMemoryManagementMode. requiresGlobalArena {
78+ printer. print ( " static final SwiftArena \( globalArenaName) = SwiftArena.ofAuto(); " )
79+ printer. println ( )
80+ }
81+
7582 printer. print (
7683 """
7784 static final String LIB_NAME = " \( swiftModuleName) " ;
@@ -247,29 +254,50 @@ extension JNISwift2JavaGenerator {
247254 guard let translatedDecl = translatedDecl ( for: decl) else {
248255 fatalError ( " Decl was not translated, \( decl) " )
249256 }
257+ let translatedSignature = translatedDecl. translatedFunctionSignature
250258
251259 var modifiers = [ " public " ]
260+
252261 if decl. isStatic || decl. isInitializer || !decl. hasParent {
253262 modifiers. append ( " static " )
254263 }
255264
256- let translatedSignature = translatedDecl. translatedFunctionSignature
257265 let resultType = translatedSignature. resultType. javaType
258- var parameters = translatedDecl. translatedFunctionSignature. parameters. map ( { $0. parameter. renderParameter ( ) } )
259- if translatedSignature. requiresSwiftArena {
260- parameters. append ( " SwiftArena swiftArena$ " )
261- }
266+ var parameters = translatedDecl. translatedFunctionSignature. parameters. map { $0. parameter. renderParameter ( ) }
262267 let throwsClause = decl. isThrowing ? " throws Exception " : " "
263268
264269 var annotationsStr = translatedSignature. annotations. map ( { $0. render ( ) } ) . joined ( separator: " \n " )
265270 if !annotationsStr. isEmpty { annotationsStr += " \n " }
266271
267- let modifiersStr = modifiers. joined ( separator: " " )
268272 let parametersStr = parameters. joined ( separator: " , " )
269273
274+ // Print default global arena variation
275+ if config. effectiveMemoryManagementMode. requiresGlobalArena && translatedSignature. requiresSwiftArena {
276+ printDeclDocumentation ( & printer, decl)
277+ printer. printBraceBlock (
278+ " \( annotationsStr) \( modifiers. joined ( separator: " " ) ) \( resultType) \( translatedDecl. name) ( \( parametersStr) ) \( throwsClause) "
279+ ) { printer in
280+ let arguments = translatedDecl. translatedFunctionSignature. parameters. map ( \. parameter. name) + [ " \( swiftModuleName) . \( globalArenaName) " ]
281+ let call = " \( translatedDecl. name) ( \( arguments. joined ( separator: " , " ) ) ) "
282+ if translatedDecl. translatedFunctionSignature. resultType. javaType. isVoid {
283+ printer. print ( " \( call) ; " )
284+ } else {
285+ printer. print ( " return \( call) ; " )
286+ }
287+ }
288+ printer. println ( )
289+ }
290+
291+ // Make any function with explicit arena private if we force automatic.
292+ if config. effectiveMemoryManagementMode == . forceAutomatic && translatedSignature. requiresSwiftArena {
293+ modifiers [ 0 ] = " private "
294+ }
295+ if translatedSignature. requiresSwiftArena {
296+ parameters. append ( " SwiftArena swiftArena$ " )
297+ }
270298 printDeclDocumentation ( & printer, decl)
271299 printer. printBraceBlock (
272- " \( annotationsStr) \( modifiersStr ) \( resultType) \( translatedDecl. name) ( \( parametersStr ) ) \( throwsClause) "
300+ " \( annotationsStr) \( modifiers . joined ( separator : " " ) ) \( resultType) \( translatedDecl. name) ( \( parameters . joined ( separator : " , " ) ) ) \( throwsClause) "
273301 ) { printer in
274302 printDowncall ( & printer, decl)
275303 }
0 commit comments