K2: add reproducer of KT-54212

This commit is contained in:
Mikhail Glukhikh
2022-09-28 15:22:44 +02:00
parent f68f06a93f
commit 75a29434bd
5 changed files with 204 additions and 0 deletions
@@ -0,0 +1,68 @@
// FILE: AbstractToolConfig.kt
abstract class AbstractToolConfig {
private val platformManager = platformManager()
private val targetManager = platformManager.targetManager()
val target = targetManager.target
protected val platform = platformManager.platform(target)
val llvmHome = platform.absoluteLlvmHome
abstract fun platformManager(): PlatformManager
}
// FILE: Platform.kt
class Platform(val configurables: Configurables) : Configurables by configurables
abstract class PlatformManager : HostManager() {
private val loaders = enabled.map {
it to loadConfigurables(it)
}.toMap()
private val platforms = loaders.map {
it.key to Platform(it.value)
}.toMap()
abstract fun targetManager(userRequest: String? = null): TargetManager
fun platform(target: KonanTarget) = platforms.getValue(target)
abstract fun loadConfigurables(target: KonanTarget): Configurables
}
// FILE: HostManager.kt
open class HostManager {
val enabled: List<KonanTarget>
get() = emptyList()
}
// FILE: Configurables.kt
interface Configurables {
val llvmHome get() = hostString("llvmHome")
val absoluteLlvmHome get() = absolute(llvmHome)
fun absolute(value: String?): String
fun hostString(key: String): String?
}
// FILE: KonanTarget.kt
sealed class KonanTarget {
object ANDROID : KonanTarget()
object IOS : KonanTarget()
}
// FILE: TargetManager.kt
interface TargetManager {
val target: KonanTarget
}