diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirEnumEntrySymbol.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirEnumEntrySymbol.kt index 2d13fd5bece..3f9761437ad 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirEnumEntrySymbol.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirEnumEntrySymbol.kt @@ -11,15 +11,15 @@ import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForDeclaration import org.jetbrains.kotlin.analysis.api.fir.findPsi import org.jetbrains.kotlin.analysis.api.fir.symbols.pointers.KtFirEnumEntrySymbolPointer +import org.jetbrains.kotlin.analysis.api.fir.symbols.pointers.requireOwnerPointer import org.jetbrains.kotlin.analysis.api.fir.utils.cached +import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken +import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion import org.jetbrains.kotlin.analysis.api.symbols.KtEnumEntrySymbol import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtPsiBasedSymbolPointer import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer -import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken import org.jetbrains.kotlin.analysis.api.types.KtType -import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession -import org.jetbrains.kotlin.fir.containingClassLookupTag import org.jetbrains.kotlin.fir.symbols.impl.FirEnumEntrySymbol import org.jetbrains.kotlin.name.CallableId import org.jetbrains.kotlin.name.ClassId @@ -45,11 +45,7 @@ internal class KtFirEnumEntrySymbol( override val callableIdIfNonLocal: CallableId? get() = withValidityAssertion { firSymbol.getCallableIdIfNonLocal() } override fun createPointer(): KtSymbolPointer = withValidityAssertion { - KtPsiBasedSymbolPointer.createForSymbolFromSource(this)?.let { return it } - return KtFirEnumEntrySymbolPointer( - firSymbol.containingClassLookupTag()?.classId ?: error("Containing class should present for enum entry"), - firSymbol.name - ) + KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFirEnumEntrySymbolPointer(requireOwnerPointer(), firSymbol.name) } override fun equals(other: Any?): Boolean = symbolEquals(other) diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/pointers/KtFirEnumEntrySymbolPointer.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/pointers/KtFirEnumEntrySymbolPointer.kt index 8a90039ae9f..53e1cfae621 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/pointers/KtFirEnumEntrySymbolPointer.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/pointers/KtFirEnumEntrySymbolPointer.kt @@ -7,33 +7,30 @@ package org.jetbrains.kotlin.analysis.api.fir.symbols.pointers import org.jetbrains.kotlin.analysis.api.KtAnalysisSession import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSession +import org.jetbrains.kotlin.analysis.api.fir.utils.firSymbol +import org.jetbrains.kotlin.analysis.api.symbols.KtClassOrObjectSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtEnumEntrySymbol import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.fir.declarations.FirEnumEntry import org.jetbrains.kotlin.fir.declarations.FirRegularClass -import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.Name internal class KtFirEnumEntrySymbolPointer( - private val ownerClassId: ClassId, - private val name: Name + private val ownerPointer: KtSymbolPointer, + private val name: Name, ) : KtSymbolPointer() { @Deprecated("Consider using org.jetbrains.kotlin.analysis.api.KtAnalysisSession.restoreSymbol") override fun restoreSymbol(analysisSession: KtAnalysisSession): KtEnumEntrySymbol? { require(analysisSession is KtFirAnalysisSession) - val enumClass = getEnumClass(analysisSession, ownerClassId) - ?: return null - val enumEntry = enumClass.enumEntryByName(name) - ?: return null - return analysisSession.firSymbolBuilder.buildEnumEntrySymbol(enumEntry.symbol) - } + val owner = with(analysisSession) { + ownerPointer.restoreSymbol() + } - private fun getEnumClass(analysisSession: KtFirAnalysisSession, classId: ClassId): FirRegularClass? { - val enumClass = analysisSession.firSymbolProvider.getClassLikeSymbolByClassId(classId)?.fir as? FirRegularClass - ?: return null + val enumClass = owner?.firSymbol?.fir as? FirRegularClass ?: return null if (enumClass.classKind != ClassKind.ENUM_CLASS) return null - return enumClass + val enumEntry = enumClass.enumEntryByName(name) ?: return null + return analysisSession.firSymbolBuilder.buildEnumEntrySymbol(enumEntry.symbol) } private fun FirRegularClass.enumEntryByName(name: Name): FirEnumEntry? =