[Commonizer] Rename InputTarget and OutputTarget

Rename target classes to better reflect their meaning:
- InputTarget -> LeafTarget
- OutputTarget -> SharedTarget
This commit is contained in:
Dmitriy Dolovov
2020-11-30 22:25:22 +03:00
parent b0ff3e7e5e
commit dce3d4d1b7
14 changed files with 103 additions and 103 deletions
@@ -12,7 +12,7 @@ class Parameters(
val progressLogger: ((String) -> Unit)? = null
) {
// use linked hash map to preserve order
private val _targetProviders = LinkedHashMap<InputTarget, TargetProvider>()
private val _targetProviders = LinkedHashMap<LeafTarget, TargetProvider>()
val targetProviders: List<TargetProvider> get() = _targetProviders.values.toList()
@@ -14,8 +14,8 @@ sealed class Result {
class Commonized(
val modulesByTargets: Map<Target, Collection<ModuleResult>>
) : Result() {
val sharedTarget: OutputTarget by lazy { modulesByTargets.keys.filterIsInstance<OutputTarget>().single() }
val leafTargets: Set<InputTarget> by lazy { modulesByTargets.keys.filterIsInstance<InputTarget>().toSet() }
val sharedTarget: SharedTarget by lazy { modulesByTargets.keys.filterIsInstance<SharedTarget>().single() }
val leafTargets: Set<LeafTarget> by lazy { modulesByTargets.keys.filterIsInstance<LeafTarget>().toSet() }
}
}
@@ -11,10 +11,10 @@ import org.jetbrains.kotlin.konan.target.KonanTarget
// JVM, JS and concrete Kotlin/Native targets, e.g. macos_x64, ios_x64, linux_x64.
sealed class Target
data class InputTarget(val name: String, val konanTarget: KonanTarget? = null) : Target()
data class LeafTarget(val name: String, val konanTarget: KonanTarget? = null) : Target()
data class OutputTarget(val targets: Set<Target>) : Target() {
data class SharedTarget(val targets: Set<Target>) : Target() {
init {
require(targets.isNotEmpty())
}
}
}
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import java.io.File
class TargetProvider(
val target: InputTarget,
val target: LeafTarget,
val builtInsClass: Class<out KotlinBuiltIns>,
val builtInsProvider: BuiltInsProvider,
val modulesProvider: ModulesProvider,
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.descriptors.commonizer.cir.factory
import org.jetbrains.kotlin.builtins.konan.KonanBuiltIns
import org.jetbrains.kotlin.descriptors.commonizer.BuiltInsProvider
import org.jetbrains.kotlin.descriptors.commonizer.InputTarget
import org.jetbrains.kotlin.descriptors.commonizer.LeafTarget
import org.jetbrains.kotlin.descriptors.commonizer.Target
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirRoot
import org.jetbrains.kotlin.descriptors.commonizer.cir.impl.CirRootImpl
@@ -18,7 +18,7 @@ object CirRootFactory {
builtInsClass: String,
builtInsProvider: BuiltInsProvider
): CirRoot {
if (target is InputTarget) {
if (target is LeafTarget) {
check((target.konanTarget != null) == (builtInsClass == KonanBuiltIns::class.java.name))
}
@@ -8,28 +8,28 @@ package org.jetbrains.kotlin.descriptors.commonizer.core
import org.jetbrains.kotlin.builtins.DefaultBuiltIns
import org.jetbrains.kotlin.builtins.konan.KonanBuiltIns
import org.jetbrains.kotlin.descriptors.commonizer.BuiltInsProvider
import org.jetbrains.kotlin.descriptors.commonizer.InputTarget
import org.jetbrains.kotlin.descriptors.commonizer.OutputTarget
import org.jetbrains.kotlin.descriptors.commonizer.LeafTarget
import org.jetbrains.kotlin.descriptors.commonizer.SharedTarget
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirRoot
import org.jetbrains.kotlin.descriptors.commonizer.cir.factory.CirRootFactory
class RootCommonizer : AbstractStandardCommonizer<CirRoot, CirRoot>() {
private val inputTargets = mutableSetOf<InputTarget>()
private val leafTargets = mutableSetOf<LeafTarget>()
private var konanBuiltInsProvider: BuiltInsProvider? = null
override fun commonizationResult() = CirRootFactory.create(
target = OutputTarget(inputTargets),
target = SharedTarget(leafTargets),
builtInsClass = if (konanBuiltInsProvider != null) KonanBuiltIns::class.java.name else DefaultBuiltIns::class.java.name,
builtInsProvider = konanBuiltInsProvider ?: BuiltInsProvider.defaultBuiltInsProvider
)
override fun initialize(first: CirRoot) {
inputTargets += first.target as InputTarget
leafTargets += first.target as LeafTarget
konanBuiltInsProvider = first.konanBuiltInsProvider
}
override fun doCommonizeWith(next: CirRoot): Boolean {
inputTargets += next.target as InputTarget
leafTargets += next.target as LeafTarget
// keep the first met KonanBuiltIns when all targets are Kotlin/Native
// otherwise use DefaultBuiltIns
@@ -40,7 +40,7 @@ fun runCommonization(parameters: Parameters): Result {
val commonizedModules: List<ModuleResult.Commonized> = components.cache.getAllModules(component.index).map(ModuleResult::Commonized)
val absentModules: List<ModuleResult.Absent> = if (target is InputTarget)
val absentModules: List<ModuleResult.Absent> = if (target is LeafTarget)
mergeResult.absentModuleInfos.getValue(target).map { ModuleResult.Absent(it.originalLocation) }
else emptyList()
@@ -91,7 +91,7 @@ class NativeDistributionCommonizer(
val stdlib = NativeLibrary(loadLibrary(stdlibPath))
val librariesByTargets = targets.associate { target ->
val leafTarget = InputTarget(target.name, target)
val leafTarget = LeafTarget(target.name, target)
val platformLibs = leafTarget.platformLibrariesSource
.takeIf { it.isDirectory }
@@ -213,11 +213,11 @@ class NativeDistributionCommonizer(
val manifestProvider: NativeManifestDataProvider
val starredTarget: String?
when (target) {
is InputTarget -> {
is LeafTarget -> {
manifestProvider = originalLibraries.librariesByTargets.getValue(target)
starredTarget = target.name
}
is OutputTarget -> {
is SharedTarget -> {
manifestProvider = CommonNativeManifestDataProvider(originalLibraries.librariesByTargets.values)
starredTarget = null
}
@@ -255,7 +255,7 @@ class NativeDistributionCommonizer(
}
}
private fun copyTargetAsIs(leafTarget: InputTarget, librariesCount: Int) {
private fun copyTargetAsIs(leafTarget: LeafTarget, librariesCount: Int) {
val librariesDestination = leafTarget.librariesDestination
librariesDestination.mkdirs() // always create an empty directory even if there is nothing to copy
@@ -318,15 +318,15 @@ class NativeDistributionCommonizer(
library.commit()
}
private val InputTarget.platformLibrariesSource: File
private val LeafTarget.platformLibrariesSource: File
get() = repository.resolve(KONAN_DISTRIBUTION_KLIB_DIR)
.resolve(KONAN_DISTRIBUTION_PLATFORM_LIBS_DIR)
.resolve(name)
private val Target.librariesDestination: File
get() = when (this) {
is InputTarget -> destination.resolve(KONAN_DISTRIBUTION_PLATFORM_LIBS_DIR).resolve(name)
is OutputTarget -> destination.resolve(KONAN_DISTRIBUTION_COMMON_LIBS_DIR)
is LeafTarget -> destination.resolve(KONAN_DISTRIBUTION_PLATFORM_LIBS_DIR).resolve(name)
is SharedTarget -> destination.resolve(KONAN_DISTRIBUTION_COMMON_LIBS_DIR)
}
private companion object {
@@ -6,7 +6,7 @@
package org.jetbrains.kotlin.descriptors.commonizer.konan
import gnu.trove.THashMap
import org.jetbrains.kotlin.descriptors.commonizer.InputTarget
import org.jetbrains.kotlin.descriptors.commonizer.LeafTarget
import org.jetbrains.kotlin.library.KotlinLibrary
internal interface NativeManifestDataProvider {
@@ -37,7 +37,7 @@ internal class NativeLibrariesToCommonize(val libraries: List<NativeLibrary>) :
internal class AllNativeLibraries(
val stdlib: NativeLibrary,
val librariesByTargets: Map<InputTarget, NativeLibrariesToCommonize>
val librariesByTargets: Map<LeafTarget, NativeLibrariesToCommonize>
)
internal class CommonNativeManifestDataProvider(
@@ -6,7 +6,7 @@
package org.jetbrains.kotlin.descriptors.commonizer.mergedtree
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.commonizer.InputTarget
import org.jetbrains.kotlin.descriptors.commonizer.LeafTarget
import org.jetbrains.kotlin.descriptors.commonizer.ModulesProvider.ModuleInfo
import org.jetbrains.kotlin.descriptors.commonizer.Parameters
import org.jetbrains.kotlin.descriptors.commonizer.TargetProvider
@@ -53,7 +53,7 @@ class CirTreeMerger(
) {
class CirTreeMergeResult(
val root: CirRootNode,
val absentModuleInfos: Map<InputTarget, Collection<ModuleInfo>>
val absentModuleInfos: Map<LeafTarget, Collection<ModuleInfo>>
)
private val size = parameters.targetProviders.size
@@ -68,7 +68,7 @@ abstract class AbstractCommonizationFromSourcesTest : KtUsefulTestCase() {
val result: Result = runCommonization(analyzedModules.toCommonizationParameters())
assertCommonizationPerformed(result)
val sharedTarget: OutputTarget = analyzedModules.sharedTarget
val sharedTarget: SharedTarget = analyzedModules.sharedTarget
assertEquals(sharedTarget, result.sharedTarget)
val sharedModuleAsExpected: ModuleDescriptor = analyzedModules.commonizedModules.getValue(sharedTarget)
@@ -79,7 +79,7 @@ abstract class AbstractCommonizationFromSourcesTest : KtUsefulTestCase() {
assertValidModule(sharedModuleByCommonizer)
assertModulesAreEqual(sharedModuleAsExpected, sharedModuleByCommonizer, "\"$sharedTarget\" target")
val leafTargets: Set<InputTarget> = analyzedModules.leafTargets
val leafTargets: Set<LeafTarget> = analyzedModules.leafTargets
assertEquals(leafTargets, result.leafTargets)
for (leafTarget in leafTargets) {
@@ -113,18 +113,18 @@ private data class SourceModuleRoot(
}
private class SourceModuleRoots(
val originalRoots: Map<InputTarget, SourceModuleRoot>,
val originalRoots: Map<LeafTarget, SourceModuleRoot>,
val commonizedRoots: Map<Target, SourceModuleRoot>,
val dependeeRoots: Map<Target, SourceModuleRoot>
) {
val leafTargets: Set<InputTarget> = originalRoots.keys
val sharedTarget: OutputTarget
val leafTargets: Set<LeafTarget> = originalRoots.keys
val sharedTarget: SharedTarget
init {
check(leafTargets.size >= 2)
check(leafTargets.none { it.name == SHARED_TARGET_NAME })
val sharedTargets = commonizedRoots.keys.filterIsInstance<OutputTarget>()
val sharedTargets = commonizedRoots.keys.filterIsInstance<SharedTarget>()
check(sharedTargets.size == 1)
sharedTarget = sharedTargets.single()
@@ -137,10 +137,10 @@ private class SourceModuleRoots(
companion object {
fun load(dataDir: File): SourceModuleRoots = try {
val originalRoots = listRoots(dataDir, ORIGINAL_ROOTS_DIR).mapKeys { InputTarget(it.key) }
val originalRoots = listRoots(dataDir, ORIGINAL_ROOTS_DIR).mapKeys { LeafTarget(it.key) }
val leafTargets = originalRoots.keys
val sharedTarget = OutputTarget(leafTargets)
val sharedTarget = SharedTarget(leafTargets)
fun getTarget(targetName: String): Target =
if (targetName == SHARED_TARGET_NAME) sharedTarget else leafTargets.first { it.name == targetName }
@@ -185,18 +185,18 @@ private class AnalyzedModules(
val commonizedModules: Map<Target, ModuleDescriptor>,
val dependeeModules: Map<Target, ModuleDescriptor>
) {
val leafTargets: Set<InputTarget>
val sharedTarget: OutputTarget
val leafTargets: Set<LeafTarget>
val sharedTarget: SharedTarget
init {
originalModules.keys.let { targets ->
check(targets.isNotEmpty())
leafTargets = targets.filterIsInstance<InputTarget>().toSet()
leafTargets = targets.filterIsInstance<LeafTarget>().toSet()
check(targets.size == leafTargets.size)
}
sharedTarget = OutputTarget(leafTargets)
sharedTarget = SharedTarget(leafTargets)
val allTargets = leafTargets + sharedTarget
check(commonizedModules.keys == allTargets)
@@ -247,7 +247,7 @@ private class AnalyzedModules(
}
private fun createModules(
sharedTarget: OutputTarget,
sharedTarget: SharedTarget,
moduleRoots: Map<out Target, SourceModuleRoot>,
dependencies: AnalyzedModuleDependencies,
parentDisposable: Disposable,
@@ -274,7 +274,7 @@ private class AnalyzedModules(
}
private fun createModule(
sharedTarget: OutputTarget,
sharedTarget: SharedTarget,
currentTarget: Target,
moduleRoot: SourceModuleRoot,
dependencies: AnalyzedModuleDependencies,
@@ -322,7 +322,7 @@ private class AnalyzedModules(
}
private class DependenciesContainerImpl(
sharedTarget: OutputTarget,
sharedTarget: SharedTarget,
currentTarget: Target,
dependencies: AnalyzedModuleDependencies
) : CommonDependenciesContainer {
@@ -64,7 +64,7 @@ class CommonizerFacadeTest {
forEach { (targetName, moduleNames) ->
it.addTarget(
TargetProvider(
target = InputTarget(targetName),
target = LeafTarget(targetName),
builtInsClass = DefaultBuiltIns::class.java,
builtInsProvider = BuiltInsProvider.defaultBuiltInsProvider,
modulesProvider = MockModulesProvider(moduleNames),
@@ -9,8 +9,8 @@ import org.jetbrains.kotlin.builtins.DefaultBuiltIns
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.builtins.jvm.JvmBuiltIns
import org.jetbrains.kotlin.builtins.konan.KonanBuiltIns
import org.jetbrains.kotlin.descriptors.commonizer.InputTarget
import org.jetbrains.kotlin.descriptors.commonizer.OutputTarget
import org.jetbrains.kotlin.descriptors.commonizer.LeafTarget
import org.jetbrains.kotlin.descriptors.commonizer.SharedTarget
import org.jetbrains.kotlin.descriptors.commonizer.Target
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirRoot
import org.jetbrains.kotlin.descriptors.commonizer.cir.factory.CirRootFactory
@@ -24,129 +24,129 @@ class RootCommonizerTest : AbstractCommonizerTest<CirRoot, CirRoot>() {
@Test
fun allAreNative() = doTestSuccess(
expected = KONAN_BUILT_INS.toMock(
OutputTarget(
SharedTarget(
setOf(
InputTarget("ios_x64", KonanTarget.IOS_X64),
InputTarget("ios_arm64", KonanTarget.IOS_ARM64),
InputTarget("ios_arm32", KonanTarget.IOS_ARM32)
LeafTarget("ios_x64", KonanTarget.IOS_X64),
LeafTarget("ios_arm64", KonanTarget.IOS_ARM64),
LeafTarget("ios_arm32", KonanTarget.IOS_ARM32)
)
)
),
KONAN_BUILT_INS.toMock(InputTarget("ios_x64", KonanTarget.IOS_X64)),
KONAN_BUILT_INS.toMock(InputTarget("ios_arm64", KonanTarget.IOS_ARM64)),
KONAN_BUILT_INS.toMock(InputTarget("ios_arm32", KonanTarget.IOS_ARM32))
KONAN_BUILT_INS.toMock(LeafTarget("ios_x64", KonanTarget.IOS_X64)),
KONAN_BUILT_INS.toMock(LeafTarget("ios_arm64", KonanTarget.IOS_ARM64)),
KONAN_BUILT_INS.toMock(LeafTarget("ios_arm32", KonanTarget.IOS_ARM32))
)
@Test
fun jvmAndNative1() = doTestSuccess(
expected = DEFAULT_BUILT_INS.toMock(
OutputTarget(
SharedTarget(
setOf(
InputTarget("jvm1"),
InputTarget("ios_x64", KonanTarget.IOS_X64),
InputTarget("jvm2")
LeafTarget("jvm1"),
LeafTarget("ios_x64", KonanTarget.IOS_X64),
LeafTarget("jvm2")
)
)
),
JVM_BUILT_INS.toMock(InputTarget("jvm1")),
KONAN_BUILT_INS.toMock(InputTarget("ios_x64", KonanTarget.IOS_X64)),
JVM_BUILT_INS.toMock(InputTarget("jvm2"))
JVM_BUILT_INS.toMock(LeafTarget("jvm1")),
KONAN_BUILT_INS.toMock(LeafTarget("ios_x64", KonanTarget.IOS_X64)),
JVM_BUILT_INS.toMock(LeafTarget("jvm2"))
)
@Test
fun jvmAndNative2() = doTestSuccess(
expected = DEFAULT_BUILT_INS.toMock(
OutputTarget(
SharedTarget(
setOf(
InputTarget("ios_x64", KonanTarget.IOS_X64),
InputTarget("jvm"),
InputTarget("ios_arm64", KonanTarget.IOS_ARM64)
LeafTarget("ios_x64", KonanTarget.IOS_X64),
LeafTarget("jvm"),
LeafTarget("ios_arm64", KonanTarget.IOS_ARM64)
)
)
),
KONAN_BUILT_INS.toMock(InputTarget("ios_x64", KonanTarget.IOS_X64)),
JVM_BUILT_INS.toMock(InputTarget("jvm")),
KONAN_BUILT_INS.toMock(InputTarget("ios_arm64", KonanTarget.IOS_ARM64))
KONAN_BUILT_INS.toMock(LeafTarget("ios_x64", KonanTarget.IOS_X64)),
JVM_BUILT_INS.toMock(LeafTarget("jvm")),
KONAN_BUILT_INS.toMock(LeafTarget("ios_arm64", KonanTarget.IOS_ARM64))
)
@Test
fun noNative1() = doTestSuccess(
expected = DEFAULT_BUILT_INS.toMock(
OutputTarget(
SharedTarget(
setOf(
InputTarget("default1"),
InputTarget("default2"),
InputTarget("default3")
LeafTarget("default1"),
LeafTarget("default2"),
LeafTarget("default3")
)
)
),
DEFAULT_BUILT_INS.toMock(InputTarget("default1")),
DEFAULT_BUILT_INS.toMock(InputTarget("default2")),
DEFAULT_BUILT_INS.toMock(InputTarget("default3"))
DEFAULT_BUILT_INS.toMock(LeafTarget("default1")),
DEFAULT_BUILT_INS.toMock(LeafTarget("default2")),
DEFAULT_BUILT_INS.toMock(LeafTarget("default3"))
)
@Test
fun noNative2() = doTestSuccess(
expected = DEFAULT_BUILT_INS.toMock(
OutputTarget(
SharedTarget(
setOf(
InputTarget("jvm1"),
InputTarget("default"),
InputTarget("jvm2")
LeafTarget("jvm1"),
LeafTarget("default"),
LeafTarget("jvm2")
)
)
),
JVM_BUILT_INS.toMock(InputTarget("jvm1")),
DEFAULT_BUILT_INS.toMock(InputTarget("default")),
JVM_BUILT_INS.toMock(InputTarget("jvm2"))
JVM_BUILT_INS.toMock(LeafTarget("jvm1")),
DEFAULT_BUILT_INS.toMock(LeafTarget("default")),
JVM_BUILT_INS.toMock(LeafTarget("jvm2"))
)
@Test
fun noNative3() = doTestSuccess(
expected = DEFAULT_BUILT_INS.toMock(
OutputTarget(
SharedTarget(
setOf(
InputTarget("jvm1"),
InputTarget("jvm2"),
InputTarget("jvm3")
LeafTarget("jvm1"),
LeafTarget("jvm2"),
LeafTarget("jvm3")
)
)
),
JVM_BUILT_INS.toMock(InputTarget("jvm1")),
JVM_BUILT_INS.toMock(InputTarget("jvm2")),
JVM_BUILT_INS.toMock(InputTarget("jvm3"))
JVM_BUILT_INS.toMock(LeafTarget("jvm1")),
JVM_BUILT_INS.toMock(LeafTarget("jvm2")),
JVM_BUILT_INS.toMock(LeafTarget("jvm3"))
)
@Test(expected = IllegalStateException::class)
fun misconfiguration1() = doTestSuccess(
expected = KONAN_BUILT_INS.toMock(
OutputTarget(
SharedTarget(
setOf(
InputTarget("ios_x64", KonanTarget.IOS_X64),
InputTarget("ios_arm64", KonanTarget.IOS_ARM64),
InputTarget("ios_arm32", KonanTarget.IOS_ARM32)
LeafTarget("ios_x64", KonanTarget.IOS_X64),
LeafTarget("ios_arm64", KonanTarget.IOS_ARM64),
LeafTarget("ios_arm32", KonanTarget.IOS_ARM32)
)
)
),
KONAN_BUILT_INS.toMock(InputTarget("ios_x64")),
KONAN_BUILT_INS.toMock(InputTarget("ios_arm64", KonanTarget.IOS_ARM64)),
KONAN_BUILT_INS.toMock(InputTarget("ios_arm32", KonanTarget.IOS_ARM32))
KONAN_BUILT_INS.toMock(LeafTarget("ios_x64")),
KONAN_BUILT_INS.toMock(LeafTarget("ios_arm64", KonanTarget.IOS_ARM64)),
KONAN_BUILT_INS.toMock(LeafTarget("ios_arm32", KonanTarget.IOS_ARM32))
)
@Test(expected = IllegalStateException::class)
fun misconfiguration2() = doTestSuccess(
expected = DEFAULT_BUILT_INS.toMock(
OutputTarget(
SharedTarget(
setOf(
InputTarget("jvm1"),
InputTarget("jvm2"),
InputTarget("jvm3")
LeafTarget("jvm1"),
LeafTarget("jvm2"),
LeafTarget("jvm3")
)
)
),
JVM_BUILT_INS.toMock(InputTarget("jvm1", KonanTarget.IOS_X64)),
JVM_BUILT_INS.toMock(InputTarget("jvm2")),
JVM_BUILT_INS.toMock(InputTarget("jvm3"))
JVM_BUILT_INS.toMock(LeafTarget("jvm1", KonanTarget.IOS_X64)),
JVM_BUILT_INS.toMock(LeafTarget("jvm2")),
JVM_BUILT_INS.toMock(LeafTarget("jvm3"))
)
override fun createCommonizer() = RootCommonizer()
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.annotations.Annotations
import org.jetbrains.kotlin.descriptors.commonizer.BuiltInsProvider
import org.jetbrains.kotlin.descriptors.commonizer.InputTarget
import org.jetbrains.kotlin.descriptors.commonizer.LeafTarget
import org.jetbrains.kotlin.descriptors.commonizer.ModulesProvider
import org.jetbrains.kotlin.descriptors.commonizer.ModulesProvider.ModuleInfo
import org.jetbrains.kotlin.descriptors.commonizer.builder.*
@@ -44,7 +44,7 @@ internal fun mockClassType(
val targetComponents = TargetDeclarationsBuilderComponents(
storageManager = LockBasedStorageManager.NO_LOCKS,
target = InputTarget("Arbitrary target"),
target = LeafTarget("Arbitrary target"),
builtIns = DefaultBuiltIns.Instance,
lazyClassifierLookupTable = LockBasedStorageManager.NO_LOCKS.createLazyValue { LazyClassifierLookupTable(emptyMap()) },
index = 0,