diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/FirLightClassBase.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/FirLightClassBase.kt index 50f1f67d362..10e05336f4e 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/FirLightClassBase.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/FirLightClassBase.kt @@ -47,10 +47,20 @@ abstract class FirLightClassBase protected constructor(manager: PsiManager) : Li private class FirLightClassesLazyCreator(private val project: Project) : KotlinClassInnerStuffCache.LazyCreator() { @OptIn(HackToForceAllowRunningAnalyzeOnEDT::class) - override fun get(initializer: () -> T, dependencies: List): Lazy = lazyPub { - PsiCachedValueImpl(PsiManager.getInstance(project)) { + override fun get(initializer: () -> T, dependencies: List): Lazy = object : Lazy { + private val cachedValue = PsiCachedValueImpl(PsiManager.getInstance(project)) { CachedValueProvider.Result.create(hackyAllowRunningOnEdt(initializer), dependencies) - }.value ?: error("initializer cannot return null") + } + + override val value: T + get() = cachedValue.value + ?: error("Unexpected null value from PsiCachedValueImpl") + + override fun isInitialized(): Boolean { + // Lazy is a bad interface here as it has unneeded and unused in LC `isInitialized` method + // considering Interface Segregation Principle, Lazy should be repaced with a simpler interface with only `value` method + error("Should not be called for LC") + } } }