[SLC] drop hard references to member declarations to reduce memory consumption

^KT-56613 Fixed
This commit is contained in:
Dmitrii Gridin
2023-02-23 17:43:13 +01:00
committed by Space Team
parent 7af78db2e1
commit 327208fb8a
11 changed files with 37 additions and 43 deletions
@@ -14,8 +14,8 @@ import org.jetbrains.kotlin.analysis.api.symbols.KtNamedClassOrObjectSymbol
import org.jetbrains.kotlin.analysis.api.symbols.markers.isPrivateOrPrivateToThis import org.jetbrains.kotlin.analysis.api.symbols.markers.isPrivateOrPrivateToThis
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
import org.jetbrains.kotlin.analysis.project.structure.KtModule import org.jetbrains.kotlin.analysis.project.structure.KtModule
import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.asJava.elements.KtLightMethod import org.jetbrains.kotlin.asJava.elements.KtLightMethod
import org.jetbrains.kotlin.light.classes.symbol.cachedValue
import org.jetbrains.kotlin.psi.KtClass import org.jetbrains.kotlin.psi.KtClass
import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtClassOrObject
@@ -62,11 +62,10 @@ internal open class SymbolLightClassForAnnotationClass : SymbolLightClassForInte
result result
} }
private val _ownMethods: List<PsiMethod> by lazyPub { final override fun getOwnMethods(): List<PsiMethod> = cachedValue {
computeOwnMethods() computeOwnMethods()
} }
final override fun getOwnMethods(): List<PsiMethod> = _ownMethods
override fun getExtendsList(): PsiReferenceList? = null override fun getExtendsList(): PsiReferenceList? = null
final override fun isInheritor(baseClass: PsiClass, checkDeep: Boolean): Boolean { final override fun isInheritor(baseClass: PsiClass, checkDeep: Boolean): Boolean {
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.asJava.elements.KtLightField
import org.jetbrains.kotlin.asJava.elements.KtLightIdentifier import org.jetbrains.kotlin.asJava.elements.KtLightIdentifier
import org.jetbrains.kotlin.asJava.elements.KtLightMethod import org.jetbrains.kotlin.asJava.elements.KtLightMethod
import org.jetbrains.kotlin.light.classes.symbol.annotations.hasJvmFieldAnnotation import org.jetbrains.kotlin.light.classes.symbol.annotations.hasJvmFieldAnnotation
import org.jetbrains.kotlin.light.classes.symbol.cachedValue
import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightField import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightField
import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtClassOrObject
@@ -65,10 +66,7 @@ internal class SymbolLightClassForAnonymousObject : SymbolLightClassForClassLike
override fun getExtendsList(): PsiReferenceList? = _extendsList override fun getExtendsList(): PsiReferenceList? = _extendsList
override fun getImplementsList(): PsiReferenceList? = _implementsList override fun getImplementsList(): PsiReferenceList? = _implementsList
override fun getOwnFields(): List<KtLightField> = _ownFields override fun getOwnMethods(): List<PsiMethod> = cachedValue {
override fun getOwnMethods(): List<PsiMethod> = _ownMethods
private val _ownMethods: List<KtLightMethod> by lazyPub {
withClassOrObjectSymbol { withClassOrObjectSymbol {
val result = mutableListOf<KtLightMethod>() val result = mutableListOf<KtLightMethod>()
val declaredMemberScope = it.getDeclaredMemberScope() val declaredMemberScope = it.getDeclaredMemberScope()
@@ -79,7 +77,7 @@ internal class SymbolLightClassForAnonymousObject : SymbolLightClassForClassLike
} }
} }
private val _ownFields: List<KtLightField> by lazyPub { override fun getOwnFields(): List<KtLightField> = cachedValue {
val result = mutableListOf<KtLightField>() val result = mutableListOf<KtLightField>()
val nameGenerator = SymbolLightField.FieldNameGenerator() val nameGenerator = SymbolLightField.FieldNameGenerator()
@@ -102,14 +102,12 @@ abstract class SymbolLightClassForClassLike<SType : KtClassOrObjectSymbol> prote
override fun getTypeParameters(): Array<PsiTypeParameter> = _typeParameterList?.typeParameters ?: PsiTypeParameter.EMPTY_ARRAY override fun getTypeParameters(): Array<PsiTypeParameter> = _typeParameterList?.typeParameters ?: PsiTypeParameter.EMPTY_ARRAY
private val _ownInnerClasses: List<SymbolLightClassBase> by lazyPub { override fun getOwnInnerClasses(): List<PsiClass> = cachedValue {
withClassOrObjectSymbol { withClassOrObjectSymbol {
it.createInnerClasses(manager, this@SymbolLightClassForClassLike, classOrObjectDeclaration) it.createInnerClasses(manager, this@SymbolLightClassForClassLike, classOrObjectDeclaration)
} }
} }
override fun getOwnInnerClasses(): List<PsiClass> = _ownInnerClasses
override fun getTextOffset(): Int = classOrObjectDeclaration?.textOffset ?: -1 override fun getTextOffset(): Int = classOrObjectDeclaration?.textOffset ?: -1
override fun getStartOffsetInParent(): Int = classOrObjectDeclaration?.startOffsetInParent ?: -1 override fun getStartOffsetInParent(): Int = classOrObjectDeclaration?.startOffsetInParent ?: -1
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.config.LanguageFeature
import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.light.classes.symbol.annotations.GranularAnnotationsBox import org.jetbrains.kotlin.light.classes.symbol.annotations.GranularAnnotationsBox
import org.jetbrains.kotlin.light.classes.symbol.annotations.SymbolAnnotationsProvider import org.jetbrains.kotlin.light.classes.symbol.annotations.SymbolAnnotationsProvider
import org.jetbrains.kotlin.light.classes.symbol.cachedValue
import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightFieldForEnumEntry import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightFieldForEnumEntry
import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightFieldForObject import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightFieldForObject
import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightSimpleMethod import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightSimpleMethod
@@ -92,8 +93,6 @@ internal open class SymbolLightClassForClassOrObject : SymbolLightClassForNamedC
} }
override fun getModifierList(): PsiModifierList? = _modifierList override fun getModifierList(): PsiModifierList? = _modifierList
override fun getOwnFields(): List<KtLightField> = _ownFields
override fun getOwnMethods(): List<PsiMethod> = _ownMethods
override fun getExtendsList(): PsiReferenceList? = _extendsList override fun getExtendsList(): PsiReferenceList? = _extendsList
override fun getImplementsList(): PsiReferenceList? = _implementsList override fun getImplementsList(): PsiReferenceList? = _implementsList
@@ -109,7 +108,7 @@ internal open class SymbolLightClassForClassOrObject : SymbolLightClassForNamedC
} }
} }
private val _ownMethods: List<KtLightMethod> by lazyPub { override fun getOwnMethods(): List<PsiMethod> = cachedValue {
withClassOrObjectSymbol { classOrObjectSymbol -> withClassOrObjectSymbol { classOrObjectSymbol ->
val result = mutableListOf<KtLightMethod>() val result = mutableListOf<KtLightMethod>()
@@ -241,7 +240,7 @@ internal open class SymbolLightClassForClassOrObject : SymbolLightClassForNamedC
} }
} }
private val _ownFields: List<KtLightField> by lazyPub { override fun getOwnFields(): List<KtLightField> = cachedValue {
withClassOrObjectSymbol { classOrObjectSymbol -> withClassOrObjectSymbol { classOrObjectSymbol ->
val result = mutableListOf<KtLightField>() val result = mutableListOf<KtLightField>()
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.asJava.elements.KtLightField import org.jetbrains.kotlin.asJava.elements.KtLightField
import org.jetbrains.kotlin.asJava.elements.KtLightIdentifier import org.jetbrains.kotlin.asJava.elements.KtLightIdentifier
import org.jetbrains.kotlin.asJava.elements.KtLightMethod import org.jetbrains.kotlin.asJava.elements.KtLightMethod
import org.jetbrains.kotlin.light.classes.symbol.cachedValue
import org.jetbrains.kotlin.light.classes.symbol.codeReferences.SymbolLightPsiJavaCodeReferenceElementWithNoReference import org.jetbrains.kotlin.light.classes.symbol.codeReferences.SymbolLightPsiJavaCodeReferenceElementWithNoReference
import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightFieldForEnumEntry import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightFieldForEnumEntry
import org.jetbrains.kotlin.light.classes.symbol.isOriginEquivalentTo import org.jetbrains.kotlin.light.classes.symbol.isOriginEquivalentTo
@@ -23,7 +24,7 @@ import org.jetbrains.kotlin.psi.KtEnumEntry
internal class SymbolLightClassForEnumEntry( internal class SymbolLightClassForEnumEntry(
private val enumConstant: SymbolLightFieldForEnumEntry, private val enumConstant: SymbolLightFieldForEnumEntry,
private val enumClass: SymbolLightClassForClassOrObject, private val enumClass: SymbolLightClassBase,
ktModule: KtModule, ktModule: KtModule,
) : SymbolLightClassBase(ktModule, enumConstant.manager), PsiEnumConstantInitializer { ) : SymbolLightClassBase(ktModule, enumConstant.manager), PsiEnumConstantInitializer {
override fun getBaseClassType(): PsiClassType = enumConstant.type as PsiClassType //???TODO override fun getBaseClassType(): PsiClassType = enumConstant.type as PsiClassType //???TODO
@@ -100,7 +101,7 @@ internal class SymbolLightClassForEnumEntry(
override fun getScope(): PsiElement = parent override fun getScope(): PsiElement = parent
private val _ownFields: List<KtLightField> by lazyPub { override fun getOwnFields(): List<KtLightField> = cachedValue {
enumConstant.withEnumEntrySymbol { enumEntrySymbol -> enumConstant.withEnumEntrySymbol { enumEntrySymbol ->
val result = mutableListOf<KtLightField>() val result = mutableListOf<KtLightField>()
@@ -111,9 +112,7 @@ internal class SymbolLightClassForEnumEntry(
} }
} }
override fun getOwnFields(): List<KtLightField> = _ownFields override fun getOwnMethods(): List<KtLightMethod> = cachedValue {
private val _ownMethods: List<KtLightMethod> by lazyPub {
enumConstant.withEnumEntrySymbol { enumEntrySymbol -> enumConstant.withEnumEntrySymbol { enumEntrySymbol ->
val result = mutableListOf<KtLightMethod>() val result = mutableListOf<KtLightMethod>()
@@ -127,8 +126,8 @@ internal class SymbolLightClassForEnumEntry(
} }
} }
override fun getOwnMethods(): List<KtLightMethod> = _ownMethods override fun getOwnInnerClasses(): List<PsiClass> = emptyList()
override fun getOwnInnerClasses(): MutableList<PsiClass> = mutableListOf()
override fun isInheritor(baseClass: PsiClass, checkDeep: Boolean): Boolean { override fun isInheritor(baseClass: PsiClass, checkDeep: Boolean): Boolean {
if (!checkDeep) return baseClass == enumClass if (!checkDeep) return baseClass == enumClass
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.fileClasses.isJvmMultifileClassFile
import org.jetbrains.kotlin.fileClasses.javaFileFacadeFqName import org.jetbrains.kotlin.fileClasses.javaFileFacadeFqName
import org.jetbrains.kotlin.light.classes.symbol.analyzeForLightClasses import org.jetbrains.kotlin.light.classes.symbol.analyzeForLightClasses
import org.jetbrains.kotlin.light.classes.symbol.annotations.* import org.jetbrains.kotlin.light.classes.symbol.annotations.*
import org.jetbrains.kotlin.light.classes.symbol.cachedValue
import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightField import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightField
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.InitializedModifiersBox import org.jetbrains.kotlin.light.classes.symbol.modifierLists.InitializedModifiersBox
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightClassModifierList import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightClassModifierList
@@ -80,8 +81,7 @@ internal class SymbolLightClassForFacade(
override fun getScope(): PsiElement = parent override fun getScope(): PsiElement = parent
override fun getOwnMethods(): List<PsiMethod> = _ownMethods override fun getOwnMethods(): List<PsiMethod> = cachedValue {
private val _ownMethods: List<PsiMethod> by lazyPub {
withFileSymbols { fileSymbols -> withFileSymbols { fileSymbols ->
val result = mutableListOf<KtLightMethod>() val result = mutableListOf<KtLightMethod>()
val methodsAndProperties = sequence<KtCallableSymbol> { val methodsAndProperties = sequence<KtCallableSymbol> {
@@ -136,8 +136,7 @@ internal class SymbolLightClassForFacade(
private fun KtPropertyAccessorSymbol?.isNullOrPublic(): Boolean = private fun KtPropertyAccessorSymbol?.isNullOrPublic(): Boolean =
this?.toPsiVisibilityForMember()?.let { it == PsiModifier.PUBLIC } != false this?.toPsiVisibilityForMember()?.let { it == PsiModifier.PUBLIC } != false
override fun getOwnFields(): List<PsiField> = _ownFields override fun getOwnFields(): List<PsiField> = cachedValue {
private val _ownFields: List<PsiField> by lazyPub {
val result = mutableListOf<KtLightField>() val result = mutableListOf<KtLightField>()
val nameGenerator = SymbolLightField.FieldNameGenerator() val nameGenerator = SymbolLightField.FieldNameGenerator()
withFileSymbols { fileSymbols -> withFileSymbols { fileSymbols ->
@@ -13,10 +13,10 @@ import org.jetbrains.kotlin.analysis.api.symbols.KtPropertySymbol
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
import org.jetbrains.kotlin.analysis.api.symbols.pointers.symbolPointerOfType import org.jetbrains.kotlin.analysis.api.symbols.pointers.symbolPointerOfType
import org.jetbrains.kotlin.analysis.project.structure.KtModule import org.jetbrains.kotlin.analysis.project.structure.KtModule
import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.asJava.elements.KtLightField import org.jetbrains.kotlin.asJava.elements.KtLightField
import org.jetbrains.kotlin.asJava.elements.KtLightMethod import org.jetbrains.kotlin.asJava.elements.KtLightMethod
import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.light.classes.symbol.cachedValue
import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtClassOrObject
import org.jetbrains.kotlin.resolve.deprecation.DeprecationLevelValue import org.jetbrains.kotlin.resolve.deprecation.DeprecationLevelValue
@@ -45,7 +45,7 @@ internal class SymbolLightClassForInlineClass : SymbolLightClassForClassOrObject
manager = manager, manager = manager,
) )
private val _ownMethods: List<KtLightMethod> by lazyPub { override fun getOwnMethods(): List<PsiMethod> = cachedValue {
withClassOrObjectSymbol { classOrObjectSymbol -> withClassOrObjectSymbol { classOrObjectSymbol ->
val result = mutableListOf<KtLightMethod>() val result = mutableListOf<KtLightMethod>()
@@ -82,7 +82,7 @@ internal class SymbolLightClassForInlineClass : SymbolLightClassForClassOrObject
} }
} }
private val _ownFields: List<KtLightField> by lazyPub { override fun getOwnFields(): List<KtLightField> = cachedValue {
withClassOrObjectSymbol { classOrObjectSymbol -> withClassOrObjectSymbol { classOrObjectSymbol ->
mutableListOf<KtLightField>().apply { mutableListOf<KtLightField>().apply {
addPropertyBackingFields(this, classOrObjectSymbol) addPropertyBackingFields(this, classOrObjectSymbol)
@@ -90,10 +90,6 @@ internal class SymbolLightClassForInlineClass : SymbolLightClassForClassOrObject
} }
} }
override fun getOwnMethods(): List<PsiMethod> = _ownMethods
override fun getOwnFields(): List<KtLightField> = _ownFields
override fun copy(): SymbolLightClassForInlineClass = override fun copy(): SymbolLightClassForInlineClass =
SymbolLightClassForInlineClass(classOrObjectDeclaration, classOrObjectSymbolPointer, ktModule, manager) SymbolLightClassForInlineClass(classOrObjectDeclaration, classOrObjectSymbolPointer, ktModule, manager)
} }
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
import org.jetbrains.kotlin.analysis.project.structure.KtModule import org.jetbrains.kotlin.analysis.project.structure.KtModule
import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.asJava.elements.KtLightMethod import org.jetbrains.kotlin.asJava.elements.KtLightMethod
import org.jetbrains.kotlin.light.classes.symbol.cachedValue
import org.jetbrains.kotlin.psi.KtClass import org.jetbrains.kotlin.psi.KtClass
import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtClassOrObject
@@ -52,7 +53,7 @@ internal open class SymbolLightClassForInterface : SymbolLightClassForInterfaceO
manager = manager, manager = manager,
) )
private val _ownMethods: List<KtLightMethod> by lazyPub { override fun getOwnMethods(): List<PsiMethod> = cachedValue {
withClassOrObjectSymbol { classOrObjectSymbol -> withClassOrObjectSymbol { classOrObjectSymbol ->
val result = mutableListOf<KtLightMethod>() val result = mutableListOf<KtLightMethod>()
@@ -69,9 +70,6 @@ internal open class SymbolLightClassForInterface : SymbolLightClassForInterfaceO
protected open fun acceptCallableSymbol(symbol: KtCallableSymbol): Boolean = protected open fun acceptCallableSymbol(symbol: KtCallableSymbol): Boolean =
!(symbol is KtFunctionSymbol && symbol.visibility.isPrivateOrPrivateToThis() || symbol.hasTypeForValueClassInSignature()) !(symbol is KtFunctionSymbol && symbol.visibility.isPrivateOrPrivateToThis() || symbol.hasTypeForValueClassInSignature())
override fun getOwnMethods(): List<PsiMethod> = _ownMethods
override fun copy(): SymbolLightClassForInterface = override fun copy(): SymbolLightClassForInterface =
SymbolLightClassForInterface(classOrObjectDeclaration, classOrObjectSymbolPointer, ktModule, manager) SymbolLightClassForInterface(classOrObjectDeclaration, classOrObjectSymbolPointer, ktModule, manager)
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.asJava.elements.KtLightField
import org.jetbrains.kotlin.light.classes.symbol.annotations.AbstractClassAdditionalAnnotationsProvider import org.jetbrains.kotlin.light.classes.symbol.annotations.AbstractClassAdditionalAnnotationsProvider
import org.jetbrains.kotlin.light.classes.symbol.annotations.GranularAnnotationsBox import org.jetbrains.kotlin.light.classes.symbol.annotations.GranularAnnotationsBox
import org.jetbrains.kotlin.light.classes.symbol.annotations.SymbolAnnotationsProvider import org.jetbrains.kotlin.light.classes.symbol.annotations.SymbolAnnotationsProvider
import org.jetbrains.kotlin.light.classes.symbol.cachedValue
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.GranularModifiersBox import org.jetbrains.kotlin.light.classes.symbol.modifierLists.GranularModifiersBox
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightClassModifierList import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightClassModifierList
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.with import org.jetbrains.kotlin.light.classes.symbol.modifierLists.with
@@ -84,7 +85,7 @@ internal abstract class SymbolLightClassForInterfaceOrAnnotationClass : SymbolLi
final override fun getModifierList(): PsiModifierList? = _modifierList final override fun getModifierList(): PsiModifierList? = _modifierList
private val _ownFields: List<KtLightField> by lazyPub { override fun getOwnFields(): List<KtLightField> = cachedValue {
withClassOrObjectSymbol { classOrObjectSymbol -> withClassOrObjectSymbol { classOrObjectSymbol ->
buildList { buildList {
addCompanionObjectFieldIfNeeded(this, classOrObjectSymbol) addCompanionObjectFieldIfNeeded(this, classOrObjectSymbol)
@@ -93,7 +94,5 @@ internal abstract class SymbolLightClassForInterfaceOrAnnotationClass : SymbolLi
} }
} }
override fun getOwnFields(): List<KtLightField> = _ownFields
override fun getImplementsList(): PsiReferenceList? = null override fun getImplementsList(): PsiReferenceList? = null
} }
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.light.classes.symbol.analyzeForLightClasses
import org.jetbrains.kotlin.light.classes.symbol.annotations.GranularAnnotationsBox import org.jetbrains.kotlin.light.classes.symbol.annotations.GranularAnnotationsBox
import org.jetbrains.kotlin.light.classes.symbol.annotations.SymbolAnnotationsProvider import org.jetbrains.kotlin.light.classes.symbol.annotations.SymbolAnnotationsProvider
import org.jetbrains.kotlin.light.classes.symbol.annotations.annotationUseSiteTargetFilterOf import org.jetbrains.kotlin.light.classes.symbol.annotations.annotationUseSiteTargetFilterOf
import org.jetbrains.kotlin.light.classes.symbol.cachedValue
import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassForClassOrObject import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassForClassOrObject
import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassForEnumEntry import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassForEnumEntry
import org.jetbrains.kotlin.light.classes.symbol.isOriginEquivalentTo import org.jetbrains.kotlin.light.classes.symbol.isOriginEquivalentTo
@@ -67,7 +68,7 @@ internal class SymbolLightFieldForEnumEntry(
private val hasBody: Boolean get() = enumEntry.body != null private val hasBody: Boolean get() = enumEntry.body != null
private val _initializingClass: PsiEnumConstantInitializer? by lazyPub { override fun getInitializingClass(): PsiEnumConstantInitializer? = cachedValue {
hasBody.ifTrue { hasBody.ifTrue {
SymbolLightClassForEnumEntry( SymbolLightClassForEnumEntry(
enumConstant = this@SymbolLightFieldForEnumEntry, enumConstant = this@SymbolLightFieldForEnumEntry,
@@ -77,8 +78,7 @@ internal class SymbolLightFieldForEnumEntry(
} }
} }
override fun getInitializingClass(): PsiEnumConstantInitializer? = _initializingClass override fun getOrCreateInitializingClass(): PsiEnumConstantInitializer = initializingClass ?: cannotModify()
override fun getOrCreateInitializingClass(): PsiEnumConstantInitializer = _initializingClass ?: cannotModify()
override fun getArgumentList(): PsiExpressionList? = null override fun getArgumentList(): PsiExpressionList? = null
override fun resolveMethod(): PsiMethod? = null override fun resolveMethod(): PsiMethod? = null
@@ -6,6 +6,8 @@
package org.jetbrains.kotlin.light.classes.symbol package org.jetbrains.kotlin.light.classes.symbol
import com.intellij.psi.* import com.intellij.psi.*
import com.intellij.psi.util.CachedValueProvider
import com.intellij.psi.util.CachedValuesManager
import com.intellij.psi.util.TypeConversionUtil import com.intellij.psi.util.TypeConversionUtil
import com.intellij.util.IncorrectOperationException import com.intellij.util.IncorrectOperationException
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
@@ -21,6 +23,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithVisibility
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
import org.jetbrains.kotlin.analysis.api.types.* import org.jetbrains.kotlin.analysis.api.types.*
import org.jetbrains.kotlin.analysis.project.structure.KtModule import org.jetbrains.kotlin.analysis.project.structure.KtModule
import org.jetbrains.kotlin.analysis.providers.createProjectWideOutOfBlockModificationTracker
import org.jetbrains.kotlin.analysis.utils.errors.buildErrorWithAttachment import org.jetbrains.kotlin.analysis.utils.errors.buildErrorWithAttachment
import org.jetbrains.kotlin.asJava.elements.KtLightElement import org.jetbrains.kotlin.asJava.elements.KtLightElement
import org.jetbrains.kotlin.asJava.elements.KtLightMember import org.jetbrains.kotlin.asJava.elements.KtLightMember
@@ -271,3 +274,9 @@ internal val KtPropertySymbol.isLateInit: Boolean get() = (this as? KtKotlinProp
internal inline fun <reified T> Collection<T>.toArrayIfNotEmptyOrDefault(default: Array<T>): Array<T> { internal inline fun <reified T> Collection<T>.toArrayIfNotEmptyOrDefault(default: Array<T>): Array<T> {
return if (isNotEmpty()) toTypedArray() else default return if (isNotEmpty()) toTypedArray() else default
} }
internal inline fun <R : PsiElement, T> R.cachedValue(
crossinline computer: () -> T,
): T = CachedValuesManager.getCachedValue(this) {
CachedValueProvider.Result.createSingleDependency(computer(), project.createProjectWideOutOfBlockModificationTracker())
}