Files
kotlin-fork/compiler/testData/codegen/box/fir/FakeOverrideBuilder.kt
T

60 lines
1.3 KiB
Kotlin
Vendored

// TARGET_BACKEND: JVM
// MODULE: lib
// FILE: FakeOverrideBuilder_lib.kt
class IrPropertySymbolImpl :
IrBindableSymbolBase<IrProperty>(),
IrPropertySymbol
abstract class IrBindableSymbolBase<B : IrSymbolOwner> :
IrBindableSymbol<B>, IrSymbolBase() {
private var _owner: B? = null
override val owner: B
get() = _owner ?: throw IllegalStateException("")
override fun bind(owner: B) {
if (_owner == null) {
_owner = owner
} else {
throw IllegalStateException("")
}
}
}
abstract class IrSymbolBase : IrSymbol
interface IrPropertySymbol : IrBindableSymbol<IrProperty>
interface IrBindableSymbol<B : IrSymbolOwner> : IrSymbol {
override val owner: B
fun bind(owner: B)
}
interface IrSymbol {
val owner: IrSymbolOwner
}
interface IrSymbolOwner {
val symbol: IrSymbol
}
class IrProperty(override val symbol: IrPropertySymbol, val name: String) : IrSymbolOwner
// MODULE: main(lib)
// FILE: FakeOverrideBuilder_main.kt
fun link(declaration: IrSymbolOwner) {
val tempSymbol = IrPropertySymbolImpl()
tempSymbol.bind(declaration as IrProperty)
}
fun box(): String {
val symbol = IrPropertySymbolImpl()
val property = IrProperty(symbol, "OK")
symbol.bind(property)
link(property)
return symbol.owner.name
}