diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirNamedClassOrObjectSymbol.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirNamedClassOrObjectSymbol.kt index 7ed4c22830b..4f0628340e4 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirNamedClassOrObjectSymbol.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirNamedClassOrObjectSymbol.kt @@ -11,9 +11,7 @@ import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver 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.KtFirMemberClassOrObjectSymbolPointer -import org.jetbrains.kotlin.analysis.api.fir.symbols.pointers.KtFirTopLevelClassOrObjectSymbolPointer -import org.jetbrains.kotlin.analysis.api.fir.symbols.pointers.requireOwnerPointer +import org.jetbrains.kotlin.analysis.api.fir.symbols.pointers.KtFirClassLikeSymbolPointer import org.jetbrains.kotlin.analysis.api.fir.utils.cached import org.jetbrains.kotlin.analysis.api.impl.base.symbols.toKtClassKind import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken @@ -109,10 +107,9 @@ internal class KtFirNamedClassOrObjectSymbol( when (val symbolKind = symbolKind) { KtSymbolKind.LOCAL -> - throw CanNotCreateSymbolPointerForLocalLibraryDeclarationException(classIdIfNonLocal?.asString().orEmpty()) + throw CanNotCreateSymbolPointerForLocalLibraryDeclarationException(classIdIfNonLocal?.asString() ?: name.asString()) - KtSymbolKind.CLASS_MEMBER -> KtFirMemberClassOrObjectSymbolPointer(requireOwnerPointer(), name) - KtSymbolKind.TOP_LEVEL -> KtFirTopLevelClassOrObjectSymbolPointer(classIdIfNonLocal!!) + KtSymbolKind.CLASS_MEMBER, KtSymbolKind.TOP_LEVEL -> KtFirClassLikeSymbolPointer(classIdIfNonLocal!!) { it as? KtNamedClassOrObjectSymbol } else -> throw UnsupportedSymbolKind(this::class, symbolKind) } } diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirTypeAliasSymbol.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirTypeAliasSymbol.kt index 77181683b0a..58d27005ece 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirTypeAliasSymbol.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirTypeAliasSymbol.kt @@ -10,9 +10,7 @@ import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList 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.KtFirMemberTypeAliasSymbolPointer -import org.jetbrains.kotlin.analysis.api.fir.symbols.pointers.KtFirTopLevelTypeAliasSymbolPointer -import org.jetbrains.kotlin.analysis.api.fir.symbols.pointers.requireOwnerPointer +import org.jetbrains.kotlin.analysis.api.fir.symbols.pointers.KtFirClassLikeSymbolPointer 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 @@ -66,8 +64,7 @@ internal class KtFirTypeAliasSymbol( KtSymbolKind.LOCAL -> throw CanNotCreateSymbolPointerForLocalLibraryDeclarationException(classIdIfNonLocal?.asString() ?: name.asString()) - KtSymbolKind.CLASS_MEMBER -> KtFirMemberTypeAliasSymbolPointer(requireOwnerPointer(), name) - KtSymbolKind.TOP_LEVEL -> KtFirTopLevelTypeAliasSymbolPointer(classIdIfNonLocal!!) + KtSymbolKind.CLASS_MEMBER, KtSymbolKind.TOP_LEVEL -> KtFirClassLikeSymbolPointer(classIdIfNonLocal!!) { it as? KtTypeAliasSymbol } else -> throw UnsupportedSymbolKind(this::class, symbolKind) } } diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/pointers/KtFirTopLevelTypeAliasSymbolPointer.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/pointers/KtFirClassLikeSymbolPointer.kt similarity index 63% rename from analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/pointers/KtFirTopLevelTypeAliasSymbolPointer.kt rename to analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/pointers/KtFirClassLikeSymbolPointer.kt index 77d9889517d..2ed0b0686a8 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/pointers/KtFirTopLevelTypeAliasSymbolPointer.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/pointers/KtFirClassLikeSymbolPointer.kt @@ -7,15 +7,18 @@ 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.symbols.KtNamedClassOrObjectSymbol -import org.jetbrains.kotlin.analysis.api.symbols.KtTypeAliasSymbol +import org.jetbrains.kotlin.analysis.api.symbols.KtClassLikeSymbol import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer import org.jetbrains.kotlin.name.ClassId -class KtFirTopLevelTypeAliasSymbolPointer(private val classId: ClassId) : KtSymbolPointer() { +class KtFirClassLikeSymbolPointer( + private val classId: ClassId, + private val castAction: (KtClassLikeSymbol) -> T?, +) : KtSymbolPointer() { @Deprecated("Consider using org.jetbrains.kotlin.analysis.api.KtAnalysisSession.restoreSymbol") - override fun restoreSymbol(analysisSession: KtAnalysisSession): KtTypeAliasSymbol? { + override fun restoreSymbol(analysisSession: KtAnalysisSession): T? { require(analysisSession is KtFirAnalysisSession) - return analysisSession.firSymbolBuilder.classifierBuilder.buildClassLikeSymbolByClassId(classId) as? KtTypeAliasSymbol + val classLikeSymbol = analysisSession.firSymbolBuilder.classifierBuilder.buildClassLikeSymbolByClassId(classId) ?: return null + return castAction(classLikeSymbol) } } diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/pointers/KtFirMemberClassOrObjectSymbolPointer.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/pointers/KtFirMemberClassOrObjectSymbolPointer.kt deleted file mode 100644 index eda91aac0f8..00000000000 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/pointers/KtFirMemberClassOrObjectSymbolPointer.kt +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.analysis.api.fir.symbols.pointers - -import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSession -import org.jetbrains.kotlin.analysis.api.symbols.KtNamedClassOrObjectSymbol -import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithMembers -import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer -import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.scopes.FirScope -import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol -import org.jetbrains.kotlin.name.Name - -internal class KtFirMemberClassOrObjectSymbolPointer( - ownerPointer: KtSymbolPointer, - private val name: Name, -) : KtFirMemberSymbolPointer(ownerPointer) { - override fun KtFirAnalysisSession.chooseCandidateAndCreateSymbol( - candidates: FirScope, - firSession: FirSession - ): KtNamedClassOrObjectSymbol? { - val result = candidates.findClassifier(name) ?: return null - return firSymbolBuilder.classifierBuilder.buildNamedClassOrObjectSymbol(result) - } -} diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/pointers/KtFirMemberTypeAliasSymbolPointer.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/pointers/KtFirMemberTypeAliasSymbolPointer.kt deleted file mode 100644 index 76ac89fbe60..00000000000 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/pointers/KtFirMemberTypeAliasSymbolPointer.kt +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.analysis.api.fir.symbols.pointers - -import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSession -import org.jetbrains.kotlin.analysis.api.symbols.KtTypeAliasSymbol -import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithMembers -import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer -import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.scopes.FirScope -import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol -import org.jetbrains.kotlin.name.Name - -internal class KtFirMemberTypeAliasSymbolPointer( - ownerPointer: KtSymbolPointer, - private val name: Name, -) : KtFirMemberSymbolPointer(ownerPointer) { - override fun KtFirAnalysisSession.chooseCandidateAndCreateSymbol( - candidates: FirScope, - firSession: FirSession - ): KtTypeAliasSymbol? { - val result = candidates.findClassifier(name) ?: return null - return firSymbolBuilder.classifierBuilder.buildTypeAliasSymbol(result) - } -} diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/pointers/KtFirTopLevelClassOrObjectSymbolPointer.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/pointers/KtFirTopLevelClassOrObjectSymbolPointer.kt deleted file mode 100644 index 227e1ff12cf..00000000000 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/pointers/KtFirTopLevelClassOrObjectSymbolPointer.kt +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -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.symbols.KtNamedClassOrObjectSymbol -import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer -import org.jetbrains.kotlin.name.ClassId - -class KtFirTopLevelClassOrObjectSymbolPointer(private val classId: ClassId) : KtSymbolPointer() { - @Deprecated("Consider using org.jetbrains.kotlin.analysis.api.KtAnalysisSession.restoreSymbol") - override fun restoreSymbol(analysisSession: KtAnalysisSession): KtNamedClassOrObjectSymbol? { - require(analysisSession is KtFirAnalysisSession) - return analysisSession.firSymbolBuilder.classifierBuilder.buildClassLikeSymbolByClassId(classId) as? KtNamedClassOrObjectSymbol - } -}