[Analysis API] Provide API for getting KtTypeAliasSymbol by ClassId
This commit is contained in:
committed by
Space Team
parent
ca68ca753a
commit
af414cfb5e
+7
@@ -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 })
|
||||
|
||||
+5
@@ -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 ->
|
||||
|
||||
+8
@@ -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
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user