[SLC] drop hard references to member declarations to reduce memory consumption
^KT-56613 Fixed
This commit is contained in:
committed by
Space Team
parent
7af78db2e1
commit
327208fb8a
+2
-3
@@ -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.pointers.KtSymbolPointer
|
||||
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.light.classes.symbol.cachedValue
|
||||
import org.jetbrains.kotlin.psi.KtClass
|
||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||
|
||||
@@ -62,11 +62,10 @@ internal open class SymbolLightClassForAnnotationClass : SymbolLightClassForInte
|
||||
result
|
||||
}
|
||||
|
||||
private val _ownMethods: List<PsiMethod> by lazyPub {
|
||||
final override fun getOwnMethods(): List<PsiMethod> = cachedValue {
|
||||
computeOwnMethods()
|
||||
}
|
||||
|
||||
final override fun getOwnMethods(): List<PsiMethod> = _ownMethods
|
||||
override fun getExtendsList(): PsiReferenceList? = null
|
||||
|
||||
final override fun isInheritor(baseClass: PsiClass, checkDeep: Boolean): Boolean {
|
||||
|
||||
+3
-5
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.asJava.elements.KtLightField
|
||||
import org.jetbrains.kotlin.asJava.elements.KtLightIdentifier
|
||||
import org.jetbrains.kotlin.asJava.elements.KtLightMethod
|
||||
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.psi.KtClassOrObject
|
||||
|
||||
@@ -65,10 +66,7 @@ internal class SymbolLightClassForAnonymousObject : SymbolLightClassForClassLike
|
||||
override fun getExtendsList(): PsiReferenceList? = _extendsList
|
||||
override fun getImplementsList(): PsiReferenceList? = _implementsList
|
||||
|
||||
override fun getOwnFields(): List<KtLightField> = _ownFields
|
||||
override fun getOwnMethods(): List<PsiMethod> = _ownMethods
|
||||
|
||||
private val _ownMethods: List<KtLightMethod> by lazyPub {
|
||||
override fun getOwnMethods(): List<PsiMethod> = cachedValue {
|
||||
withClassOrObjectSymbol {
|
||||
val result = mutableListOf<KtLightMethod>()
|
||||
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 nameGenerator = SymbolLightField.FieldNameGenerator()
|
||||
|
||||
|
||||
+1
-3
@@ -102,14 +102,12 @@ abstract class SymbolLightClassForClassLike<SType : KtClassOrObjectSymbol> prote
|
||||
|
||||
override fun getTypeParameters(): Array<PsiTypeParameter> = _typeParameterList?.typeParameters ?: PsiTypeParameter.EMPTY_ARRAY
|
||||
|
||||
private val _ownInnerClasses: List<SymbolLightClassBase> by lazyPub {
|
||||
override fun getOwnInnerClasses(): List<PsiClass> = cachedValue {
|
||||
withClassOrObjectSymbol {
|
||||
it.createInnerClasses(manager, this@SymbolLightClassForClassLike, classOrObjectDeclaration)
|
||||
}
|
||||
}
|
||||
|
||||
override fun getOwnInnerClasses(): List<PsiClass> = _ownInnerClasses
|
||||
|
||||
override fun getTextOffset(): Int = classOrObjectDeclaration?.textOffset ?: -1
|
||||
|
||||
override fun getStartOffsetInParent(): Int = classOrObjectDeclaration?.startOffsetInParent ?: -1
|
||||
|
||||
+3
-4
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.config.LanguageFeature
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
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.cachedValue
|
||||
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.methods.SymbolLightSimpleMethod
|
||||
@@ -92,8 +93,6 @@ internal open class SymbolLightClassForClassOrObject : SymbolLightClassForNamedC
|
||||
}
|
||||
|
||||
override fun getModifierList(): PsiModifierList? = _modifierList
|
||||
override fun getOwnFields(): List<KtLightField> = _ownFields
|
||||
override fun getOwnMethods(): List<PsiMethod> = _ownMethods
|
||||
override fun getExtendsList(): PsiReferenceList? = _extendsList
|
||||
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 ->
|
||||
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 ->
|
||||
val result = mutableListOf<KtLightField>()
|
||||
|
||||
|
||||
+6
-7
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.asJava.classes.lazyPub
|
||||
import org.jetbrains.kotlin.asJava.elements.KtLightField
|
||||
import org.jetbrains.kotlin.asJava.elements.KtLightIdentifier
|
||||
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.fields.SymbolLightFieldForEnumEntry
|
||||
import org.jetbrains.kotlin.light.classes.symbol.isOriginEquivalentTo
|
||||
@@ -23,7 +24,7 @@ import org.jetbrains.kotlin.psi.KtEnumEntry
|
||||
|
||||
internal class SymbolLightClassForEnumEntry(
|
||||
private val enumConstant: SymbolLightFieldForEnumEntry,
|
||||
private val enumClass: SymbolLightClassForClassOrObject,
|
||||
private val enumClass: SymbolLightClassBase,
|
||||
ktModule: KtModule,
|
||||
) : SymbolLightClassBase(ktModule, enumConstant.manager), PsiEnumConstantInitializer {
|
||||
override fun getBaseClassType(): PsiClassType = enumConstant.type as PsiClassType //???TODO
|
||||
@@ -100,7 +101,7 @@ internal class SymbolLightClassForEnumEntry(
|
||||
|
||||
override fun getScope(): PsiElement = parent
|
||||
|
||||
private val _ownFields: List<KtLightField> by lazyPub {
|
||||
override fun getOwnFields(): List<KtLightField> = cachedValue {
|
||||
enumConstant.withEnumEntrySymbol { enumEntrySymbol ->
|
||||
val result = mutableListOf<KtLightField>()
|
||||
|
||||
@@ -111,9 +112,7 @@ internal class SymbolLightClassForEnumEntry(
|
||||
}
|
||||
}
|
||||
|
||||
override fun getOwnFields(): List<KtLightField> = _ownFields
|
||||
|
||||
private val _ownMethods: List<KtLightMethod> by lazyPub {
|
||||
override fun getOwnMethods(): List<KtLightMethod> = cachedValue {
|
||||
enumConstant.withEnumEntrySymbol { enumEntrySymbol ->
|
||||
val result = mutableListOf<KtLightMethod>()
|
||||
|
||||
@@ -127,8 +126,8 @@ internal class SymbolLightClassForEnumEntry(
|
||||
}
|
||||
}
|
||||
|
||||
override fun getOwnMethods(): List<KtLightMethod> = _ownMethods
|
||||
override fun getOwnInnerClasses(): MutableList<PsiClass> = mutableListOf()
|
||||
override fun getOwnInnerClasses(): List<PsiClass> = emptyList()
|
||||
|
||||
override fun isInheritor(baseClass: PsiClass, checkDeep: Boolean): Boolean {
|
||||
if (!checkDeep) return baseClass == enumClass
|
||||
|
||||
|
||||
+3
-4
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.fileClasses.isJvmMultifileClassFile
|
||||
import org.jetbrains.kotlin.fileClasses.javaFileFacadeFqName
|
||||
import org.jetbrains.kotlin.light.classes.symbol.analyzeForLightClasses
|
||||
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.modifierLists.InitializedModifiersBox
|
||||
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightClassModifierList
|
||||
@@ -80,8 +81,7 @@ internal class SymbolLightClassForFacade(
|
||||
|
||||
override fun getScope(): PsiElement = parent
|
||||
|
||||
override fun getOwnMethods(): List<PsiMethod> = _ownMethods
|
||||
private val _ownMethods: List<PsiMethod> by lazyPub {
|
||||
override fun getOwnMethods(): List<PsiMethod> = cachedValue {
|
||||
withFileSymbols { fileSymbols ->
|
||||
val result = mutableListOf<KtLightMethod>()
|
||||
val methodsAndProperties = sequence<KtCallableSymbol> {
|
||||
@@ -136,8 +136,7 @@ internal class SymbolLightClassForFacade(
|
||||
private fun KtPropertyAccessorSymbol?.isNullOrPublic(): Boolean =
|
||||
this?.toPsiVisibilityForMember()?.let { it == PsiModifier.PUBLIC } != false
|
||||
|
||||
override fun getOwnFields(): List<PsiField> = _ownFields
|
||||
private val _ownFields: List<PsiField> by lazyPub {
|
||||
override fun getOwnFields(): List<PsiField> = cachedValue {
|
||||
val result = mutableListOf<KtLightField>()
|
||||
val nameGenerator = SymbolLightField.FieldNameGenerator()
|
||||
withFileSymbols { fileSymbols ->
|
||||
|
||||
+3
-7
@@ -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.symbolPointerOfType
|
||||
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.KtLightMethod
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
import org.jetbrains.kotlin.light.classes.symbol.cachedValue
|
||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||
import org.jetbrains.kotlin.resolve.deprecation.DeprecationLevelValue
|
||||
|
||||
@@ -45,7 +45,7 @@ internal class SymbolLightClassForInlineClass : SymbolLightClassForClassOrObject
|
||||
manager = manager,
|
||||
)
|
||||
|
||||
private val _ownMethods: List<KtLightMethod> by lazyPub {
|
||||
override fun getOwnMethods(): List<PsiMethod> = cachedValue {
|
||||
withClassOrObjectSymbol { classOrObjectSymbol ->
|
||||
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 ->
|
||||
mutableListOf<KtLightField>().apply {
|
||||
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 =
|
||||
SymbolLightClassForInlineClass(classOrObjectDeclaration, classOrObjectSymbolPointer, ktModule, manager)
|
||||
}
|
||||
|
||||
+2
-4
@@ -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.asJava.classes.lazyPub
|
||||
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.KtClassOrObject
|
||||
|
||||
@@ -52,7 +53,7 @@ internal open class SymbolLightClassForInterface : SymbolLightClassForInterfaceO
|
||||
manager = manager,
|
||||
)
|
||||
|
||||
private val _ownMethods: List<KtLightMethod> by lazyPub {
|
||||
override fun getOwnMethods(): List<PsiMethod> = cachedValue {
|
||||
withClassOrObjectSymbol { classOrObjectSymbol ->
|
||||
val result = mutableListOf<KtLightMethod>()
|
||||
|
||||
@@ -69,9 +70,6 @@ internal open class SymbolLightClassForInterface : SymbolLightClassForInterfaceO
|
||||
protected open fun acceptCallableSymbol(symbol: KtCallableSymbol): Boolean =
|
||||
!(symbol is KtFunctionSymbol && symbol.visibility.isPrivateOrPrivateToThis() || symbol.hasTypeForValueClassInSignature())
|
||||
|
||||
|
||||
override fun getOwnMethods(): List<PsiMethod> = _ownMethods
|
||||
|
||||
override fun copy(): SymbolLightClassForInterface =
|
||||
SymbolLightClassForInterface(classOrObjectDeclaration, classOrObjectSymbolPointer, ktModule, manager)
|
||||
|
||||
|
||||
+2
-3
@@ -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.GranularAnnotationsBox
|
||||
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.SymbolLightClassModifierList
|
||||
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.with
|
||||
@@ -84,7 +85,7 @@ internal abstract class SymbolLightClassForInterfaceOrAnnotationClass : SymbolLi
|
||||
|
||||
final override fun getModifierList(): PsiModifierList? = _modifierList
|
||||
|
||||
private val _ownFields: List<KtLightField> by lazyPub {
|
||||
override fun getOwnFields(): List<KtLightField> = cachedValue {
|
||||
withClassOrObjectSymbol { classOrObjectSymbol ->
|
||||
buildList {
|
||||
addCompanionObjectFieldIfNeeded(this, classOrObjectSymbol)
|
||||
@@ -93,7 +94,5 @@ internal abstract class SymbolLightClassForInterfaceOrAnnotationClass : SymbolLi
|
||||
}
|
||||
}
|
||||
|
||||
override fun getOwnFields(): List<KtLightField> = _ownFields
|
||||
|
||||
override fun getImplementsList(): PsiReferenceList? = null
|
||||
}
|
||||
|
||||
+3
-3
@@ -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.SymbolAnnotationsProvider
|
||||
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.SymbolLightClassForEnumEntry
|
||||
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 _initializingClass: PsiEnumConstantInitializer? by lazyPub {
|
||||
override fun getInitializingClass(): PsiEnumConstantInitializer? = cachedValue {
|
||||
hasBody.ifTrue {
|
||||
SymbolLightClassForEnumEntry(
|
||||
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 resolveMethod(): PsiMethod? = null
|
||||
|
||||
+9
@@ -6,6 +6,8 @@
|
||||
package org.jetbrains.kotlin.light.classes.symbol
|
||||
|
||||
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.util.IncorrectOperationException
|
||||
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.types.*
|
||||
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.asJava.elements.KtLightElement
|
||||
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> {
|
||||
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())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user