diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyDeclarationBase.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyDeclarationBase.kt index 38e426a648c..200c77685c3 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyDeclarationBase.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyDeclarationBase.kt @@ -65,34 +65,4 @@ abstract class IrLazyDeclarationBase( else -> throw AssertionError("Package or class expected: $containingDeclaration; for $currentDescriptor") } } -} - - -internal fun lazyVar(initializer: () -> T): UnsafeLazyVar = UnsafeLazyVar(initializer) - - -internal class UnsafeLazyVar(initializer: () -> T) { - private var isInitialized = false; - private var initializer: (() -> T)? = initializer - private var _value: Any? = null - - private val value: T - get() { - if (!isInitialized) { - _value = initializer!!() - isInitialized = true - initializer = null - } - @Suppress("UNCHECKED_CAST") - return _value as T - } - - override fun toString(): String = if (isInitialized) value.toString() else "Lazy value not initialized yet." - - operator fun getValue(thisRef: Any?, property: KProperty<*>): T = value - - operator fun setValue(thisRef: Any?, property: KProperty<*>, value: T) { - this._value = value - isInitialized = true - } } \ No newline at end of file diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/lazyUtil.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/lazyUtil.kt new file mode 100644 index 00000000000..daa92da7081 --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/lazyUtil.kt @@ -0,0 +1,31 @@ +package org.jetbrains.kotlin.ir.declarations.lazy + +import kotlin.reflect.KProperty + +internal fun lazyVar(initializer: () -> T): UnsafeLazyVar = UnsafeLazyVar(initializer) + +internal class UnsafeLazyVar(initializer: () -> T) { + private var isInitialized = false; + private var initializer: (() -> T)? = initializer + private var _value: Any? = null + + private val value: T + get() { + if (!isInitialized) { + _value = initializer!!() + isInitialized = true + initializer = null + } + @Suppress("UNCHECKED_CAST") + return _value as T + } + + override fun toString(): String = if (isInitialized) value.toString() else "Lazy value not initialized yet." + + operator fun getValue(thisRef: Any?, property: KProperty<*>): T = value + + operator fun setValue(thisRef: Any?, property: KProperty<*>, value: T) { + this._value = value + isInitialized = true + } +} \ No newline at end of file