From b5e81a80083eb1a611fd617653b7bd5d0a72450e Mon Sep 17 00:00:00 2001 From: Svyatoslav Scherbina Date: Thu, 30 Nov 2017 17:46:29 +0300 Subject: [PATCH] Improve package class naming for `-produce framework` Don't include common package to the name --- .../backend/konan/objcexport/ObjCExport.kt | 2 +- .../backend/konan/objcexport/ObjCExportNamer.kt | 17 +++++++++++------ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/objcexport/ObjCExport.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/objcexport/ObjCExport.kt index 91717bb9173..b825e744663 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/objcexport/ObjCExport.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/objcexport/ObjCExport.kt @@ -157,7 +157,7 @@ internal class ObjCExport(val context: Context) { } } -private fun ModuleDescriptor.guessMainPackage(): FqName { +internal fun ModuleDescriptor.guessMainPackage(): FqName { val allPackages = this.getPackageFragments() // Includes also all parent packages, e.g. the root one. val nonEmptyPackages = allPackages diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/objcexport/ObjCExportNamer.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/objcexport/ObjCExportNamer.kt index 2c4d96360ef..7d1baf44e64 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/objcexport/ObjCExportNamer.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/objcexport/ObjCExportNamer.kt @@ -30,6 +30,9 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.parentsWithSelf internal class ObjCExportNamer(val context: Context, val mapper: ObjCExportMapper) { val kotlinAnyName = "KotlinBase" + private val commonPackageSegments = context.moduleDescriptor.guessMainPackage().pathSegments() + private val topLevelNamePrefix = context.moduleDescriptor.namePrefix + private val methodSelectors = object : Mapping() { override fun conflict(first: FunctionDescriptor, second: FunctionDescriptor): Boolean = !mapper.canHaveSameSelector(first, second) @@ -56,11 +59,13 @@ internal class ObjCExportNamer(val context: Context, val mapper: ObjCExportMappe fun getPackageName(fqName: FqName): String = classNames.getOrPut(fqName) { StringBuilder().apply { - append(context.moduleDescriptor.namePrefix) - if (fqName.isRoot) { - append("TopLevel") - } else { - append(fqName.pathSegments().joinToString("") { it.asString().capitalize() }) + append(topLevelNamePrefix) + fqName.pathSegments().forEachIndexed { index, segment -> + if (index < commonPackageSegments.size) { + assert(commonPackageSegments[index] == segment) + } else { + append(segment.asString().capitalize()) + } } }.mangledSequence { append("_") } } @@ -70,7 +75,7 @@ internal class ObjCExportNamer(val context: Context, val mapper: ObjCExportMappe return mapping.getOrPut(descriptor) { StringBuilder().apply { - append(context.moduleDescriptor.namePrefix) + append(topLevelNamePrefix) if (descriptor.module != context.moduleDescriptor) { append(descriptor.module.namePrefix)