[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.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 {
|
||||||
|
|||||||
+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.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()
|
||||||
|
|
||||||
|
|||||||
+1
-3
@@ -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
|
||||||
|
|||||||
+3
-4
@@ -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>()
|
||||||
|
|
||||||
|
|||||||
+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.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
|
||||||
|
|
||||||
|
|||||||
+3
-4
@@ -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 ->
|
||||||
|
|||||||
+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.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)
|
||||||
}
|
}
|
||||||
|
|||||||
+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.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)
|
||||||
|
|
||||||
|
|||||||
+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.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
|
||||||
}
|
}
|
||||||
|
|||||||
+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.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
|
||||||
|
|||||||
+9
@@ -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())
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user