K2: add reproducer of KT-54212
This commit is contained in:
+68
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user