[Commonizer] Demote duplicate dependency libraries to 'warning'
^KT-56729 Verification Pending
This commit is contained in:
committed by
Space Team
parent
7026ca9952
commit
d103f60af8
+20
-6
@@ -7,17 +7,31 @@ package org.jetbrains.kotlin.commonizer.konan
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.commonizer.ModulesProvider
|
import org.jetbrains.kotlin.commonizer.ModulesProvider
|
||||||
import org.jetbrains.kotlin.commonizer.ModulesProvider.ModuleInfo
|
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.SerializedMetadata
|
||||||
import org.jetbrains.kotlin.library.metadata.parseModuleHeader
|
import org.jetbrains.kotlin.library.metadata.parseModuleHeader
|
||||||
import java.io.File
|
import org.jetbrains.kotlin.util.Logger
|
||||||
|
|
||||||
|
internal class DefaultModulesProvider private constructor(
|
||||||
|
libraries: Collection<NativeLibrary>,
|
||||||
|
duplicateLibraryHandler: DuplicateLibraryHandler
|
||||||
|
) : ModulesProvider {
|
||||||
|
|
||||||
internal class DefaultModulesProvider(libraries: Collection<NativeLibrary>) : ModulesProvider {
|
|
||||||
internal class NativeModuleInfo(
|
internal class NativeModuleInfo(
|
||||||
name: String,
|
name: String,
|
||||||
val dependencies: Set<String>,
|
val dependencies: Set<String>,
|
||||||
cInteropAttributes: ModulesProvider.CInteropModuleAttributes?
|
cInteropAttributes: ModulesProvider.CInteropModuleAttributes?
|
||||||
) : ModuleInfo(name, cInteropAttributes)
|
) : 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<String, NativeLibrary>
|
private val libraryMap: Map<String, NativeLibrary>
|
||||||
private val moduleInfoMap: Map<String, NativeModuleInfo>
|
private val moduleInfoMap: Map<String, NativeModuleInfo>
|
||||||
|
|
||||||
@@ -36,7 +50,7 @@ internal class DefaultModulesProvider(libraries: Collection<NativeLibrary>) : Mo
|
|||||||
ModulesProvider.CInteropModuleAttributes(packageFqName, manifestData.exportForwardDeclarations)
|
ModulesProvider.CInteropModuleAttributes(packageFqName, manifestData.exportForwardDeclarations)
|
||||||
} else null
|
} 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)
|
moduleInfoMap[name] = NativeModuleInfo(name, dependencies, cInteropAttributes)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -65,9 +79,9 @@ internal class DefaultModulesProvider(libraries: Collection<NativeLibrary>) : Mo
|
|||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
fun create(librariesToCommonize: NativeLibrariesToCommonize): ModulesProvider =
|
fun create(librariesToCommonize: NativeLibrariesToCommonize): ModulesProvider =
|
||||||
DefaultModulesProvider(librariesToCommonize.libraries)
|
DefaultModulesProvider(librariesToCommonize.libraries, DuplicateLibraryHandler.error)
|
||||||
|
|
||||||
fun create(libraries: Iterable<NativeLibrary>): ModulesProvider =
|
fun forDependencies(libraries: Iterable<NativeLibrary>, logger: Logger): ModulesProvider =
|
||||||
DefaultModulesProvider(libraries.toList())
|
DefaultModulesProvider(libraries.toList(), DuplicateLibraryHandler.warning(logger))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ internal class LibraryCommonizer internal constructor(
|
|||||||
|
|
||||||
private fun createDependenciesProvider(): TargetDependent<ModulesProvider?> {
|
private fun createDependenciesProvider(): TargetDependent<ModulesProvider?> {
|
||||||
return TargetDependent(outputTargets + outputTargets.allLeaves()) { target ->
|
return TargetDependent(outputTargets + outputTargets.allLeaves()) { target ->
|
||||||
DefaultModulesProvider.create(dependencies.getLibraries(target))
|
DefaultModulesProvider.forDependencies(dependencies.getLibraries(target), logger)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user