diff --git a/analysis/decompiled/light-classes-for-decompiled/src/org/jetbrains/kotlin/analysis/decompiled/light/classes/KtLightClassForDecompiledDeclaration.kt b/analysis/decompiled/light-classes-for-decompiled/src/org/jetbrains/kotlin/analysis/decompiled/light/classes/KtLightClassForDecompiledDeclaration.kt index 93e38d8e819..c3297c01ff3 100644 --- a/analysis/decompiled/light-classes-for-decompiled/src/org/jetbrains/kotlin/analysis/decompiled/light/classes/KtLightClassForDecompiledDeclaration.kt +++ b/analysis/decompiled/light-classes-for-decompiled/src/org/jetbrains/kotlin/analysis/decompiled/light/classes/KtLightClassForDecompiledDeclaration.kt @@ -12,6 +12,8 @@ import com.intellij.psi.impl.PsiImplUtil import com.intellij.psi.impl.PsiSuperMethodImplUtil import com.intellij.psi.javadoc.PsiDocComment import com.intellij.psi.scope.PsiScopeProcessor +import com.intellij.psi.util.CachedValueProvider +import com.intellij.psi.util.CachedValuesManager import com.intellij.psi.util.PsiUtil import org.jetbrains.annotations.NonNls import org.jetbrains.kotlin.analysis.decompiled.light.classes.origin.LightMemberOriginForCompiledField @@ -26,6 +28,12 @@ import org.jetbrains.kotlin.asJava.isSyntheticValuesOrValueOfMethod import org.jetbrains.kotlin.load.java.structure.LightClassOriginKind import org.jetbrains.kotlin.psi.KtClassOrObject +internal inline fun R.cachedValueWithLibraryTracker( + crossinline computer: () -> T, +): T = CachedValuesManager.getCachedValue(this) { + CachedValueProvider.Result.createSingleDependency(computer(), project.createAllLibrariesModificationTracker()) +} + open class KtLightClassForDecompiledDeclaration( clsDelegate: PsiClass, clsParent: PsiElement, @@ -118,8 +126,7 @@ open class KtLightClassForDecompiledDeclaration( override fun getAllMethods(): Array = PsiClassImplUtil.getAllMethods(this) override fun getAllFields(): Array = PsiClassImplUtil.getAllFields(this) - override fun getOwnMethods(): List = _ownMethods - private val _ownMethods: List by lazyPub { + override fun getOwnMethods(): List = cachedValueWithLibraryTracker { val isEnum = isEnum this.clsDelegate.methods.mapNotNull { psiMethod -> if (isSyntheticValuesOrValueOfMethod(psiMethod)) return@mapNotNull null @@ -135,8 +142,7 @@ open class KtLightClassForDecompiledDeclaration( } } - override fun getOwnFields(): List = _ownFields - private val _ownFields: List by lazyPub { + override fun getOwnFields(): List = cachedValueWithLibraryTracker { this.clsDelegate.fields.map { psiField -> if (psiField is PsiEnumConstant) { KtLightEnumEntryForDecompiledDeclaration( @@ -155,8 +161,7 @@ open class KtLightClassForDecompiledDeclaration( } } - override fun getOwnInnerClasses(): List = _ownInnerClasses - private val _ownInnerClasses: List by lazyPub { + override fun getOwnInnerClasses(): List = cachedValueWithLibraryTracker { this.clsDelegate.innerClasses.map { psiClass -> val innerDeclaration = this.kotlinOrigin ?.declarations diff --git a/analysis/decompiled/light-classes-for-decompiled/src/org/jetbrains/kotlin/analysis/decompiled/light/classes/KtLightEnumEntryForDecompiledDeclaration.kt b/analysis/decompiled/light-classes-for-decompiled/src/org/jetbrains/kotlin/analysis/decompiled/light/classes/KtLightEnumEntryForDecompiledDeclaration.kt index d0cefe2f150..690833141e8 100644 --- a/analysis/decompiled/light-classes-for-decompiled/src/org/jetbrains/kotlin/analysis/decompiled/light/classes/KtLightEnumEntryForDecompiledDeclaration.kt +++ b/analysis/decompiled/light-classes-for-decompiled/src/org/jetbrains/kotlin/analysis/decompiled/light/classes/KtLightEnumEntryForDecompiledDeclaration.kt @@ -5,7 +5,6 @@ package org.jetbrains.kotlin.analysis.decompiled.light.classes import com.intellij.psi.* import org.jetbrains.kotlin.analysis.decompiled.light.classes.origin.LightMemberOriginForCompiledField import org.jetbrains.kotlin.analysis.decompiler.psi.file.KtClsFile -import org.jetbrains.kotlin.asJava.classes.lazyPub internal class KtLightEnumEntryForDecompiledDeclaration( private val fldDelegate: PsiEnumConstant, @@ -22,8 +21,7 @@ internal class KtLightEnumEntryForDecompiledDeclaration( override fun resolveMethod(): PsiMethod? = fldDelegate.resolveMethod() override fun resolveMethodGenerics(): JavaResolveResult = fldDelegate.resolveMethodGenerics() - override fun getInitializingClass(): PsiEnumConstantInitializer? = _initializingClass - private val _initializingClass: PsiEnumConstantInitializer? by lazyPub { + override fun getInitializingClass(): PsiEnumConstantInitializer? = cachedValueWithLibraryTracker { fldDelegate.initializingClass?.let { KtLightEnumClassForDecompiledDeclaration( psiConstantInitializer = it, diff --git a/analysis/decompiled/light-classes-for-decompiled/src/org/jetbrains/kotlin/analysis/decompiled/light/classes/KtLightFieldForDecompiledDeclaration.kt b/analysis/decompiled/light-classes-for-decompiled/src/org/jetbrains/kotlin/analysis/decompiled/light/classes/KtLightFieldForDecompiledDeclaration.kt index 81a8e26de22..806e6ddaead 100644 --- a/analysis/decompiled/light-classes-for-decompiled/src/org/jetbrains/kotlin/analysis/decompiled/light/classes/KtLightFieldForDecompiledDeclaration.kt +++ b/analysis/decompiled/light-classes-for-decompiled/src/org/jetbrains/kotlin/analysis/decompiled/light/classes/KtLightFieldForDecompiledDeclaration.kt @@ -55,7 +55,8 @@ open class KtLightFieldForDecompiledDeclaration( override fun computeConstantValue(): Any? = fldDelegate.computeConstantValue() - override fun computeConstantValue(visitedVars: MutableSet?): Any? = (fldDelegate as? PsiVariableEx)?.computeConstantValue(visitedVars) + override fun computeConstantValue(visitedVars: MutableSet?): Any? = + (fldDelegate as? PsiVariableEx)?.computeConstantValue(visitedVars) override fun equals(other: Any?): Boolean = other === this || other is KtLightFieldForDecompiledDeclaration &&