@@ -1425,7 +1425,7 @@ struct ProtocolCodegen {
14251425 for method in proto. methods {
14261426 let builder = try ImportTS . CallJSEmission (
14271427 moduleName: moduleName,
1428- abiName: " _extern_ \( method. name ) " ,
1428+ abiName: method. abiName ,
14291429 effects: method. effects,
14301430 returnType: method. returnType,
14311431 context: . exportSwift
@@ -1450,7 +1450,7 @@ struct ProtocolCodegen {
14501450 printer: externDeclPrinter,
14511451 moduleName: moduleName,
14521452 abiName: method. abiName,
1453- functionName: " _extern_ \( method. name ) " ,
1453+ functionName: method. abiName ,
14541454 abiParameters: builder. abiParameterSignatures,
14551455 returnType: builder. abiReturnType
14561456 )
@@ -1478,32 +1478,34 @@ struct ProtocolCodegen {
14781478 externDecls. append ( contentsOf: propertyExternDecls)
14791479 }
14801480
1481- let structDeclPrinter = CodeFragmentPrinter ( )
1482- structDeclPrinter. write ( " struct \( wrapperName) : \( protocolName) , _BridgedSwiftProtocolWrapper { " )
1483- structDeclPrinter. indent {
1484- structDeclPrinter. write ( " let jsObject: JSObject " )
1485- structDeclPrinter. nextLine ( )
1486-
1487- for methodDecl in methodDecls {
1488- structDeclPrinter. write ( lines: methodDecl. lines)
1489- structDeclPrinter. nextLine ( )
1490- }
1491-
1492- for decl in propertyDecls {
1493- structDeclPrinter. write ( lines: decl. lines)
1494- structDeclPrinter. nextLine ( )
1481+ var decls : [ DeclSyntax ] = [ ]
1482+ if !methodDecls. isEmpty || !propertyDecls. isEmpty {
1483+ let extensionPrinter = CodeFragmentPrinter ( )
1484+ extensionPrinter. write ( " extension \( protocolName) where Self: _BridgedSwiftProtocolWrapper { " )
1485+ extensionPrinter. indent {
1486+ var first = true
1487+ for decl in methodDecls + propertyDecls {
1488+ if !first { extensionPrinter. nextLine ( ) }
1489+ first = false
1490+ extensionPrinter. write ( lines: decl. lines)
1491+ }
14951492 }
1496- structDeclPrinter. write (
1497- multilineString: """
1498- static func bridgeJSLiftParameter(_ value: Int32) -> Self {
1499- return \( wrapperName) (jsObject: JSObject(id: UInt32(bitPattern: value)))
1500- }
1501- """
1502- )
1493+ extensionPrinter. write ( " } " )
1494+ decls. append ( " \( raw: extensionPrinter. lines. joined ( separator: " \n " ) ) " )
15031495 }
1504- structDeclPrinter. write ( " } " )
15051496
1506- return [ " \( raw: structDeclPrinter. lines. joined ( separator: " \n " ) ) " ] + externDecls
1497+ decls. append (
1498+ """
1499+ struct \( raw: wrapperName) : \( raw: protocolName) , _BridgedSwiftProtocolWrapper {
1500+ let jsObject: JSObject
1501+
1502+ static func bridgeJSLiftParameter(_ value: Int32) -> Self {
1503+ return \( raw: wrapperName) (jsObject: JSObject(id: UInt32(bitPattern: value)))
1504+ }
1505+ }
1506+ """
1507+ )
1508+ return decls + externDecls
15071509 }
15081510
15091511 private func renderProtocolProperty(
0 commit comments