[Commonizer] Don't commonize built-ins
This commit is contained in:
@@ -5,29 +5,15 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.descriptors.commonizer
|
package org.jetbrains.kotlin.descriptors.commonizer
|
||||||
|
|
||||||
import org.jetbrains.kotlin.builtins.DefaultBuiltIns
|
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
|
||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
class TargetProvider(
|
class TargetProvider(
|
||||||
val target: LeafTarget,
|
val target: LeafTarget,
|
||||||
val builtInsClass: Class<out KotlinBuiltIns>,
|
|
||||||
val builtInsProvider: BuiltInsProvider,
|
|
||||||
val modulesProvider: ModulesProvider,
|
val modulesProvider: ModulesProvider,
|
||||||
val dependeeModulesProvider: ModulesProvider?
|
val dependeeModulesProvider: ModulesProvider?
|
||||||
)
|
)
|
||||||
|
|
||||||
interface BuiltInsProvider {
|
|
||||||
fun loadBuiltIns(): KotlinBuiltIns
|
|
||||||
|
|
||||||
companion object {
|
|
||||||
val defaultBuiltInsProvider = object : BuiltInsProvider {
|
|
||||||
override fun loadBuiltIns() = DefaultBuiltIns.Instance
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
interface ModulesProvider {
|
interface ModulesProvider {
|
||||||
class ModuleInfo(
|
class ModuleInfo(
|
||||||
val name: String,
|
val name: String,
|
||||||
|
|||||||
@@ -5,11 +5,8 @@
|
|||||||
|
|
||||||
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.CommonizerTarget
|
import org.jetbrains.kotlin.descriptors.commonizer.CommonizerTarget
|
||||||
|
|
||||||
interface CirRoot : CirDeclaration {
|
interface CirRoot : CirDeclaration {
|
||||||
val target: CommonizerTarget
|
val target: CommonizerTarget
|
||||||
val builtInsClass: String
|
|
||||||
val builtInsProvider: BuiltInsProvider
|
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-18
@@ -5,27 +5,10 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.descriptors.commonizer.cir.factory
|
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.LeafTarget
|
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.CommonizerTarget
|
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: CommonizerTarget): CirRoot = CirRootImpl(target = target)
|
||||||
target: CommonizerTarget,
|
|
||||||
builtInsClass: String,
|
|
||||||
builtInsProvider: BuiltInsProvider
|
|
||||||
): CirRoot {
|
|
||||||
if (target is LeafTarget) {
|
|
||||||
check((target.konanTarget != null) == (builtInsClass == KonanBuiltIns::class.java.name))
|
|
||||||
}
|
|
||||||
|
|
||||||
return CirRootImpl(
|
|
||||||
target = target,
|
|
||||||
builtInsClass = builtInsClass,
|
|
||||||
builtInsProvider = builtInsProvider
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-4
@@ -5,12 +5,9 @@
|
|||||||
|
|
||||||
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.CommonizerTarget
|
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: CommonizerTarget,
|
override val target: CommonizerTarget
|
||||||
override val builtInsClass: String,
|
|
||||||
override val builtInsProvider: BuiltInsProvider
|
|
||||||
) : CirRoot
|
) : CirRoot
|
||||||
|
|||||||
+1
-18
@@ -5,9 +5,6 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.descriptors.commonizer.core
|
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.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.cir.CirRoot
|
import org.jetbrains.kotlin.descriptors.commonizer.cir.CirRoot
|
||||||
@@ -15,31 +12,17 @@ import org.jetbrains.kotlin.descriptors.commonizer.cir.factory.CirRootFactory
|
|||||||
|
|
||||||
class RootCommonizer : AbstractStandardCommonizer<CirRoot, CirRoot>() {
|
class RootCommonizer : AbstractStandardCommonizer<CirRoot, CirRoot>() {
|
||||||
private val leafTargets = mutableSetOf<LeafTarget>()
|
private val leafTargets = mutableSetOf<LeafTarget>()
|
||||||
private var konanBuiltInsProvider: BuiltInsProvider? = null
|
|
||||||
|
|
||||||
override fun commonizationResult() = CirRootFactory.create(
|
override fun commonizationResult() = CirRootFactory.create(
|
||||||
target = SharedTarget(leafTargets),
|
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) {
|
override fun initialize(first: CirRoot) {
|
||||||
leafTargets += first.target as LeafTarget
|
leafTargets += first.target as LeafTarget
|
||||||
konanBuiltInsProvider = first.konanBuiltInsProvider
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun doCommonizeWith(next: CirRoot): Boolean {
|
override fun doCommonizeWith(next: CirRoot): Boolean {
|
||||||
leafTargets += next.target as LeafTarget
|
leafTargets += next.target as LeafTarget
|
||||||
|
|
||||||
// keep the first met KonanBuiltIns when all targets are Kotlin/Native
|
|
||||||
// otherwise use DefaultBuiltIns
|
|
||||||
if (konanBuiltInsProvider != null && next.konanBuiltInsProvider == null) {
|
|
||||||
konanBuiltInsProvider = null
|
|
||||||
}
|
|
||||||
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
private inline val CirRoot.konanBuiltInsProvider
|
|
||||||
get() = if (builtInsClass == KonanBuiltIns::class.java.name) builtInsProvider else null
|
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-5
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.descriptors.commonizer.konan
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.backend.common.serialization.metadata.KlibMetadataVersion
|
import org.jetbrains.kotlin.backend.common.serialization.metadata.KlibMetadataVersion
|
||||||
import org.jetbrains.kotlin.backend.common.serialization.metadata.metadataVersion
|
import org.jetbrains.kotlin.backend.common.serialization.metadata.metadataVersion
|
||||||
import org.jetbrains.kotlin.builtins.konan.KonanBuiltIns
|
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.*
|
import org.jetbrains.kotlin.descriptors.commonizer.*
|
||||||
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.*
|
import org.jetbrains.kotlin.descriptors.commonizer.stats.*
|
||||||
@@ -138,8 +137,7 @@ class NativeDistributionCommonizer(
|
|||||||
val parameters = CommonizerParameters(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)
|
dependeeModulesProvider = NativeDistributionStdlibProvider(storageManager, allLibraries.stdlib)
|
||||||
dependeeModulesProvider = stdlibProvider
|
|
||||||
|
|
||||||
allLibraries.librariesByTargets.forEach { (target, librariesToCommonize) ->
|
allLibraries.librariesByTargets.forEach { (target, librariesToCommonize) ->
|
||||||
if (librariesToCommonize.libraries.isEmpty()) return@forEach
|
if (librariesToCommonize.libraries.isEmpty()) return@forEach
|
||||||
@@ -149,8 +147,6 @@ class NativeDistributionCommonizer(
|
|||||||
addTarget(
|
addTarget(
|
||||||
TargetProvider(
|
TargetProvider(
|
||||||
target = target,
|
target = target,
|
||||||
builtInsClass = KonanBuiltIns::class.java,
|
|
||||||
builtInsProvider = stdlibProvider,
|
|
||||||
modulesProvider = modulesProvider,
|
modulesProvider = modulesProvider,
|
||||||
dependeeModulesProvider = null // stdlib is already set as common dependency
|
dependeeModulesProvider = null // stdlib is already set as common dependency
|
||||||
)
|
)
|
||||||
|
|||||||
+1
-4
@@ -5,10 +5,8 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.descriptors.commonizer.konan
|
package org.jetbrains.kotlin.descriptors.commonizer.konan
|
||||||
|
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
|
||||||
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.BuiltInsProvider
|
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.ModulesProvider
|
import org.jetbrains.kotlin.descriptors.commonizer.ModulesProvider
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.ModulesProvider.ModuleInfo
|
import org.jetbrains.kotlin.descriptors.commonizer.ModulesProvider.ModuleInfo
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.utils.NativeFactories
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.NativeFactories
|
||||||
@@ -19,14 +17,13 @@ import java.io.File
|
|||||||
internal class NativeDistributionStdlibProvider(
|
internal class NativeDistributionStdlibProvider(
|
||||||
private val storageManager: StorageManager,
|
private val storageManager: StorageManager,
|
||||||
private val stdlib: NativeLibrary
|
private val stdlib: NativeLibrary
|
||||||
) : BuiltInsProvider, ModulesProvider {
|
) : ModulesProvider {
|
||||||
private val moduleInfo = ModuleInfo(
|
private val moduleInfo = ModuleInfo(
|
||||||
name = KONAN_STDLIB_NAME,
|
name = KONAN_STDLIB_NAME,
|
||||||
originalLocation = File(stdlib.library.libraryFile.absolutePath),
|
originalLocation = File(stdlib.library.libraryFile.absolutePath),
|
||||||
cInteropAttributes = null
|
cInteropAttributes = null
|
||||||
)
|
)
|
||||||
|
|
||||||
override fun loadBuiltIns(): KotlinBuiltIns = loadStdlibModule().builtIns
|
|
||||||
override fun loadModuleInfos(): Map<String, ModuleInfo> = mapOf(KONAN_STDLIB_NAME to moduleInfo)
|
override fun loadModuleInfos(): Map<String, ModuleInfo> = mapOf(KONAN_STDLIB_NAME to moduleInfo)
|
||||||
|
|
||||||
override fun loadModules(dependencies: Collection<ModuleDescriptor>): Map<String, ModuleDescriptor> {
|
override fun loadModules(dependencies: Collection<ModuleDescriptor>): Map<String, ModuleDescriptor> {
|
||||||
|
|||||||
+1
-5
@@ -102,11 +102,7 @@ class CirTreeMerger(
|
|||||||
commonModuleInfos: Map<String, ModuleInfo>,
|
commonModuleInfos: Map<String, ModuleInfo>,
|
||||||
dependeeModules: Collection<ModuleDescriptor>
|
dependeeModules: Collection<ModuleDescriptor>
|
||||||
) {
|
) {
|
||||||
rootNode.targetDeclarations[targetIndex] = CirRootFactory.create(
|
rootNode.targetDeclarations[targetIndex] = CirRootFactory.create(targetProvider.target)
|
||||||
targetProvider.target,
|
|
||||||
targetProvider.builtInsClass.name,
|
|
||||||
targetProvider.builtInsProvider
|
|
||||||
)
|
|
||||||
|
|
||||||
val targetDependeeModules = targetProvider.dependeeModulesProvider?.loadModules(dependeeModules)?.values.orEmpty()
|
val targetDependeeModules = targetProvider.dependeeModulesProvider?.loadModules(dependeeModules)?.values.orEmpty()
|
||||||
val allDependeeModules = targetDependeeModules + dependeeModules
|
val allDependeeModules = targetDependeeModules + dependeeModules
|
||||||
|
|||||||
-2
@@ -212,8 +212,6 @@ private class AnalyzedModules(
|
|||||||
parameters.addTarget(
|
parameters.addTarget(
|
||||||
TargetProvider(
|
TargetProvider(
|
||||||
target = leafTarget,
|
target = leafTarget,
|
||||||
builtInsClass = originalModule.builtIns::class.java,
|
|
||||||
builtInsProvider = MockBuiltInsProvider(originalModule.builtIns),
|
|
||||||
modulesProvider = MockModulesProvider.create(originalModule),
|
modulesProvider = MockModulesProvider.create(originalModule),
|
||||||
dependeeModulesProvider = dependeeModules[leafTarget]?.let(MockModulesProvider::create)
|
dependeeModulesProvider = dependeeModules[leafTarget]?.let(MockModulesProvider::create)
|
||||||
)
|
)
|
||||||
|
|||||||
-3
@@ -5,7 +5,6 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.descriptors.commonizer
|
package org.jetbrains.kotlin.descriptors.commonizer
|
||||||
|
|
||||||
import org.jetbrains.kotlin.builtins.DefaultBuiltIns
|
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.utils.MockModulesProvider
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.MockModulesProvider
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.utils.assertCommonizationPerformed
|
import org.jetbrains.kotlin.descriptors.commonizer.utils.assertCommonizationPerformed
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
@@ -65,8 +64,6 @@ class CommonizerFacadeTest {
|
|||||||
it.addTarget(
|
it.addTarget(
|
||||||
TargetProvider(
|
TargetProvider(
|
||||||
target = LeafTarget(targetName),
|
target = LeafTarget(targetName),
|
||||||
builtInsClass = DefaultBuiltIns::class.java,
|
|
||||||
builtInsProvider = BuiltInsProvider.defaultBuiltInsProvider,
|
|
||||||
modulesProvider = MockModulesProvider.create(moduleNames),
|
modulesProvider = MockModulesProvider.create(moduleNames),
|
||||||
dependeeModulesProvider = null
|
dependeeModulesProvider = null
|
||||||
)
|
)
|
||||||
|
|||||||
+3
-1
@@ -12,6 +12,8 @@ import kotlin.test.fail
|
|||||||
|
|
||||||
abstract class AbstractCommonizerTest<T, R> {
|
abstract class AbstractCommonizerTest<T, R> {
|
||||||
|
|
||||||
|
class ObjectsNotEqual(message: String) : Throwable(message)
|
||||||
|
|
||||||
@Test(expected = IllegalCommonizerStateException::class)
|
@Test(expected = IllegalCommonizerStateException::class)
|
||||||
fun failOnNoVariantsSubmitted() {
|
fun failOnNoVariantsSubmitted() {
|
||||||
createCommonizer().result
|
createCommonizer().result
|
||||||
@@ -32,7 +34,7 @@ abstract class AbstractCommonizerTest<T, R> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val actual = commonized.result
|
val actual = commonized.result
|
||||||
if (!isEqual(expected, actual)) fail("Expected: $expected\nActual: $actual")
|
if (!isEqual(expected, actual)) throw ObjectsNotEqual("Expected: $expected\nActual: $actual")
|
||||||
}
|
}
|
||||||
|
|
||||||
protected fun doTestFailure(
|
protected fun doTestFailure(
|
||||||
|
|||||||
+77
-113
@@ -5,169 +5,133 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.descriptors.commonizer.core
|
package org.jetbrains.kotlin.descriptors.commonizer.core
|
||||||
|
|
||||||
import org.jetbrains.kotlin.builtins.DefaultBuiltIns
|
import org.jetbrains.kotlin.descriptors.commonizer.CommonizerTarget
|
||||||
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.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.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.konan.target.KonanTarget
|
import org.jetbrains.kotlin.konan.target.KonanTarget
|
||||||
import org.jetbrains.kotlin.storage.LockBasedStorageManager
|
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
|
|
||||||
class RootCommonizerTest : AbstractCommonizerTest<CirRoot, CirRoot>() {
|
class RootCommonizerTest : AbstractCommonizerTest<CirRoot, CirRoot>() {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun allAreNative() = doTestSuccess(
|
fun allAreNative() = doTestSuccess(
|
||||||
expected = KONAN_BUILT_INS.toMock(
|
expected = SharedTarget(
|
||||||
SharedTarget(
|
setOf(
|
||||||
setOf(
|
LeafTarget("ios_x64", KonanTarget.IOS_X64),
|
||||||
LeafTarget("ios_x64", KonanTarget.IOS_X64),
|
LeafTarget("ios_arm64", KonanTarget.IOS_ARM64),
|
||||||
LeafTarget("ios_arm64", KonanTarget.IOS_ARM64),
|
LeafTarget("ios_arm32", KonanTarget.IOS_ARM32)
|
||||||
LeafTarget("ios_arm32", KonanTarget.IOS_ARM32)
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
),
|
).toMock(),
|
||||||
KONAN_BUILT_INS.toMock(LeafTarget("ios_x64", KonanTarget.IOS_X64)),
|
LeafTarget("ios_x64", KonanTarget.IOS_X64).toMock(),
|
||||||
KONAN_BUILT_INS.toMock(LeafTarget("ios_arm64", KonanTarget.IOS_ARM64)),
|
LeafTarget("ios_arm64", KonanTarget.IOS_ARM64).toMock(),
|
||||||
KONAN_BUILT_INS.toMock(LeafTarget("ios_arm32", KonanTarget.IOS_ARM32))
|
LeafTarget("ios_arm32", KonanTarget.IOS_ARM32).toMock()
|
||||||
)
|
)
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun jvmAndNative1() = doTestSuccess(
|
fun jvmAndNative1() = doTestSuccess(
|
||||||
expected = DEFAULT_BUILT_INS.toMock(
|
expected = SharedTarget(
|
||||||
SharedTarget(
|
setOf(
|
||||||
setOf(
|
LeafTarget("jvm1"),
|
||||||
LeafTarget("jvm1"),
|
LeafTarget("ios_x64", KonanTarget.IOS_X64),
|
||||||
LeafTarget("ios_x64", KonanTarget.IOS_X64),
|
LeafTarget("jvm2")
|
||||||
LeafTarget("jvm2")
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
),
|
).toMock(),
|
||||||
JVM_BUILT_INS.toMock(LeafTarget("jvm1")),
|
LeafTarget("jvm1").toMock(),
|
||||||
KONAN_BUILT_INS.toMock(LeafTarget("ios_x64", KonanTarget.IOS_X64)),
|
LeafTarget("ios_x64", KonanTarget.IOS_X64).toMock(),
|
||||||
JVM_BUILT_INS.toMock(LeafTarget("jvm2"))
|
LeafTarget("jvm2").toMock()
|
||||||
)
|
)
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun jvmAndNative2() = doTestSuccess(
|
fun jvmAndNative2() = doTestSuccess(
|
||||||
expected = DEFAULT_BUILT_INS.toMock(
|
expected = SharedTarget(
|
||||||
SharedTarget(
|
setOf(
|
||||||
setOf(
|
LeafTarget("ios_x64", KonanTarget.IOS_X64),
|
||||||
LeafTarget("ios_x64", KonanTarget.IOS_X64),
|
LeafTarget("jvm"),
|
||||||
LeafTarget("jvm"),
|
LeafTarget("ios_arm64", KonanTarget.IOS_ARM64)
|
||||||
LeafTarget("ios_arm64", KonanTarget.IOS_ARM64)
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
),
|
).toMock(),
|
||||||
KONAN_BUILT_INS.toMock(LeafTarget("ios_x64", KonanTarget.IOS_X64)),
|
LeafTarget("ios_x64", KonanTarget.IOS_X64).toMock(),
|
||||||
JVM_BUILT_INS.toMock(LeafTarget("jvm")),
|
LeafTarget("jvm").toMock(),
|
||||||
KONAN_BUILT_INS.toMock(LeafTarget("ios_arm64", KonanTarget.IOS_ARM64))
|
LeafTarget("ios_arm64", KonanTarget.IOS_ARM64).toMock()
|
||||||
)
|
)
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun noNative1() = doTestSuccess(
|
fun noNative1() = doTestSuccess(
|
||||||
expected = DEFAULT_BUILT_INS.toMock(
|
expected = SharedTarget(
|
||||||
SharedTarget(
|
setOf(
|
||||||
setOf(
|
LeafTarget("default1"),
|
||||||
LeafTarget("default1"),
|
LeafTarget("default2"),
|
||||||
LeafTarget("default2"),
|
LeafTarget("default3")
|
||||||
LeafTarget("default3")
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
),
|
).toMock(),
|
||||||
DEFAULT_BUILT_INS.toMock(LeafTarget("default1")),
|
LeafTarget("default1").toMock(),
|
||||||
DEFAULT_BUILT_INS.toMock(LeafTarget("default2")),
|
LeafTarget("default2").toMock(),
|
||||||
DEFAULT_BUILT_INS.toMock(LeafTarget("default3"))
|
LeafTarget("default3").toMock()
|
||||||
)
|
)
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun noNative2() = doTestSuccess(
|
fun noNative2() = doTestSuccess(
|
||||||
expected = DEFAULT_BUILT_INS.toMock(
|
expected = SharedTarget(
|
||||||
SharedTarget(
|
setOf(
|
||||||
setOf(
|
LeafTarget("jvm1"),
|
||||||
LeafTarget("jvm1"),
|
LeafTarget("default"),
|
||||||
LeafTarget("default"),
|
LeafTarget("jvm2")
|
||||||
LeafTarget("jvm2")
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
),
|
).toMock(),
|
||||||
JVM_BUILT_INS.toMock(LeafTarget("jvm1")),
|
LeafTarget("jvm1").toMock(),
|
||||||
DEFAULT_BUILT_INS.toMock(LeafTarget("default")),
|
LeafTarget("default").toMock(),
|
||||||
JVM_BUILT_INS.toMock(LeafTarget("jvm2"))
|
LeafTarget("jvm2").toMock()
|
||||||
)
|
)
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun noNative3() = doTestSuccess(
|
fun noNative3() = doTestSuccess(
|
||||||
expected = DEFAULT_BUILT_INS.toMock(
|
expected = SharedTarget(
|
||||||
SharedTarget(
|
setOf(
|
||||||
setOf(
|
LeafTarget("jvm1"),
|
||||||
LeafTarget("jvm1"),
|
LeafTarget("jvm2"),
|
||||||
LeafTarget("jvm2"),
|
LeafTarget("jvm3")
|
||||||
LeafTarget("jvm3")
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
),
|
).toMock(),
|
||||||
JVM_BUILT_INS.toMock(LeafTarget("jvm1")),
|
LeafTarget("jvm1").toMock(),
|
||||||
JVM_BUILT_INS.toMock(LeafTarget("jvm2")),
|
LeafTarget("jvm2").toMock(),
|
||||||
JVM_BUILT_INS.toMock(LeafTarget("jvm3"))
|
LeafTarget("jvm3").toMock()
|
||||||
)
|
)
|
||||||
|
|
||||||
@Test(expected = IllegalStateException::class)
|
@Test(expected = ObjectsNotEqual::class)
|
||||||
fun misconfiguration1() = doTestSuccess(
|
fun misconfiguration1() = doTestSuccess(
|
||||||
expected = KONAN_BUILT_INS.toMock(
|
expected = SharedTarget(
|
||||||
SharedTarget(
|
setOf(
|
||||||
setOf(
|
LeafTarget("ios_x64", KonanTarget.IOS_X64),
|
||||||
LeafTarget("ios_x64", KonanTarget.IOS_X64),
|
LeafTarget("ios_arm64", KonanTarget.IOS_ARM64),
|
||||||
LeafTarget("ios_arm64", KonanTarget.IOS_ARM64),
|
LeafTarget("ios_arm32", KonanTarget.IOS_ARM32)
|
||||||
LeafTarget("ios_arm32", KonanTarget.IOS_ARM32)
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
),
|
).toMock(),
|
||||||
KONAN_BUILT_INS.toMock(LeafTarget("ios_x64")),
|
LeafTarget("ios_x64").toMock(), // KonanTarget is missing here!
|
||||||
KONAN_BUILT_INS.toMock(LeafTarget("ios_arm64", KonanTarget.IOS_ARM64)),
|
LeafTarget("ios_arm64", KonanTarget.IOS_ARM64).toMock(),
|
||||||
KONAN_BUILT_INS.toMock(LeafTarget("ios_arm32", KonanTarget.IOS_ARM32))
|
LeafTarget("ios_arm32", KonanTarget.IOS_ARM32).toMock()
|
||||||
)
|
)
|
||||||
|
|
||||||
@Test(expected = IllegalStateException::class)
|
@Test(expected = ObjectsNotEqual::class)
|
||||||
fun misconfiguration2() = doTestSuccess(
|
fun misconfiguration2() = doTestSuccess(
|
||||||
expected = DEFAULT_BUILT_INS.toMock(
|
expected = SharedTarget(
|
||||||
SharedTarget(
|
setOf(
|
||||||
setOf(
|
LeafTarget("jvm1"),
|
||||||
LeafTarget("jvm1"),
|
LeafTarget("jvm2"),
|
||||||
LeafTarget("jvm2"),
|
LeafTarget("jvm3")
|
||||||
LeafTarget("jvm3")
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
),
|
).toMock(),
|
||||||
JVM_BUILT_INS.toMock(LeafTarget("jvm1", KonanTarget.IOS_X64)),
|
LeafTarget("jvm1", KonanTarget.IOS_X64).toMock(), // mistakenly specified KonanTarget!
|
||||||
JVM_BUILT_INS.toMock(LeafTarget("jvm2")),
|
LeafTarget("jvm2").toMock(),
|
||||||
JVM_BUILT_INS.toMock(LeafTarget("jvm3"))
|
LeafTarget("jvm3").toMock()
|
||||||
)
|
)
|
||||||
|
|
||||||
override fun createCommonizer() = RootCommonizer()
|
override fun createCommonizer() = RootCommonizer()
|
||||||
|
|
||||||
override fun isEqual(a: CirRoot?, b: CirRoot?) =
|
override fun isEqual(a: CirRoot?, b: CirRoot?) = (a === b) || (a != null && b != null && a.target == b.target)
|
||||||
(a === b)
|
|
||||||
|| (a != null && b != null
|
|
||||||
&& a.target == b.target
|
|
||||||
&& a.builtInsClass == b.builtInsClass
|
|
||||||
&& a.builtInsClass == a.builtInsProvider.loadBuiltIns()::class.java.name
|
|
||||||
&& a.builtInsProvider.loadBuiltIns()::class.java == b.builtInsProvider.loadBuiltIns()::class.java)
|
|
||||||
|
|
||||||
private companion object {
|
private companion object {
|
||||||
inline val KONAN_BUILT_INS get() = KonanBuiltIns(LockBasedStorageManager.NO_LOCKS)
|
fun CommonizerTarget.toMock() = CirRootFactory.create(target = this)
|
||||||
inline val JVM_BUILT_INS get() = JvmBuiltIns(LockBasedStorageManager.NO_LOCKS, JvmBuiltIns.Kind.FROM_CLASS_LOADER)
|
|
||||||
inline val DEFAULT_BUILT_INS get() = DefaultBuiltIns.Instance
|
|
||||||
|
|
||||||
fun KotlinBuiltIns.toMock(target: CommonizerTarget) = CirRootFactory.create(
|
|
||||||
target = target,
|
|
||||||
builtInsClass = this::class.java.name,
|
|
||||||
builtInsProvider = MockBuiltInsProvider(this)
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,10 +5,8 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.descriptors.commonizer.utils
|
package org.jetbrains.kotlin.descriptors.commonizer.utils
|
||||||
|
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.BuiltInsProvider
|
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.ModulesProvider
|
import org.jetbrains.kotlin.descriptors.commonizer.ModulesProvider
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.ModulesProvider.ModuleInfo
|
import org.jetbrains.kotlin.descriptors.commonizer.ModulesProvider.ModuleInfo
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.cir.factory.CirClassFactory
|
import org.jetbrains.kotlin.descriptors.commonizer.cir.factory.CirClassFactory
|
||||||
@@ -150,10 +148,6 @@ internal val MOCK_CLASSIFIERS = CirKnownClassifiers(
|
|||||||
dependeeLibraries = emptyMap()
|
dependeeLibraries = emptyMap()
|
||||||
)
|
)
|
||||||
|
|
||||||
internal class MockBuiltInsProvider(private val builtIns: KotlinBuiltIns) : BuiltInsProvider {
|
|
||||||
override fun loadBuiltIns() = builtIns
|
|
||||||
}
|
|
||||||
|
|
||||||
internal class MockModulesProvider private constructor(
|
internal class MockModulesProvider private constructor(
|
||||||
private val modules: Map<String, ModuleDescriptor>,
|
private val modules: Map<String, ModuleDescriptor>,
|
||||||
) : ModulesProvider {
|
) : ModulesProvider {
|
||||||
|
|||||||
Reference in New Issue
Block a user