From d103f60af882d7c06d2fb1f37f88552e26bff928 Mon Sep 17 00:00:00 2001 From: Sebastian Sellmair Date: Fri, 17 Feb 2023 15:10:51 +0100 Subject: [PATCH] [Commonizer] Demote duplicate dependency libraries to 'warning' ^KT-56729 Verification Pending --- .../konan/DefaultModulesProvider.kt | 26 ++++++++++++++----- .../commonizer/konan/LibraryCommonizer.kt | 2 +- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/native/commonizer/src/org/jetbrains/kotlin/commonizer/konan/DefaultModulesProvider.kt b/native/commonizer/src/org/jetbrains/kotlin/commonizer/konan/DefaultModulesProvider.kt index 5301ef34f01..b40d72e8a4b 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/commonizer/konan/DefaultModulesProvider.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/commonizer/konan/DefaultModulesProvider.kt @@ -7,17 +7,31 @@ package org.jetbrains.kotlin.commonizer.konan import org.jetbrains.kotlin.commonizer.ModulesProvider import org.jetbrains.kotlin.commonizer.ModulesProvider.ModuleInfo +import org.jetbrains.kotlin.commonizer.konan.DefaultModulesProvider.DuplicateLibraryHandler import org.jetbrains.kotlin.library.SerializedMetadata import org.jetbrains.kotlin.library.metadata.parseModuleHeader -import java.io.File +import org.jetbrains.kotlin.util.Logger + +internal class DefaultModulesProvider private constructor( + libraries: Collection, + duplicateLibraryHandler: DuplicateLibraryHandler +) : ModulesProvider { -internal class DefaultModulesProvider(libraries: Collection) : ModulesProvider { internal class NativeModuleInfo( name: String, val dependencies: Set, cInteropAttributes: ModulesProvider.CInteropModuleAttributes? ) : ModuleInfo(name, cInteropAttributes) + private fun interface DuplicateLibraryHandler { + fun onDuplicateLibrary(name: String) + + companion object { + val error = DuplicateLibraryHandler { name -> error("Duplicated libraries: $name") } + fun warning(logger: Logger) = DuplicateLibraryHandler { name -> logger.warning("Duplicated libraries: $name") } + } + } + private val libraryMap: Map private val moduleInfoMap: Map @@ -36,7 +50,7 @@ internal class DefaultModulesProvider(libraries: Collection) : Mo ModulesProvider.CInteropModuleAttributes(packageFqName, manifestData.exportForwardDeclarations) } else null - libraryMap.put(name, library)?.let { error("Duplicated libraries: $name") } + libraryMap.put(name, library)?.let { duplicateLibraryHandler.onDuplicateLibrary(name) } moduleInfoMap[name] = NativeModuleInfo(name, dependencies, cInteropAttributes) } @@ -65,9 +79,9 @@ internal class DefaultModulesProvider(libraries: Collection) : Mo companion object { fun create(librariesToCommonize: NativeLibrariesToCommonize): ModulesProvider = - DefaultModulesProvider(librariesToCommonize.libraries) + DefaultModulesProvider(librariesToCommonize.libraries, DuplicateLibraryHandler.error) - fun create(libraries: Iterable): ModulesProvider = - DefaultModulesProvider(libraries.toList()) + fun forDependencies(libraries: Iterable, logger: Logger): ModulesProvider = + DefaultModulesProvider(libraries.toList(), DuplicateLibraryHandler.warning(logger)) } } diff --git a/native/commonizer/src/org/jetbrains/kotlin/commonizer/konan/LibraryCommonizer.kt b/native/commonizer/src/org/jetbrains/kotlin/commonizer/konan/LibraryCommonizer.kt index 5375b8c28e9..e85cbf4d02f 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/commonizer/konan/LibraryCommonizer.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/commonizer/konan/LibraryCommonizer.kt @@ -74,7 +74,7 @@ internal class LibraryCommonizer internal constructor( private fun createDependenciesProvider(): TargetDependent { return TargetDependent(outputTargets + outputTargets.allLeaves()) { target -> - DefaultModulesProvider.create(dependencies.getLibraries(target)) + DefaultModulesProvider.forDependencies(dependencies.getLibraries(target), logger) } }