[Analysis API] Provide API for getting KtTypeAliasSymbol by ClassId

This commit is contained in:
aleksandrina-streltsova
2023-01-04 14:03:10 +02:00
committed by Space Team
parent ca68ca753a
commit af414cfb5e
3 changed files with 20 additions and 0 deletions
@@ -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<KtCallableSymbol> {
val packageViewDescriptor = analysisContext.resolveSession.moduleDescriptor.getPackage(packageFqName)
return packageViewDescriptor.memberScope.getContributedDescriptors(DescriptorKindFilter.ALL, nameFilter = { it == name })
@@ -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<KtCallableSymbol> {
val firs = firSymbolProvider.getTopLevelCallableSymbols(packageFqName, name)
return firs.asSequence().map { firSymbol ->
@@ -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<KtCallableSymbol>
@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
*