[Commonizer] Minor. Renamings
- Absent* -> Missing* - Target -> CommonizerTarget - Result -> CommonizerResult - Parameters -> CommonizerParameters
This commit is contained in:
+2
-2
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.descriptors.commonizer
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.stats.StatsCollector
|
import org.jetbrains.kotlin.descriptors.commonizer.stats.StatsCollector
|
||||||
|
|
||||||
class Parameters(
|
class CommonizerParameters(
|
||||||
val statsCollector: StatsCollector? = null,
|
val statsCollector: StatsCollector? = null,
|
||||||
val progressLogger: ((String) -> Unit)? = null
|
val progressLogger: ((String) -> Unit)? = null
|
||||||
) {
|
) {
|
||||||
@@ -24,7 +24,7 @@ class Parameters(
|
|||||||
field = value
|
field = value
|
||||||
}
|
}
|
||||||
|
|
||||||
fun addTarget(targetProvider: TargetProvider): Parameters {
|
fun addTarget(targetProvider: TargetProvider): CommonizerParameters {
|
||||||
require(targetProvider.target !in _targetProviders) { "Target ${targetProvider.target} is already added" }
|
require(targetProvider.target !in _targetProviders) { "Target ${targetProvider.target} is already added" }
|
||||||
_targetProviders[targetProvider.target] = targetProvider
|
_targetProviders[targetProvider.target] = targetProvider
|
||||||
|
|
||||||
+6
-6
@@ -8,18 +8,18 @@ package org.jetbrains.kotlin.descriptors.commonizer
|
|||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
sealed class Result {
|
sealed class CommonizerResult {
|
||||||
object NothingToCommonize : Result()
|
object NothingToDo : CommonizerResult()
|
||||||
|
|
||||||
class Commonized(
|
class Done(
|
||||||
val modulesByTargets: Map<Target, Collection<ModuleResult>>
|
val modulesByTargets: Map<CommonizerTarget, Collection<ModuleResult>>
|
||||||
) : Result() {
|
) : CommonizerResult() {
|
||||||
val sharedTarget: SharedTarget by lazy { modulesByTargets.keys.filterIsInstance<SharedTarget>().single() }
|
val sharedTarget: SharedTarget by lazy { modulesByTargets.keys.filterIsInstance<SharedTarget>().single() }
|
||||||
val leafTargets: Set<LeafTarget> by lazy { modulesByTargets.keys.filterIsInstance<LeafTarget>().toSet() }
|
val leafTargets: Set<LeafTarget> by lazy { modulesByTargets.keys.filterIsInstance<LeafTarget>().toSet() }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sealed class ModuleResult {
|
sealed class ModuleResult {
|
||||||
class Absent(val originalLocation: File) : ModuleResult()
|
class Missing(val originalLocation: File) : ModuleResult()
|
||||||
class Commonized(val module: ModuleDescriptor) : ModuleResult()
|
class Commonized(val module: ModuleDescriptor) : ModuleResult()
|
||||||
}
|
}
|
||||||
+3
-3
@@ -9,11 +9,11 @@ import org.jetbrains.kotlin.konan.target.KonanTarget
|
|||||||
|
|
||||||
// N.B. TargetPlatform/SimplePlatform are non exhaustive enough to address both target platforms such as
|
// N.B. TargetPlatform/SimplePlatform are non exhaustive enough to address both target platforms such as
|
||||||
// JVM, JS and concrete Kotlin/Native targets, e.g. macos_x64, ios_x64, linux_x64.
|
// JVM, JS and concrete Kotlin/Native targets, e.g. macos_x64, ios_x64, linux_x64.
|
||||||
sealed class Target
|
sealed class CommonizerTarget
|
||||||
|
|
||||||
data class LeafTarget(val name: String, val konanTarget: KonanTarget? = null) : Target()
|
data class LeafTarget(val name: String, val konanTarget: KonanTarget? = null) : CommonizerTarget()
|
||||||
|
|
||||||
data class SharedTarget(val targets: Set<Target>) : Target() {
|
data class SharedTarget(val targets: Set<CommonizerTarget>) : CommonizerTarget() {
|
||||||
init {
|
init {
|
||||||
require(targets.isNotEmpty())
|
require(targets.isNotEmpty())
|
||||||
}
|
}
|
||||||
+4
-3
@@ -6,7 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.descriptors.commonizer.builder
|
package org.jetbrains.kotlin.descriptors.commonizer.builder
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.Target
|
import org.jetbrains.kotlin.descriptors.commonizer.CommonizerTarget
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.builder.CommonizedMemberScope.Companion.plusAssign
|
import org.jetbrains.kotlin.descriptors.commonizer.builder.CommonizedMemberScope.Companion.plusAssign
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.builder.CommonizedPackageFragmentProvider.Companion.plusAssign
|
import org.jetbrains.kotlin.descriptors.commonizer.builder.CommonizedPackageFragmentProvider.Companion.plusAssign
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.*
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.*
|
||||||
@@ -27,8 +27,9 @@ internal class DeclarationsBuilderVisitor1(
|
|||||||
check(data.isEmpty()) // root node may not have containing declarations
|
check(data.isEmpty()) // root node may not have containing declarations
|
||||||
check(components.targetComponents.size == node.dimension)
|
check(components.targetComponents.size == node.dimension)
|
||||||
|
|
||||||
val allTargets: List<Target> = (node.targetDeclarations + node.commonDeclaration()).map { it!!.target }
|
val allTargets: List<CommonizerTarget> = (node.targetDeclarations + node.commonDeclaration()).map { it!!.target }
|
||||||
val modulesByTargets: Map<Target, MutableList<ModuleDescriptorImpl>> = allTargets.associateWithTo(HashMap()) { mutableListOf() }
|
val modulesByTargets: Map<CommonizerTarget, MutableList<ModuleDescriptorImpl>> =
|
||||||
|
allTargets.associateWithTo(HashMap()) { mutableListOf() }
|
||||||
|
|
||||||
// collect module descriptors:
|
// collect module descriptors:
|
||||||
for (moduleNode in node.modules.values) {
|
for (moduleNode in node.modules.values) {
|
||||||
|
|||||||
+4
-4
@@ -9,8 +9,8 @@ import gnu.trove.THashMap
|
|||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
import org.jetbrains.kotlin.builtins.StandardNames
|
import org.jetbrains.kotlin.builtins.StandardNames
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.Parameters
|
import org.jetbrains.kotlin.descriptors.commonizer.CommonizerParameters
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.Target
|
import org.jetbrains.kotlin.descriptors.commonizer.CommonizerTarget
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.CirNode.Companion.dimension
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.CirNode.Companion.dimension
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.CirNode.Companion.indexOfCommon
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.CirNode.Companion.indexOfCommon
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.CirRootNode
|
import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.CirRootNode
|
||||||
@@ -132,7 +132,7 @@ class GlobalDeclarationsBuilderComponents(
|
|||||||
|
|
||||||
class TargetDeclarationsBuilderComponents(
|
class TargetDeclarationsBuilderComponents(
|
||||||
val storageManager: StorageManager,
|
val storageManager: StorageManager,
|
||||||
val target: Target,
|
val target: CommonizerTarget,
|
||||||
val builtIns: KotlinBuiltIns,
|
val builtIns: KotlinBuiltIns,
|
||||||
val lazyClassifierLookupTable: NotNullLazyValue<LazyClassifierLookupTable>,
|
val lazyClassifierLookupTable: NotNullLazyValue<LazyClassifierLookupTable>,
|
||||||
val index: Int,
|
val index: Int,
|
||||||
@@ -217,7 +217,7 @@ class LazyClassifierLookupTable(lazyModules: Map<String, List<ModuleDescriptor>>
|
|||||||
|
|
||||||
fun CirRootNode.createGlobalBuilderComponents(
|
fun CirRootNode.createGlobalBuilderComponents(
|
||||||
storageManager: StorageManager,
|
storageManager: StorageManager,
|
||||||
parameters: Parameters
|
parameters: CommonizerParameters
|
||||||
): GlobalDeclarationsBuilderComponents {
|
): GlobalDeclarationsBuilderComponents {
|
||||||
val cache = DeclarationsBuilderCache(dimension)
|
val cache = DeclarationsBuilderCache(dimension)
|
||||||
|
|
||||||
|
|||||||
@@ -6,10 +6,10 @@
|
|||||||
package org.jetbrains.kotlin.descriptors.commonizer.cir
|
package org.jetbrains.kotlin.descriptors.commonizer.cir
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.BuiltInsProvider
|
import org.jetbrains.kotlin.descriptors.commonizer.BuiltInsProvider
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.Target
|
import org.jetbrains.kotlin.descriptors.commonizer.CommonizerTarget
|
||||||
|
|
||||||
interface CirRoot : CirDeclaration {
|
interface CirRoot : CirDeclaration {
|
||||||
val target: Target
|
val target: CommonizerTarget
|
||||||
val builtInsClass: String
|
val builtInsClass: String
|
||||||
val builtInsProvider: BuiltInsProvider
|
val builtInsProvider: BuiltInsProvider
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -8,13 +8,13 @@ package org.jetbrains.kotlin.descriptors.commonizer.cir.factory
|
|||||||
import org.jetbrains.kotlin.builtins.konan.KonanBuiltIns
|
import org.jetbrains.kotlin.builtins.konan.KonanBuiltIns
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.BuiltInsProvider
|
import org.jetbrains.kotlin.descriptors.commonizer.BuiltInsProvider
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.LeafTarget
|
import org.jetbrains.kotlin.descriptors.commonizer.LeafTarget
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.Target
|
import org.jetbrains.kotlin.descriptors.commonizer.CommonizerTarget
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirRoot
|
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirRoot
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.cir.impl.CirRootImpl
|
import org.jetbrains.kotlin.descriptors.commonizer.cir.impl.CirRootImpl
|
||||||
|
|
||||||
object CirRootFactory {
|
object CirRootFactory {
|
||||||
fun create(
|
fun create(
|
||||||
target: Target,
|
target: CommonizerTarget,
|
||||||
builtInsClass: String,
|
builtInsClass: String,
|
||||||
builtInsProvider: BuiltInsProvider
|
builtInsProvider: BuiltInsProvider
|
||||||
): CirRoot {
|
): CirRoot {
|
||||||
|
|||||||
+2
-2
@@ -6,11 +6,11 @@
|
|||||||
package org.jetbrains.kotlin.descriptors.commonizer.cir.impl
|
package org.jetbrains.kotlin.descriptors.commonizer.cir.impl
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.BuiltInsProvider
|
import org.jetbrains.kotlin.descriptors.commonizer.BuiltInsProvider
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.Target
|
import org.jetbrains.kotlin.descriptors.commonizer.CommonizerTarget
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirRoot
|
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirRoot
|
||||||
|
|
||||||
data class CirRootImpl(
|
data class CirRootImpl(
|
||||||
override val target: Target,
|
override val target: CommonizerTarget,
|
||||||
override val builtInsClass: String,
|
override val builtInsClass: String,
|
||||||
override val builtInsProvider: BuiltInsProvider
|
override val builtInsProvider: BuiltInsProvider
|
||||||
) : CirRoot
|
) : CirRoot
|
||||||
|
|||||||
@@ -14,9 +14,9 @@ import org.jetbrains.kotlin.descriptors.commonizer.mergedtree.CirTreeMerger.CirT
|
|||||||
import org.jetbrains.kotlin.storage.LockBasedStorageManager
|
import org.jetbrains.kotlin.storage.LockBasedStorageManager
|
||||||
import org.jetbrains.kotlin.storage.StorageManager
|
import org.jetbrains.kotlin.storage.StorageManager
|
||||||
|
|
||||||
fun runCommonization(parameters: Parameters): Result {
|
fun runCommonization(parameters: CommonizerParameters): CommonizerResult {
|
||||||
if (!parameters.hasAnythingToCommonize())
|
if (!parameters.hasAnythingToCommonize())
|
||||||
return Result.NothingToCommonize
|
return CommonizerResult.NothingToDo
|
||||||
|
|
||||||
val storageManager = LockBasedStorageManager("Declaration descriptors commonization")
|
val storageManager = LockBasedStorageManager("Declaration descriptors commonization")
|
||||||
|
|
||||||
@@ -28,26 +28,26 @@ fun runCommonization(parameters: Parameters): Result {
|
|||||||
mergedTree.accept(DeclarationsBuilderVisitor1(components), emptyList())
|
mergedTree.accept(DeclarationsBuilderVisitor1(components), emptyList())
|
||||||
mergedTree.accept(DeclarationsBuilderVisitor2(components), emptyList())
|
mergedTree.accept(DeclarationsBuilderVisitor2(components), emptyList())
|
||||||
|
|
||||||
val modulesByTargets = LinkedHashMap<Target, Collection<ModuleResult>>() // use linked hash map to preserve order
|
val modulesByTargets = LinkedHashMap<CommonizerTarget, Collection<ModuleResult>>() // use linked hash map to preserve order
|
||||||
components.targetComponents.forEach { component ->
|
components.targetComponents.forEach { component ->
|
||||||
val target = component.target
|
val target = component.target
|
||||||
check(target !in modulesByTargets)
|
check(target !in modulesByTargets)
|
||||||
|
|
||||||
val commonizedModules: List<ModuleResult.Commonized> = components.cache.getAllModules(component.index).map(ModuleResult::Commonized)
|
val commonizedModules: List<ModuleResult.Commonized> = components.cache.getAllModules(component.index).map(ModuleResult::Commonized)
|
||||||
|
|
||||||
val absentModules: List<ModuleResult.Absent> = if (target is LeafTarget)
|
val missingModules: List<ModuleResult.Missing> = if (target is LeafTarget)
|
||||||
mergeResult.absentModuleInfos.getValue(target).map { ModuleResult.Absent(it.originalLocation) }
|
mergeResult.missingModuleInfos.getValue(target).map { ModuleResult.Missing(it.originalLocation) }
|
||||||
else emptyList()
|
else emptyList()
|
||||||
|
|
||||||
modulesByTargets[target] = commonizedModules + absentModules
|
modulesByTargets[target] = commonizedModules + missingModules
|
||||||
}
|
}
|
||||||
|
|
||||||
parameters.progressLogger?.invoke("Prepared new descriptors")
|
parameters.progressLogger?.invoke("Prepared new descriptors")
|
||||||
|
|
||||||
return Result.Commonized(modulesByTargets)
|
return CommonizerResult.Done(modulesByTargets)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun mergeAndCommonize(storageManager: StorageManager, parameters: Parameters): CirTreeMergeResult {
|
private fun mergeAndCommonize(storageManager: StorageManager, parameters: CommonizerParameters): CirTreeMergeResult {
|
||||||
// build merged tree:
|
// build merged tree:
|
||||||
val classifiers = CirKnownClassifiers(
|
val classifiers = CirKnownClassifiers(
|
||||||
commonized = CirCommonizedClassifiers.default(),
|
commonized = CirCommonizedClassifiers.default(),
|
||||||
|
|||||||
+15
-15
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.builtins.konan.KonanBuiltIns
|
|||||||
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
|
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
|
||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.*
|
import org.jetbrains.kotlin.descriptors.commonizer.*
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.Target
|
import org.jetbrains.kotlin.descriptors.commonizer.CommonizerTarget
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.konan.NativeDistributionCommonizer.StatsType.*
|
import org.jetbrains.kotlin.descriptors.commonizer.konan.NativeDistributionCommonizer.StatsType.*
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.stats.AggregatedStatsCollector
|
import org.jetbrains.kotlin.descriptors.commonizer.stats.AggregatedStatsCollector
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.stats.FileStatsOutput
|
import org.jetbrains.kotlin.descriptors.commonizer.stats.FileStatsOutput
|
||||||
@@ -136,14 +136,14 @@ class NativeDistributionCommonizer(
|
|||||||
return library
|
return library
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun commonize(allLibraries: AllNativeLibraries): Result {
|
private fun commonize(allLibraries: AllNativeLibraries): CommonizerResult {
|
||||||
val statsCollector = when (statsType) {
|
val statsCollector = when (statsType) {
|
||||||
RAW -> RawStatsCollector(targets, FileStatsOutput(destination, "raw"))
|
RAW -> RawStatsCollector(targets, FileStatsOutput(destination, "raw"))
|
||||||
AGGREGATED -> AggregatedStatsCollector(targets, FileStatsOutput(destination, "aggregated"))
|
AGGREGATED -> AggregatedStatsCollector(targets, FileStatsOutput(destination, "aggregated"))
|
||||||
NONE -> null
|
NONE -> null
|
||||||
}
|
}
|
||||||
statsCollector.use {
|
statsCollector.use {
|
||||||
val parameters = Parameters(statsCollector, ::logProgress).apply {
|
val parameters = CommonizerParameters(statsCollector, ::logProgress).apply {
|
||||||
val storageManager = LockBasedStorageManager("Commonized modules")
|
val storageManager = LockBasedStorageManager("Commonized modules")
|
||||||
|
|
||||||
val stdlibProvider = NativeDistributionStdlibProvider(storageManager, allLibraries.stdlib)
|
val stdlibProvider = NativeDistributionStdlibProvider(storageManager, allLibraries.stdlib)
|
||||||
@@ -170,13 +170,13 @@ class NativeDistributionCommonizer(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun saveModules(originalLibraries: AllNativeLibraries, result: Result) {
|
private fun saveModules(originalLibraries: AllNativeLibraries, result: CommonizerResult) {
|
||||||
// optimization: stdlib and endorsed libraries effectively remain the same across all Kotlin/Native targets,
|
// optimization: stdlib and endorsed libraries effectively remain the same across all Kotlin/Native targets,
|
||||||
// so they can be just copied to the new destination without running serializer
|
// so they can be just copied to the new destination without running serializer
|
||||||
copyCommonStandardLibraries()
|
copyCommonStandardLibraries()
|
||||||
|
|
||||||
when (result) {
|
when (result) {
|
||||||
is Result.NothingToCommonize -> {
|
is CommonizerResult.NothingToDo -> {
|
||||||
// It may happen that all targets to be commonized (or at least all but one target) miss platform libraries.
|
// It may happen that all targets to be commonized (or at least all but one target) miss platform libraries.
|
||||||
// In such case commonizer will do nothing and return a special result value 'NothingToCommonize'.
|
// In such case commonizer will do nothing and return a special result value 'NothingToCommonize'.
|
||||||
// So, let's just copy platform libraries from the target where they are to the new destination.
|
// So, let's just copy platform libraries from the target where they are to the new destination.
|
||||||
@@ -185,7 +185,7 @@ class NativeDistributionCommonizer(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
is Result.Commonized -> {
|
is CommonizerResult.Done -> {
|
||||||
val serializer = KlibMetadataMonolithicSerializer(
|
val serializer = KlibMetadataMonolithicSerializer(
|
||||||
languageVersionSettings = LanguageVersionSettingsImpl.DEFAULT,
|
languageVersionSettings = LanguageVersionSettingsImpl.DEFAULT,
|
||||||
metadataVersion = KlibMetadataVersion.INSTANCE,
|
metadataVersion = KlibMetadataVersion.INSTANCE,
|
||||||
@@ -207,8 +207,8 @@ class NativeDistributionCommonizer(
|
|||||||
targetsToSerialize.forEach { target ->
|
targetsToSerialize.forEach { target ->
|
||||||
val moduleResults: Collection<ModuleResult> = result.modulesByTargets.getValue(target)
|
val moduleResults: Collection<ModuleResult> = result.modulesByTargets.getValue(target)
|
||||||
val newModules: Collection<ModuleDescriptor> = moduleResults.mapNotNull { (it as? ModuleResult.Commonized)?.module }
|
val newModules: Collection<ModuleDescriptor> = moduleResults.mapNotNull { (it as? ModuleResult.Commonized)?.module }
|
||||||
val absentModuleLocations: List<File> =
|
val missingModuleLocations: List<File> =
|
||||||
moduleResults.mapNotNull { (it as? ModuleResult.Absent)?.originalLocation }
|
moduleResults.mapNotNull { (it as? ModuleResult.Missing)?.originalLocation }
|
||||||
|
|
||||||
val manifestProvider: NativeManifestDataProvider
|
val manifestProvider: NativeManifestDataProvider
|
||||||
val starredTarget: String?
|
val starredTarget: String?
|
||||||
@@ -224,7 +224,7 @@ class NativeDistributionCommonizer(
|
|||||||
}
|
}
|
||||||
|
|
||||||
val targetName = leafTargetNames.joinToString { if (it == starredTarget) "$it(*)" else it }
|
val targetName = leafTargetNames.joinToString { if (it == starredTarget) "$it(*)" else it }
|
||||||
serializeTarget(target, targetName, newModules, absentModuleLocations, manifestProvider, serializer)
|
serializeTarget(target, targetName, newModules, missingModuleLocations, manifestProvider, serializer)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -266,10 +266,10 @@ class NativeDistributionCommonizer(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun serializeTarget(
|
private fun serializeTarget(
|
||||||
target: Target,
|
target: CommonizerTarget,
|
||||||
targetName: String,
|
targetName: String,
|
||||||
newModules: Collection<ModuleDescriptor>,
|
newModules: Collection<ModuleDescriptor>,
|
||||||
absentModuleLocations: List<File>,
|
missingModuleLocations: List<File>,
|
||||||
manifestProvider: NativeManifestDataProvider,
|
manifestProvider: NativeManifestDataProvider,
|
||||||
serializer: KlibMetadataMonolithicSerializer
|
serializer: KlibMetadataMonolithicSerializer
|
||||||
) {
|
) {
|
||||||
@@ -291,9 +291,9 @@ class NativeDistributionCommonizer(
|
|||||||
writeLibrary(metadata, manifestData, libraryDestination)
|
writeLibrary(metadata, manifestData, libraryDestination)
|
||||||
}
|
}
|
||||||
|
|
||||||
for (absentModuleLocation in absentModuleLocations) {
|
for (missingModuleLocation in missingModuleLocations) {
|
||||||
val libraryName = absentModuleLocation.name
|
val libraryName = missingModuleLocation.name
|
||||||
absentModuleLocation.copyRecursively(librariesDestination.resolve(libraryName))
|
missingModuleLocation.copyRecursively(librariesDestination.resolve(libraryName))
|
||||||
}
|
}
|
||||||
|
|
||||||
logProgress("Written libraries for [$targetName]")
|
logProgress("Written libraries for [$targetName]")
|
||||||
@@ -323,7 +323,7 @@ class NativeDistributionCommonizer(
|
|||||||
.resolve(KONAN_DISTRIBUTION_PLATFORM_LIBS_DIR)
|
.resolve(KONAN_DISTRIBUTION_PLATFORM_LIBS_DIR)
|
||||||
.resolve(name)
|
.resolve(name)
|
||||||
|
|
||||||
private val Target.librariesDestination: File
|
private val CommonizerTarget.librariesDestination: File
|
||||||
get() = when (this) {
|
get() = when (this) {
|
||||||
is LeafTarget -> destination.resolve(KONAN_DISTRIBUTION_PLATFORM_LIBS_DIR).resolve(name)
|
is LeafTarget -> destination.resolve(KONAN_DISTRIBUTION_PLATFORM_LIBS_DIR).resolve(name)
|
||||||
is SharedTarget -> destination.resolve(KONAN_DISTRIBUTION_COMMON_LIBS_DIR)
|
is SharedTarget -> destination.resolve(KONAN_DISTRIBUTION_COMMON_LIBS_DIR)
|
||||||
|
|||||||
+7
-7
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.descriptors.commonizer.mergedtree
|
|||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.LeafTarget
|
import org.jetbrains.kotlin.descriptors.commonizer.LeafTarget
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.ModulesProvider.ModuleInfo
|
import org.jetbrains.kotlin.descriptors.commonizer.ModulesProvider.ModuleInfo
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.Parameters
|
import org.jetbrains.kotlin.descriptors.commonizer.CommonizerParameters
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.TargetProvider
|
import org.jetbrains.kotlin.descriptors.commonizer.TargetProvider
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirClass
|
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirClass
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.cir.factory.*
|
import org.jetbrains.kotlin.descriptors.commonizer.cir.factory.*
|
||||||
@@ -49,11 +49,11 @@ import org.jetbrains.kotlin.storage.StorageManager
|
|||||||
class CirTreeMerger(
|
class CirTreeMerger(
|
||||||
private val storageManager: StorageManager,
|
private val storageManager: StorageManager,
|
||||||
private val classifiers: CirKnownClassifiers,
|
private val classifiers: CirKnownClassifiers,
|
||||||
private val parameters: Parameters
|
private val parameters: CommonizerParameters
|
||||||
) {
|
) {
|
||||||
class CirTreeMergeResult(
|
class CirTreeMergeResult(
|
||||||
val root: CirRootNode,
|
val root: CirRootNode,
|
||||||
val absentModuleInfos: Map<LeafTarget, Collection<ModuleInfo>>
|
val missingModuleInfos: Map<LeafTarget, Collection<ModuleInfo>>
|
||||||
)
|
)
|
||||||
|
|
||||||
private val size = parameters.targetProviders.size
|
private val size = parameters.targetProviders.size
|
||||||
@@ -83,15 +83,15 @@ class CirTreeMerger(
|
|||||||
System.gc()
|
System.gc()
|
||||||
}
|
}
|
||||||
|
|
||||||
val absentModuleInfos = allModuleInfos.mapIndexed { index, moduleInfos ->
|
val missingModuleInfos = allModuleInfos.mapIndexed { index, moduleInfos ->
|
||||||
val target = parameters.targetProviders[index].target
|
val target = parameters.targetProviders[index].target
|
||||||
val absentInfos = moduleInfos.filterKeys { name -> name !in commonModuleNames }.values
|
val missingInfos = moduleInfos.filterKeys { name -> name !in commonModuleNames }.values
|
||||||
target to absentInfos
|
target to missingInfos
|
||||||
}.toMap()
|
}.toMap()
|
||||||
|
|
||||||
return CirTreeMergeResult(
|
return CirTreeMergeResult(
|
||||||
root = rootNode,
|
root = rootNode,
|
||||||
absentModuleInfos = absentModuleInfos
|
missingModuleInfos = missingModuleInfos
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -9,7 +9,7 @@ import gnu.trove.THashMap
|
|||||||
import gnu.trove.THashSet
|
import gnu.trove.THashSet
|
||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.SharedTarget
|
import org.jetbrains.kotlin.descriptors.commonizer.SharedTarget
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.Target
|
import org.jetbrains.kotlin.descriptors.commonizer.CommonizerTarget
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.utils.intern
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.intern
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.utils.isUnderKotlinNativeSyntheticPackages
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.isUnderKotlinNativeSyntheticPackages
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.utils.resolveClassOrTypeAlias
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.resolveClassOrTypeAlias
|
||||||
@@ -22,7 +22,7 @@ import org.jetbrains.kotlin.storage.getValue
|
|||||||
class CirKnownClassifiers(
|
class CirKnownClassifiers(
|
||||||
val commonized: CirCommonizedClassifiers,
|
val commonized: CirCommonizedClassifiers,
|
||||||
val forwardDeclarations: CirForwardDeclarations,
|
val forwardDeclarations: CirForwardDeclarations,
|
||||||
val dependeeLibraries: Map<Target, CirProvidedClassifiers>
|
val dependeeLibraries: Map<CommonizerTarget, CirProvidedClassifiers>
|
||||||
) {
|
) {
|
||||||
// a shortcut for fast access
|
// a shortcut for fast access
|
||||||
val commonDependeeLibraries: CirProvidedClassifiers =
|
val commonDependeeLibraries: CirProvidedClassifiers =
|
||||||
|
|||||||
+7
-7
@@ -55,11 +55,11 @@ class AggregatedStatsCollector(
|
|||||||
) : StatsOutput.StatsRow {
|
) : StatsOutput.StatsRow {
|
||||||
var liftedUp: Int = 0
|
var liftedUp: Int = 0
|
||||||
var successfullyCommonized: Int = 0
|
var successfullyCommonized: Int = 0
|
||||||
var failedBecauseAbsent: Int = 0
|
var failedBecauseMissing: Int = 0
|
||||||
var failedOther: Int = 0
|
var failedOther: Int = 0
|
||||||
|
|
||||||
override fun toList(): List<String> {
|
override fun toList(): List<String> {
|
||||||
val total = liftedUp + successfullyCommonized + failedBecauseAbsent + failedOther
|
val total = liftedUp + successfullyCommonized + failedBecauseMissing + failedOther
|
||||||
|
|
||||||
fun fraction(amount: Int): Double = if (total > 0) amount.toDouble() / total else 0.0
|
fun fraction(amount: Int): Double = if (total > 0) amount.toDouble() / total else 0.0
|
||||||
|
|
||||||
@@ -69,8 +69,8 @@ class AggregatedStatsCollector(
|
|||||||
fraction(liftedUp).toString(),
|
fraction(liftedUp).toString(),
|
||||||
successfullyCommonized.toString(),
|
successfullyCommonized.toString(),
|
||||||
fraction(successfullyCommonized).toString(),
|
fraction(successfullyCommonized).toString(),
|
||||||
failedBecauseAbsent.toString(),
|
failedBecauseMissing.toString(),
|
||||||
fraction(failedBecauseAbsent).toString(),
|
fraction(failedBecauseMissing).toString(),
|
||||||
failedOther.toString(),
|
failedOther.toString(),
|
||||||
fraction(failedOther).toString(),
|
fraction(failedOther).toString(),
|
||||||
total.toString()
|
total.toString()
|
||||||
@@ -96,9 +96,9 @@ private class AggregatingOutput : StatsOutput {
|
|||||||
when (row.common) {
|
when (row.common) {
|
||||||
LIFTED_UP -> aggregatedStatsRow.liftedUp++
|
LIFTED_UP -> aggregatedStatsRow.liftedUp++
|
||||||
EXPECT -> aggregatedStatsRow.successfullyCommonized++
|
EXPECT -> aggregatedStatsRow.successfullyCommonized++
|
||||||
ABSENT -> {
|
MISSING -> {
|
||||||
if (row.platform.any { it == RawStatsCollector.PlatformDeclarationStatus.ABSENT }) {
|
if (row.platform.any { it == RawStatsCollector.PlatformDeclarationStatus.MISSING }) {
|
||||||
aggregatedStatsRow.failedBecauseAbsent++
|
aggregatedStatsRow.failedBecauseMissing++
|
||||||
} else {
|
} else {
|
||||||
aggregatedStatsRow.failedOther++
|
aggregatedStatsRow.failedOther++
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-4
@@ -92,7 +92,7 @@ class RawStatsCollector(
|
|||||||
var isLiftedUp = !lastIsNull
|
var isLiftedUp = !lastIsNull
|
||||||
for (index in 0 until result.size - 1) {
|
for (index in 0 until result.size - 1) {
|
||||||
statsRow.platform += when {
|
statsRow.platform += when {
|
||||||
result[index] == null -> PlatformDeclarationStatus.ABSENT
|
result[index] == null -> PlatformDeclarationStatus.MISSING
|
||||||
lastIsNull -> PlatformDeclarationStatus.ORIGINAL
|
lastIsNull -> PlatformDeclarationStatus.ORIGINAL
|
||||||
else -> {
|
else -> {
|
||||||
isLiftedUp = false
|
isLiftedUp = false
|
||||||
@@ -103,7 +103,7 @@ class RawStatsCollector(
|
|||||||
|
|
||||||
statsRow.common = when {
|
statsRow.common = when {
|
||||||
isLiftedUp -> CommonDeclarationStatus.LIFTED_UP
|
isLiftedUp -> CommonDeclarationStatus.LIFTED_UP
|
||||||
lastIsNull -> CommonDeclarationStatus.ABSENT
|
lastIsNull -> CommonDeclarationStatus.MISSING
|
||||||
else -> CommonDeclarationStatus.EXPECT
|
else -> CommonDeclarationStatus.EXPECT
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -157,12 +157,12 @@ class RawStatsCollector(
|
|||||||
enum class CommonDeclarationStatus(val alias: Char) {
|
enum class CommonDeclarationStatus(val alias: Char) {
|
||||||
LIFTED_UP('L'),
|
LIFTED_UP('L'),
|
||||||
EXPECT('E'),
|
EXPECT('E'),
|
||||||
ABSENT('-')
|
MISSING('-')
|
||||||
}
|
}
|
||||||
|
|
||||||
enum class PlatformDeclarationStatus(val alias: Char) {
|
enum class PlatformDeclarationStatus(val alias: Char) {
|
||||||
ACTUAL('A'),
|
ACTUAL('A'),
|
||||||
ORIGINAL('O'),
|
ORIGINAL('O'),
|
||||||
ABSENT('-')
|
MISSING('-')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+17
-17
@@ -66,7 +66,7 @@ abstract class AbstractCommonizationFromSourcesTest : KtUsefulTestCase() {
|
|||||||
val sourceModuleRoots: SourceModuleRoots = SourceModuleRoots.load(getTestDataDir())
|
val sourceModuleRoots: SourceModuleRoots = SourceModuleRoots.load(getTestDataDir())
|
||||||
val analyzedModules: AnalyzedModules = AnalyzedModules.create(sourceModuleRoots, testRootDisposable)
|
val analyzedModules: AnalyzedModules = AnalyzedModules.create(sourceModuleRoots, testRootDisposable)
|
||||||
|
|
||||||
val result: Result = runCommonization(analyzedModules.toCommonizationParameters())
|
val result: CommonizerResult = runCommonization(analyzedModules.toCommonizationParameters())
|
||||||
assertCommonizationPerformed(result)
|
assertCommonizationPerformed(result)
|
||||||
|
|
||||||
val sharedTarget: SharedTarget = analyzedModules.sharedTarget
|
val sharedTarget: SharedTarget = analyzedModules.sharedTarget
|
||||||
@@ -115,8 +115,8 @@ private data class SourceModuleRoot(
|
|||||||
|
|
||||||
private class SourceModuleRoots(
|
private class SourceModuleRoots(
|
||||||
val originalRoots: Map<LeafTarget, SourceModuleRoot>,
|
val originalRoots: Map<LeafTarget, SourceModuleRoot>,
|
||||||
val commonizedRoots: Map<Target, SourceModuleRoot>,
|
val commonizedRoots: Map<CommonizerTarget, SourceModuleRoot>,
|
||||||
val dependeeRoots: Map<Target, SourceModuleRoot>
|
val dependeeRoots: Map<CommonizerTarget, SourceModuleRoot>
|
||||||
) {
|
) {
|
||||||
val leafTargets: Set<LeafTarget> = originalRoots.keys
|
val leafTargets: Set<LeafTarget> = originalRoots.keys
|
||||||
val sharedTarget: SharedTarget
|
val sharedTarget: SharedTarget
|
||||||
@@ -143,7 +143,7 @@ private class SourceModuleRoots(
|
|||||||
val leafTargets = originalRoots.keys
|
val leafTargets = originalRoots.keys
|
||||||
val sharedTarget = SharedTarget(leafTargets)
|
val sharedTarget = SharedTarget(leafTargets)
|
||||||
|
|
||||||
fun getTarget(targetName: String): Target =
|
fun getTarget(targetName: String): CommonizerTarget =
|
||||||
if (targetName == SHARED_TARGET_NAME) sharedTarget else leafTargets.first { it.name == targetName }
|
if (targetName == SHARED_TARGET_NAME) sharedTarget else leafTargets.first { it.name == targetName }
|
||||||
|
|
||||||
val commonizedRoots = listRoots(dataDir, COMMONIZED_ROOTS_DIR).mapKeys { getTarget(it.key) }
|
val commonizedRoots = listRoots(dataDir, COMMONIZED_ROOTS_DIR).mapKeys { getTarget(it.key) }
|
||||||
@@ -164,7 +164,7 @@ private class SourceModuleRoots(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private class AnalyzedModuleDependencies(
|
private class AnalyzedModuleDependencies(
|
||||||
val regularDependencies: Map<Target, List<ModuleDescriptor>>,
|
val regularDependencies: Map<CommonizerTarget, List<ModuleDescriptor>>,
|
||||||
val expectByDependencies: List<ModuleDescriptor>
|
val expectByDependencies: List<ModuleDescriptor>
|
||||||
) {
|
) {
|
||||||
fun withExpectByDependency(dependency: ModuleDescriptor) =
|
fun withExpectByDependency(dependency: ModuleDescriptor) =
|
||||||
@@ -179,9 +179,9 @@ private class AnalyzedModuleDependencies(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private class AnalyzedModules(
|
private class AnalyzedModules(
|
||||||
val originalModules: Map<Target, ModuleDescriptor>,
|
val originalModules: Map<CommonizerTarget, ModuleDescriptor>,
|
||||||
val commonizedModules: Map<Target, ModuleDescriptor>,
|
val commonizedModules: Map<CommonizerTarget, ModuleDescriptor>,
|
||||||
val dependeeModules: Map<Target, List<ModuleDescriptor>>
|
val dependeeModules: Map<CommonizerTarget, List<ModuleDescriptor>>
|
||||||
) {
|
) {
|
||||||
val leafTargets: Set<LeafTarget>
|
val leafTargets: Set<LeafTarget>
|
||||||
val sharedTarget: SharedTarget
|
val sharedTarget: SharedTarget
|
||||||
@@ -201,8 +201,8 @@ private class AnalyzedModules(
|
|||||||
check(allTargets.containsAll(dependeeModules.keys))
|
check(allTargets.containsAll(dependeeModules.keys))
|
||||||
}
|
}
|
||||||
|
|
||||||
fun toCommonizationParameters(): Parameters {
|
fun toCommonizationParameters(): CommonizerParameters {
|
||||||
val parameters = Parameters()
|
val parameters = CommonizerParameters()
|
||||||
|
|
||||||
leafTargets.forEach { leafTarget ->
|
leafTargets.forEach { leafTarget ->
|
||||||
val originalModule = originalModules.getValue(leafTarget)
|
val originalModule = originalModules.getValue(leafTarget)
|
||||||
@@ -240,9 +240,9 @@ private class AnalyzedModules(
|
|||||||
|
|
||||||
private fun createDependeeModules(
|
private fun createDependeeModules(
|
||||||
sharedTarget: SharedTarget,
|
sharedTarget: SharedTarget,
|
||||||
dependeeRoots: Map<out Target, SourceModuleRoot>,
|
dependeeRoots: Map<out CommonizerTarget, SourceModuleRoot>,
|
||||||
parentDisposable: Disposable
|
parentDisposable: Disposable
|
||||||
): Pair<Map<Target, List<ModuleDescriptor>>, AnalyzedModuleDependencies> {
|
): Pair<Map<CommonizerTarget, List<ModuleDescriptor>>, AnalyzedModuleDependencies> {
|
||||||
val customDependeeModules =
|
val customDependeeModules =
|
||||||
createModules(sharedTarget, dependeeRoots, AnalyzedModuleDependencies.EMPTY, parentDisposable, isDependeeModule = true)
|
createModules(sharedTarget, dependeeRoots, AnalyzedModuleDependencies.EMPTY, parentDisposable, isDependeeModule = true)
|
||||||
|
|
||||||
@@ -261,12 +261,12 @@ private class AnalyzedModules(
|
|||||||
|
|
||||||
private fun createModules(
|
private fun createModules(
|
||||||
sharedTarget: SharedTarget,
|
sharedTarget: SharedTarget,
|
||||||
moduleRoots: Map<out Target, SourceModuleRoot>,
|
moduleRoots: Map<out CommonizerTarget, SourceModuleRoot>,
|
||||||
dependencies: AnalyzedModuleDependencies,
|
dependencies: AnalyzedModuleDependencies,
|
||||||
parentDisposable: Disposable,
|
parentDisposable: Disposable,
|
||||||
isDependeeModule: Boolean = false
|
isDependeeModule: Boolean = false
|
||||||
): Map<Target, ModuleDescriptor> {
|
): Map<CommonizerTarget, ModuleDescriptor> {
|
||||||
val result = mutableMapOf<Target, ModuleDescriptor>()
|
val result = mutableMapOf<CommonizerTarget, ModuleDescriptor>()
|
||||||
|
|
||||||
var dependenciesForOthers = dependencies
|
var dependenciesForOthers = dependencies
|
||||||
|
|
||||||
@@ -288,7 +288,7 @@ private class AnalyzedModules(
|
|||||||
|
|
||||||
private fun createModule(
|
private fun createModule(
|
||||||
sharedTarget: SharedTarget,
|
sharedTarget: SharedTarget,
|
||||||
currentTarget: Target,
|
currentTarget: CommonizerTarget,
|
||||||
moduleRoot: SourceModuleRoot,
|
moduleRoot: SourceModuleRoot,
|
||||||
dependencies: AnalyzedModuleDependencies,
|
dependencies: AnalyzedModuleDependencies,
|
||||||
parentDisposable: Disposable,
|
parentDisposable: Disposable,
|
||||||
@@ -336,7 +336,7 @@ private class AnalyzedModules(
|
|||||||
|
|
||||||
private class DependenciesContainerImpl(
|
private class DependenciesContainerImpl(
|
||||||
sharedTarget: SharedTarget,
|
sharedTarget: SharedTarget,
|
||||||
currentTarget: Target,
|
currentTarget: CommonizerTarget,
|
||||||
dependencies: AnalyzedModuleDependencies
|
dependencies: AnalyzedModuleDependencies
|
||||||
) : CommonDependenciesContainer {
|
) : CommonDependenciesContainer {
|
||||||
private val moduleInfoToModule = mutableMapOf<ModuleInfo, ModuleDescriptor>()
|
private val moduleInfoToModule = mutableMapOf<ModuleInfo, ModuleDescriptor>()
|
||||||
|
|||||||
+12
-12
@@ -52,7 +52,7 @@ class CommonizerFacadeTest {
|
|||||||
)
|
)
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun commonizedWithAbsentModules() = doTestSuccessfulCommonization(
|
fun commonizedWithMissingModules() = doTestSuccessfulCommonization(
|
||||||
mapOf(
|
mapOf(
|
||||||
"target1" to listOf("foo", "bar"),
|
"target1" to listOf("foo", "bar"),
|
||||||
"target2" to listOf("foo", "qix")
|
"target2" to listOf("foo", "qix")
|
||||||
@@ -60,7 +60,7 @@ class CommonizerFacadeTest {
|
|||||||
)
|
)
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private fun Map<String, List<String>>.toCommonizationParameters() = Parameters().also {
|
private fun Map<String, List<String>>.toCommonizationParameters() = CommonizerParameters().also {
|
||||||
forEach { (targetName, moduleNames) ->
|
forEach { (targetName, moduleNames) ->
|
||||||
it.addTarget(
|
it.addTarget(
|
||||||
TargetProvider(
|
TargetProvider(
|
||||||
@@ -76,7 +76,7 @@ class CommonizerFacadeTest {
|
|||||||
|
|
||||||
private fun doTestNothingToCommonize(originalModules: Map<String, List<String>>) {
|
private fun doTestNothingToCommonize(originalModules: Map<String, List<String>>) {
|
||||||
val result = runCommonization(originalModules.toCommonizationParameters())
|
val result = runCommonization(originalModules.toCommonizationParameters())
|
||||||
assertEquals(Result.NothingToCommonize, result)
|
assertEquals(CommonizerResult.NothingToDo, result)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun doTestSuccessfulCommonization(originalModules: Map<String, List<String>>) {
|
private fun doTestSuccessfulCommonization(originalModules: Map<String, List<String>>) {
|
||||||
@@ -92,17 +92,17 @@ class CommonizerFacadeTest {
|
|||||||
}
|
}
|
||||||
assertModulesMatch(
|
assertModulesMatch(
|
||||||
expectedCommonizedModuleNames = expectedCommonModuleNames,
|
expectedCommonizedModuleNames = expectedCommonModuleNames,
|
||||||
expectedAbsentModuleNames = emptySet(),
|
expectedMissingModuleNames = emptySet(),
|
||||||
actualModuleResults = result.modulesByTargets.getValue(result.sharedTarget)
|
actualModuleResults = result.modulesByTargets.getValue(result.sharedTarget)
|
||||||
)
|
)
|
||||||
|
|
||||||
result.leafTargets.forEach { target ->
|
result.leafTargets.forEach { target ->
|
||||||
val allModuleNames = originalModules.getValue(target.name).toSet()
|
val allModuleNames = originalModules.getValue(target.name).toSet()
|
||||||
val expectedAbsentModuleNames = allModuleNames - expectedCommonModuleNames
|
val expectedMissingModuleNames = allModuleNames - expectedCommonModuleNames
|
||||||
|
|
||||||
assertModulesMatch(
|
assertModulesMatch(
|
||||||
expectedCommonizedModuleNames = expectedCommonModuleNames,
|
expectedCommonizedModuleNames = expectedCommonModuleNames,
|
||||||
expectedAbsentModuleNames = expectedAbsentModuleNames,
|
expectedMissingModuleNames = expectedMissingModuleNames,
|
||||||
actualModuleResults = result.modulesByTargets.getValue(target)
|
actualModuleResults = result.modulesByTargets.getValue(target)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -110,27 +110,27 @@ class CommonizerFacadeTest {
|
|||||||
|
|
||||||
private fun assertModulesMatch(
|
private fun assertModulesMatch(
|
||||||
expectedCommonizedModuleNames: Set<String>,
|
expectedCommonizedModuleNames: Set<String>,
|
||||||
expectedAbsentModuleNames: Set<String>,
|
expectedMissingModuleNames: Set<String>,
|
||||||
actualModuleResults: Collection<ModuleResult>
|
actualModuleResults: Collection<ModuleResult>
|
||||||
) {
|
) {
|
||||||
assertEquals(expectedCommonizedModuleNames.size + expectedAbsentModuleNames.size, actualModuleResults.size)
|
assertEquals(expectedCommonizedModuleNames.size + expectedMissingModuleNames.size, actualModuleResults.size)
|
||||||
|
|
||||||
val actualCommonizedModuleNames = mutableSetOf<String>()
|
val actualCommonizedModuleNames = mutableSetOf<String>()
|
||||||
val actualAbsentModuleNames = mutableSetOf<String>()
|
val actualMissingModuleNames = mutableSetOf<String>()
|
||||||
|
|
||||||
actualModuleResults.forEach { moduleResult ->
|
actualModuleResults.forEach { moduleResult ->
|
||||||
when (moduleResult) {
|
when (moduleResult) {
|
||||||
is ModuleResult.Commonized -> {
|
is ModuleResult.Commonized -> {
|
||||||
actualCommonizedModuleNames += moduleResult.module.name.asString().removeSurrounding("<", ">")
|
actualCommonizedModuleNames += moduleResult.module.name.asString().removeSurrounding("<", ">")
|
||||||
}
|
}
|
||||||
is ModuleResult.Absent -> {
|
is ModuleResult.Missing -> {
|
||||||
actualAbsentModuleNames += moduleResult.originalLocation.name
|
actualMissingModuleNames += moduleResult.originalLocation.name
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
assertEquals(expectedCommonizedModuleNames, actualCommonizedModuleNames)
|
assertEquals(expectedCommonizedModuleNames, actualCommonizedModuleNames)
|
||||||
assertEquals(expectedAbsentModuleNames, actualAbsentModuleNames)
|
assertEquals(expectedMissingModuleNames, actualMissingModuleNames)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-5
@@ -14,28 +14,28 @@ import org.junit.Test
|
|||||||
class PropertySetterCommonizerTest : AbstractCommonizerTest<CirPropertySetter?, CirPropertySetter?>() {
|
class PropertySetterCommonizerTest : AbstractCommonizerTest<CirPropertySetter?, CirPropertySetter?>() {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun absentOnly() = super.doTestSuccess(
|
fun missingOnly() = super.doTestSuccess(
|
||||||
expected = null,
|
expected = null,
|
||||||
null, null, null
|
null, null, null
|
||||||
)
|
)
|
||||||
|
|
||||||
@Test(expected = IllegalCommonizerStateException::class)
|
@Test(expected = IllegalCommonizerStateException::class)
|
||||||
fun absentAndPublic() = doTestFailure(
|
fun missingAndPublic() = doTestFailure(
|
||||||
null, null, null, PUBLIC
|
null, null, null, PUBLIC
|
||||||
)
|
)
|
||||||
|
|
||||||
@Test(expected = IllegalCommonizerStateException::class)
|
@Test(expected = IllegalCommonizerStateException::class)
|
||||||
fun publicAndAbsent() = doTestFailure(
|
fun publicAndMissing() = doTestFailure(
|
||||||
PUBLIC, PUBLIC, PUBLIC, null
|
PUBLIC, PUBLIC, PUBLIC, null
|
||||||
)
|
)
|
||||||
|
|
||||||
@Test(expected = IllegalCommonizerStateException::class)
|
@Test(expected = IllegalCommonizerStateException::class)
|
||||||
fun protectedAndAbsent() = doTestFailure(
|
fun protectedAndMissing() = doTestFailure(
|
||||||
PROTECTED, PROTECTED, null
|
PROTECTED, PROTECTED, null
|
||||||
)
|
)
|
||||||
|
|
||||||
@Test(expected = IllegalCommonizerStateException::class)
|
@Test(expected = IllegalCommonizerStateException::class)
|
||||||
fun absentAndInternal() = doTestFailure(
|
fun missingAndInternal() = doTestFailure(
|
||||||
null, null, INTERNAL
|
null, null, INTERNAL
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.builtins.jvm.JvmBuiltIns
|
|||||||
import org.jetbrains.kotlin.builtins.konan.KonanBuiltIns
|
import org.jetbrains.kotlin.builtins.konan.KonanBuiltIns
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.LeafTarget
|
import org.jetbrains.kotlin.descriptors.commonizer.LeafTarget
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.SharedTarget
|
import org.jetbrains.kotlin.descriptors.commonizer.SharedTarget
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.Target
|
import org.jetbrains.kotlin.descriptors.commonizer.CommonizerTarget
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirRoot
|
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirRoot
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.cir.factory.CirRootFactory
|
import org.jetbrains.kotlin.descriptors.commonizer.cir.factory.CirRootFactory
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.utils.MockBuiltInsProvider
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.MockBuiltInsProvider
|
||||||
@@ -164,7 +164,7 @@ class RootCommonizerTest : AbstractCommonizerTest<CirRoot, CirRoot>() {
|
|||||||
inline val JVM_BUILT_INS get() = JvmBuiltIns(LockBasedStorageManager.NO_LOCKS, JvmBuiltIns.Kind.FROM_CLASS_LOADER)
|
inline val JVM_BUILT_INS get() = JvmBuiltIns(LockBasedStorageManager.NO_LOCKS, JvmBuiltIns.Kind.FROM_CLASS_LOADER)
|
||||||
inline val DEFAULT_BUILT_INS get() = DefaultBuiltIns.Instance
|
inline val DEFAULT_BUILT_INS get() = DefaultBuiltIns.Instance
|
||||||
|
|
||||||
fun KotlinBuiltIns.toMock(target: Target) = CirRootFactory.create(
|
fun KotlinBuiltIns.toMock(target: CommonizerTarget) = CirRootFactory.create(
|
||||||
target = target,
|
target = target,
|
||||||
builtInsClass = this::class.java.name,
|
builtInsClass = this::class.java.name,
|
||||||
builtInsProvider = MockBuiltInsProvider(this)
|
builtInsProvider = MockBuiltInsProvider(this)
|
||||||
|
|||||||
+5
-5
@@ -6,7 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.descriptors.commonizer.utils
|
package org.jetbrains.kotlin.descriptors.commonizer.utils
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.Result
|
import org.jetbrains.kotlin.descriptors.commonizer.CommonizerResult
|
||||||
import org.jetbrains.kotlin.resolve.scopes.MemberScope
|
import org.jetbrains.kotlin.resolve.scopes.MemberScope
|
||||||
import org.jetbrains.kotlin.test.util.DescriptorValidator.*
|
import org.jetbrains.kotlin.test.util.DescriptorValidator.*
|
||||||
import org.jetbrains.kotlin.types.ErrorUtils
|
import org.jetbrains.kotlin.types.ErrorUtils
|
||||||
@@ -22,13 +22,13 @@ fun assertIsDirectory(file: File) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@ExperimentalContracts
|
@ExperimentalContracts
|
||||||
fun assertCommonizationPerformed(result: Result) {
|
fun assertCommonizationPerformed(result: CommonizerResult) {
|
||||||
contract {
|
contract {
|
||||||
returns() implies (result is Result.Commonized)
|
returns() implies (result is CommonizerResult.Done)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result !is Result.Commonized)
|
if (result !is CommonizerResult.Done)
|
||||||
fail("$result is not instance of ${Result.Commonized::class}")
|
fail("$result is not instance of ${CommonizerResult.Done::class}")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ExperimentalContracts
|
@ExperimentalContracts
|
||||||
|
|||||||
Reference in New Issue
Block a user