diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightClass.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightClass.kt index f3c3847ff7b..664d4287c44 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightClass.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightClass.kt @@ -11,6 +11,10 @@ import com.intellij.psi.impl.InheritanceImplUtil import com.intellij.psi.impl.PsiClassImplUtil import com.intellij.psi.impl.PsiSuperMethodImplUtil import com.intellij.psi.impl.light.LightMethodBuilder +import com.intellij.psi.util.CachedValue +import com.intellij.psi.util.CachedValueProvider +import com.intellij.psi.util.CachedValuesManager +import org.jetbrains.kotlin.analyzer.KotlinModificationTrackerService import org.jetbrains.kotlin.asJava.builder.LightClassData import org.jetbrains.kotlin.asJava.elements.KtLightField import org.jetbrains.kotlin.asJava.elements.KtLightMethod @@ -242,8 +246,7 @@ open class KtUltraLightClass(classOrObject: KtClassOrObject, internal val suppor private fun propertyParameters() = classOrObject.primaryConstructorParameters.filter { it.hasValOrVar() } - private val _ownMethods: List by lazyPub { - + private fun ownMethods(): List { val result = arrayListOf() for (declaration in this.classOrObject.declarations.filterNot { it.isHiddenByDeprecation(support) }) { @@ -292,9 +295,18 @@ open class KtUltraLightClass(classOrObject: KtClassOrObject, internal val suppor addMethodsFromDataClass(result) addDelegatesToInterfaceMethods(result) - result + return result } + private val _ownMethods: CachedValue> = CachedValuesManager.getManager(project).createCachedValue( + { + CachedValueProvider.Result.create( + ownMethods(), + KotlinModificationTrackerService.getInstance(project).outOfBlockModificationTracker + ) + }, false + ) + private fun addMethodsFromDataClass(result: MutableList) { if (!classOrObject.hasModifier(DATA_KEYWORD)) return val descriptor = classOrObject.resolve() as? ClassDescriptor ?: return @@ -409,7 +421,7 @@ open class KtUltraLightClass(classOrObject: KtClassOrObject, internal val suppor private fun isJvmStatic(declaration: KtAnnotated): Boolean = declaration.hasAnnotation(JVM_STATIC_ANNOTATION_FQ_NAME) - override fun getOwnMethods(): List = if (tooComplex) super.getOwnMethods() else _ownMethods + override fun getOwnMethods(): List = if (tooComplex) super.getOwnMethods() else _ownMethods.value private fun KtAnnotated.hasAnnotation(name: FqName) = support.findAnnotation(this, name) != null