@@ -56,6 +56,16 @@ interface ObjCExportNamer {
5656 override val objCName : String ,
5757 ) : ObjCExportPropertyName
5858
59+ data class FunctionName (
60+ override val swiftName : String ,
61+ override val objCName : String ,
62+ ) : ObjCExportFunctionName
63+
64+ data class EnumEntryName (
65+ override val swiftName : String ,
66+ override val objCName : String ,
67+ ) : ObjCExportEnumEntryName
68+
5969 interface Configuration {
6070 val topLevelNamePrefix: String
6171 fun getAdditionalPrefix (module : ModuleDescriptor ): String?
@@ -77,13 +87,11 @@ interface ObjCExportNamer {
7787
7888 fun getFileClassName (file : SourceFile ): ClassOrProtocolName
7989 fun getClassOrProtocolName (descriptor : ClassDescriptor ): ClassOrProtocolName
80- fun getSelector (method : FunctionDescriptor ): String
8190 fun getParameterName (parameter : ParameterDescriptor ): String
82- fun getSwiftName (method : FunctionDescriptor ): String
91+ fun getFunctionName (method : FunctionDescriptor ): FunctionName
8392 fun getPropertyName (property : PropertyDescriptor ): PropertyName
8493 fun getObjectInstanceSelector (descriptor : ClassDescriptor ): String
85- fun getEnumEntrySelector (descriptor : ClassDescriptor ): String
86- fun getEnumEntrySwiftName (descriptor : ClassDescriptor ): String
94+ fun getEnumEntryName (descriptor : ClassDescriptor ) : EnumEntryName
8795 fun getEnumStaticMemberSelector (descriptor : CallableMemberDescriptor ): String
8896 fun getTypeParameterName (typeParameterDescriptor : TypeParameterDescriptor ): String
8997
@@ -543,92 +551,98 @@ class ObjCExportNamerImpl(
543551
544552 override fun getParameterName (parameter : ParameterDescriptor ): String = parameter.getObjCName().asString(forSwift = false )
545553
546- override fun getSelector (method : FunctionDescriptor ): String = methodSelectors.getOrPut(method) {
547- assert (mapper.isBaseMethod(method))
554+ override fun getFunctionName (method : FunctionDescriptor ): ObjCExportNamer .FunctionName {
555+ fun swiftName (method : FunctionDescriptor ): String = methodSwiftNames.getOrPut(method) {
556+ assert (mapper.isBaseMethod(method))
548557
549- getPredefined(method, Predefined .anyMethodSelectors )?.let { return it }
558+ getPredefined(method, Predefined .anyMethodSwiftNames )?.let { return it }
550559
551- val parameters = mapper.bridgeMethod(method).valueParametersAssociated(method)
560+ val parameters = mapper.bridgeMethod(method).valueParametersAssociated(method)
552561
553- StringBuilder ().apply {
554- append(method.getMangledName(forSwift = false ))
555-
556- parameters.forEachIndexed { index, (bridge, it) ->
557- val name = when (bridge) {
558- is MethodBridgeValueParameter .Mapped -> when {
559- it is ReceiverParameterDescriptor -> it.getObjCName().asIdentifier(false ) { " " }
560- method is PropertySetterDescriptor -> when (parameters.size) {
561- 1 -> " "
562- else -> " value"
562+ StringBuilder ().apply {
563+ append(method.getMangledName(forSwift = true ))
564+ append(" (" )
565+
566+ parameters@ for ((bridge, it) in parameters) {
567+ val label = when (bridge) {
568+ is MethodBridgeValueParameter .Mapped -> when {
569+ it is ReceiverParameterDescriptor -> it.getObjCName().asIdentifier(true ) { " _" }
570+ method is PropertySetterDescriptor -> when (parameters.size) {
571+ 1 -> " _"
572+ else -> " value"
573+ }
574+ else -> it!! .getObjCName().asIdentifier(true )
563575 }
564- else -> it!! .getObjCName().asIdentifier(false )
576+ MethodBridgeValueParameter .ErrorOutParameter -> continue @parameters
577+ is MethodBridgeValueParameter .SuspendCompletion -> " completionHandler"
565578 }
566- MethodBridgeValueParameter .ErrorOutParameter -> " error"
567- is MethodBridgeValueParameter .SuspendCompletion -> " completionHandler"
568- }
569579
570- if (index == 0 ) {
571- append(
572- when {
573- bridge is MethodBridgeValueParameter .ErrorOutParameter -> " AndReturn"
574- bridge is MethodBridgeValueParameter .SuspendCompletion -> " With"
575- method is ConstructorDescriptor -> " With"
576- else -> " "
577- }
578- )
579- append(name.replaceFirstChar(Char ::uppercaseChar))
580- } else {
581- append(name)
580+ append(label)
581+ append(" :" )
582582 }
583583
584- append(' :' )
585- }
586- }.mangledSequence {
587- if (parameters.isNotEmpty()) {
588- // "foo:" -> "foo_:"
589- insert(lastIndex, ' _' )
590- } else {
591- // "foo" -> "foo_"
592- append(" _" )
584+ append(" )" )
585+ }.mangledSequence {
586+ // "foo(label:)" -> "foo(label_:)"
587+ // "foo()" -> "foo_()"
588+ insert(lastIndex - 1 , ' _' )
593589 }
594590 }
595- }
596591
597- override fun getSwiftName (method : FunctionDescriptor ): String = methodSwiftNames .getOrPut(method) {
598- assert (mapper.isBaseMethod(method))
592+ fun objCName (method : FunctionDescriptor ): String = methodSelectors .getOrPut(method) {
593+ assert (mapper.isBaseMethod(method))
599594
600- getPredefined(method, Predefined .anyMethodSwiftNames )?.let { return it }
595+ getPredefined(method, Predefined .anyMethodSelectors )?.let { return it }
601596
602- val parameters = mapper.bridgeMethod(method).valueParametersAssociated(method)
597+ val parameters = mapper.bridgeMethod(method).valueParametersAssociated(method)
603598
604- StringBuilder ().apply {
605- append(method.getMangledName(forSwift = true ))
606- append(" (" )
607-
608- parameters@ for ((bridge, it) in parameters) {
609- val label = when (bridge) {
610- is MethodBridgeValueParameter .Mapped -> when {
611- it is ReceiverParameterDescriptor -> it.getObjCName().asIdentifier(true ) { " _" }
612- method is PropertySetterDescriptor -> when (parameters.size) {
613- 1 -> " _"
614- else -> " value"
599+ StringBuilder ().apply {
600+ append(method.getMangledName(forSwift = false ))
601+
602+ parameters.forEachIndexed { index, (bridge, it) ->
603+ val name = when (bridge) {
604+ is MethodBridgeValueParameter .Mapped -> when {
605+ it is ReceiverParameterDescriptor -> it.getObjCName().asIdentifier(false ) { " " }
606+ method is PropertySetterDescriptor -> when (parameters.size) {
607+ 1 -> " "
608+ else -> " value"
609+ }
610+ else -> it!! .getObjCName().asIdentifier(false )
615611 }
616- else -> it!! .getObjCName().asIdentifier(true )
612+ MethodBridgeValueParameter .ErrorOutParameter -> " error"
613+ is MethodBridgeValueParameter .SuspendCompletion -> " completionHandler"
617614 }
618- MethodBridgeValueParameter .ErrorOutParameter -> continue @parameters
619- is MethodBridgeValueParameter .SuspendCompletion -> " completionHandler"
620- }
621615
622- append(label)
623- append(" :" )
624- }
616+ if (index == 0 ) {
617+ append(
618+ when {
619+ bridge is MethodBridgeValueParameter .ErrorOutParameter -> " AndReturn"
620+ bridge is MethodBridgeValueParameter .SuspendCompletion -> " With"
621+ method is ConstructorDescriptor -> " With"
622+ else -> " "
623+ }
624+ )
625+ append(name.replaceFirstChar(Char ::uppercaseChar))
626+ } else {
627+ append(name)
628+ }
625629
626- append(" )" )
627- }.mangledSequence {
628- // "foo(label:)" -> "foo(label_:)"
629- // "foo()" -> "foo_()"
630- insert(lastIndex - 1 , ' _' )
630+ append(' :' )
631+ }
632+ }.mangledSequence {
633+ if (parameters.isNotEmpty()) {
634+ // "foo:" -> "foo_:"
635+ insert(lastIndex, ' _' )
636+ } else {
637+ // "foo" -> "foo_"
638+ append(" _" )
639+ }
640+ }
631641 }
642+ return ObjCExportNamer .FunctionName (
643+ swiftName = swiftName(method),
644+ objCName = objCName(method)
645+ )
632646 }
633647
634648 private fun <T : Any > getPredefined (method : FunctionDescriptor , predefinedForAny : Map <Name , T >): T ? {
@@ -677,20 +691,18 @@ class ObjCExportNamerImpl(
677691 return StringBuilder (name).mangledBySuffixUnderscores()
678692 }
679693
680- override fun getEnumEntrySelector (descriptor : ClassDescriptor ): String {
694+ override fun getEnumEntryName (descriptor : ClassDescriptor ): ObjCExportNamer . EnumEntryName {
681695 assert (descriptor.kind == ClassKind .ENUM_ENTRY )
682696
683- return enumClassSelectors.getOrPut(descriptor) {
684- descriptor.getEnumEntryName( false )
685- }
686- }
687-
688- override fun getEnumEntrySwiftName ( descriptor : ClassDescriptor ): String {
689- assert (descriptor.kind == ClassKind . ENUM_ENTRY )
697+ return ObjCExportNamer . EnumEntryName (
698+ swiftName = enumClassSwiftNames.getOrPut(descriptor) {
699+ descriptor.getEnumEntryName( true )
700+ },
701+ objCName = enumClassSwiftNames.getOrPut(descriptor) {
702+ descriptor.getEnumEntryName( false )
703+ }
690704
691- return enumClassSwiftNames.getOrPut(descriptor) {
692- descriptor.getEnumEntryName(true )
693- }
705+ )
694706 }
695707
696708 override fun getEnumStaticMemberSelector (descriptor : CallableMemberDescriptor ): String {
0 commit comments