From 62b4c7e52aa0f7517d6f9611bf089030022a5010 Mon Sep 17 00:00:00 2001 From: Dmitrii Gridin Date: Fri, 30 Sep 2022 23:13:58 +0200 Subject: [PATCH] [SLC] drop KtAnalysisSession from SymbolLightClassForEnumEntry ^KT-54051 --- .../symbol/classes/SymbolLightClass.kt | 8 ++++- .../classes/SymbolLightClassForEnumEntry.kt | 32 +++++++------------ .../fields/SymbolLightFieldForEnumEntry.kt | 19 ++++++----- 3 files changed, 27 insertions(+), 32 deletions(-) diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClass.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClass.kt index 2c1bbb0638c..354c8860b70 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClass.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClass.kt @@ -287,7 +287,13 @@ internal open class SymbolLightClass(classOrObject: KtClassOrObject, ktModule: K .mapNotNullTo(result) { val enumEntry = it.psiSafe() val name = enumEntry?.name ?: return@mapNotNullTo null - SymbolLightFieldForEnumEntry(enumEntry, name, this@SymbolLightClass, null) + SymbolLightFieldForEnumEntry( + enumEntry = enumEntry, + enumEntryName = name, + containingClass = this@SymbolLightClass, + lightMemberOrigin = null, + ktModule = ktModule, + ) } } } diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForEnumEntry.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForEnumEntry.kt index f7468938d96..e5348208b70 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForEnumEntry.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForEnumEntry.kt @@ -7,9 +7,6 @@ package org.jetbrains.kotlin.light.classes.symbol.classes import com.intellij.psi.* import com.intellij.psi.impl.PsiClassImplUtil -import org.jetbrains.kotlin.analysis.api.KtAnalysisSession -import org.jetbrains.kotlin.analysis.api.lifetime.isValid -import org.jetbrains.kotlin.analysis.api.symbols.KtEnumEntrySymbol import org.jetbrains.kotlin.analysis.api.types.KtTypeMappingMode import org.jetbrains.kotlin.analysis.project.structure.KtModule import org.jetbrains.kotlin.asJava.classes.KotlinSuperTypeListBuilder @@ -21,15 +18,12 @@ import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightClassM import org.jetbrains.kotlin.load.java.structure.LightClassOriginKind import org.jetbrains.kotlin.psi.KtClassOrObject -context(KtAnalysisSession) internal class SymbolLightClassForEnumEntry( - private val enumEntrySymbol: KtEnumEntrySymbol, private val enumConstant: SymbolLightFieldForEnumEntry, private val enumClass: SymbolLightClass, ktModule: KtModule, ) : SymbolLightClassBase(ktModule, enumConstant.manager), PsiEnumConstantInitializer { - - override fun getName(): String = enumEntrySymbol.name.asString() + override fun getName(): String = enumConstant.name override fun getBaseClassType(): PsiClassType = enumConstant.type as PsiClassType //???TODO @@ -43,13 +37,11 @@ internal class SymbolLightClassForEnumEntry( override fun isInQualifiedNew(): Boolean = false override fun equals(other: Any?): Boolean = - other is SymbolLightClassForEnumEntry && - this.enumEntrySymbol == other.enumEntrySymbol + this === other || other is SymbolLightClassForEnumEntry && this.enumConstant == other.enumConstant - override fun hashCode(): Int = - enumEntrySymbol.hashCode() + override fun hashCode(): Int = enumConstant.hashCode() - override fun copy(): PsiElement = SymbolLightClassForEnumEntry(enumEntrySymbol, enumConstant, enumClass, ktModule) + override fun copy(): PsiElement = SymbolLightClassForEnumEntry(enumConstant, enumClass, ktModule) override fun toString(): String = "SymbolLightClassForEnumEntry:$name" @@ -85,9 +77,9 @@ internal class SymbolLightClassForEnumEntry( override fun isEnum(): Boolean = false private val _extendsList: PsiReferenceList? by lazyPub { - val mappedType = - enumEntrySymbol.returnType.asPsiType(this@SymbolLightClassForEnumEntry, KtTypeMappingMode.SUPER_TYPE) as? PsiClassType - ?: return@lazyPub null + val mappedType = enumConstant.withEnumEntrySymbol { symbol -> + symbol.returnType.asPsiType(this@SymbolLightClassForEnumEntry, KtTypeMappingMode.SUPER_TYPE) as? PsiClassType + } ?: return@lazyPub null KotlinSuperTypeListBuilder( kotlinOrigin = enumClass.kotlinOrigin.getSuperTypeList(), @@ -119,24 +111,22 @@ internal class SymbolLightClassForEnumEntry( override fun isInheritorDeep(baseClass: PsiClass?, classToByPass: PsiClass?): Boolean = false //TODO - override val kotlinOrigin: KtClassOrObject? = enumConstant.kotlinOrigin + override val kotlinOrigin: KtClassOrObject = enumConstant.kotlinOrigin override val originKind: LightClassOriginKind = LightClassOriginKind.SOURCE override fun getOwnFields(): MutableList = mutableListOf() - override fun getOwnMethods(): MutableList { + override fun getOwnMethods(): MutableList = enumConstant.withEnumEntrySymbol { enumEntrySymbol -> val result = mutableListOf() - val declaredMemberScope = enumEntrySymbol.getDeclaredMemberScope() createMethods(declaredMemberScope.getCallableSymbols(), result) createConstructors(declaredMemberScope.getConstructors(), result) - - return result + result } override fun getOwnInnerClasses(): MutableList = mutableListOf() - override fun isValid(): Boolean = super.isValid() && enumEntrySymbol.isValid() + override fun isValid(): Boolean = enumConstant.isValid } diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/SymbolLightFieldForEnumEntry.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/SymbolLightFieldForEnumEntry.kt index 6da77d0fbd8..cfa13088d33 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/SymbolLightFieldForEnumEntry.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/SymbolLightFieldForEnumEntry.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.light.classes.symbol.fields import com.intellij.psi.* import org.jetbrains.kotlin.analysis.api.KtAnalysisSession import org.jetbrains.kotlin.analysis.api.symbols.KtEnumEntrySymbol +import org.jetbrains.kotlin.analysis.project.structure.KtModule import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin import org.jetbrains.kotlin.asJava.classes.cannotModify import org.jetbrains.kotlin.asJava.classes.lazyPub @@ -27,9 +28,10 @@ internal class SymbolLightFieldForEnumEntry( private val enumEntry: KtEnumEntry, private val enumEntryName: String, containingClass: SymbolLightClass, - override val lightMemberOrigin: LightMemberOrigin? + override val lightMemberOrigin: LightMemberOrigin?, + val ktModule: KtModule, ) : SymbolLightField(containingClass, lightMemberOrigin), PsiEnumConstant { - private fun withEnumEntrySymbol(action: KtAnalysisSession.(KtEnumEntrySymbol) -> T): T = analyzeForLightClasses(enumEntry) { + internal fun withEnumEntrySymbol(action: KtAnalysisSession.(KtEnumEntrySymbol) -> T): T = analyzeForLightClasses(ktModule) { action(enumEntry.getEnumEntrySymbol()) } @@ -57,14 +59,11 @@ internal class SymbolLightFieldForEnumEntry( private val _initializingClass: PsiEnumConstantInitializer? by lazyPub { hasBody.ifTrue { - withEnumEntrySymbol { enumEntrySymbol -> - SymbolLightClassForEnumEntry( - enumEntrySymbol = enumEntrySymbol, - enumConstant = this@SymbolLightFieldForEnumEntry, - enumClass = containingClass, - ktModule = enumEntrySymbol.getContainingModule(), - ) - } + SymbolLightClassForEnumEntry( + enumConstant = this@SymbolLightFieldForEnumEntry, + enumClass = containingClass, + ktModule = ktModule, + ) } }