From af414cfb5ecf7bcf855749e64b4477f71370819f Mon Sep 17 00:00:00 2001 From: aleksandrina-streltsova Date: Wed, 4 Jan 2023 14:03:10 +0200 Subject: [PATCH] [Analysis API] Provide API for getting `KtTypeAliasSymbol` by `ClassId` --- .../api/descriptors/components/KtFe10SymbolProvider.kt | 7 +++++++ .../analysis/api/fir/symbols/KtFirSymbolProvider.kt | 5 +++++ .../kotlin/analysis/api/symbols/KtSymbolProvider.kt | 8 ++++++++ 3 files changed, 20 insertions(+) diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10SymbolProvider.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10SymbolProvider.kt index 21570b456fe..9dbcc4b9c23 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10SymbolProvider.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10SymbolProvider.kt @@ -10,11 +10,13 @@ import org.jetbrains.kotlin.analysis.api.descriptors.components.base.Fe10KtAnaly import org.jetbrains.kotlin.analysis.api.descriptors.symbols.KtFe10FileSymbol import org.jetbrains.kotlin.analysis.api.descriptors.symbols.KtFe10PackageSymbol import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtClassSymbol +import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtClassifierSymbol import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtSymbol import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.* import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken import org.jetbrains.kotlin.analysis.api.symbols.* import org.jetbrains.kotlin.descriptors.findClassAcrossModuleDependencies +import org.jetbrains.kotlin.descriptors.findTypeAliasAcrossModuleDependencies import org.jetbrains.kotlin.descriptors.isEmpty import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName @@ -122,6 +124,11 @@ internal class KtFe10SymbolProvider( return descriptor.toKtClassSymbol(analysisContext) } + override fun getTypeAliasByClassId(classId: ClassId): KtTypeAliasSymbol? { + val descriptor = analysisContext.resolveSession.moduleDescriptor.findTypeAliasAcrossModuleDependencies(classId) ?: return null + return descriptor.toKtClassifierSymbol(analysisContext) as? KtTypeAliasSymbol + } + override fun getTopLevelCallableSymbols(packageFqName: FqName, name: Name): Sequence { val packageViewDescriptor = analysisContext.resolveSession.moduleDescriptor.getPackage(packageFqName) return packageViewDescriptor.memberScope.getContributedDescriptors(DescriptorKindFilter.ALL, nameFilter = { it == name }) diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirSymbolProvider.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirSymbolProvider.kt index e0ff9d0cebd..1c85f29757e 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirSymbolProvider.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirSymbolProvider.kt @@ -161,6 +161,11 @@ internal class KtFirSymbolProvider( return firSymbolBuilder.classifierBuilder.buildNamedClassOrObjectSymbol(symbol) } + override fun getTypeAliasByClassId(classId: ClassId): KtTypeAliasSymbol? { + val symbol = firSymbolProvider.getClassLikeSymbolByClassId(classId) as? FirTypeAliasSymbol ?: return null + return firSymbolBuilder.classifierBuilder.buildTypeAliasSymbol(symbol) + } + override fun getTopLevelCallableSymbols(packageFqName: FqName, name: Name): Sequence { val firs = firSymbolProvider.getTopLevelCallableSymbols(packageFqName, name) return firs.asSequence().map { firSymbol -> diff --git a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/symbols/KtSymbolProvider.kt b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/symbols/KtSymbolProvider.kt index 473c88d5709..0873a1ebd31 100644 --- a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/symbols/KtSymbolProvider.kt +++ b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/symbols/KtSymbolProvider.kt @@ -55,6 +55,8 @@ public abstract class KtSymbolProvider : KtAnalysisSessionComponent() { public abstract fun getClassOrObjectSymbolByClassId(classId: ClassId): KtClassOrObjectSymbol? + public abstract fun getTypeAliasByClassId(classId: ClassId): KtTypeAliasSymbol? + public abstract fun getTopLevelCallableSymbols(packageFqName: FqName, name: Name): Sequence @Suppress("PropertyName") @@ -142,6 +144,12 @@ public interface KtSymbolProviderMixIn : KtAnalysisSessionMixIn { public fun getClassOrObjectSymbolByClassId(classId: ClassId): KtClassOrObjectSymbol? = withValidityAssertion { analysisSession.symbolProvider.getClassOrObjectSymbolByClassId(classId) } + /** + * @return [KtTypeAliasSymbol] with specified [classId] or `null` in case such symbol is not found + */ + public fun getTypeAliasByClassId(classId: ClassId): KtTypeAliasSymbol? = + withValidityAssertion { analysisSession.symbolProvider.getTypeAliasByClassId(classId) } + /** * @return list of top-level functions and properties which are visible from current use-site module *