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