Analysis API: use FirSymbol in KtFirSymbol's instead of FirDeclaration

^KT-50271 fixed
This commit is contained in:
Ilya Kirillov
2022-01-20 15:47:11 +01:00
parent b20859e305
commit 16fbc09997
82 changed files with 1359 additions and 1434 deletions
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.*
// ---------------------- callables with status ----------------------
inline val FirCallableSymbol<*>.modality: Modality? get() = resolvedStatus.modality
inline val FirCallableSymbol<*>.modalityOrFinal: Modality get() = modality ?: Modality.FINAL
inline val FirCallableSymbol<*>.isAbstract: Boolean get() = resolvedStatus.modality == Modality.ABSTRACT
inline val FirCallableSymbol<*>.isOpen: Boolean get() = resolvedStatus.modality == Modality.OPEN
inline val FirCallableSymbol<*>.isFinal: Boolean
@@ -9,7 +9,11 @@ import org.jetbrains.kotlin.KtSourceElement
import org.jetbrains.kotlin.fir.FirModuleData
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
import org.jetbrains.kotlin.fir.types.coneType
import org.jetbrains.kotlin.name.ClassId
abstract class FirBasedSymbol<E : FirDeclaration> {
private var _fir: E? = null
@@ -34,6 +38,18 @@ abstract class FirBasedSymbol<E : FirDeclaration> {
val annotations: List<FirAnnotation>
get() = fir.annotations
val resolvedAnnotationsWithArguments: List<FirAnnotation>
get() {
ensureResolved(FirResolvePhase.ARGUMENTS_OF_ANNOTATIONS)
return fir.annotations
}
val resolvedAnnotationClassIds: List<ClassId>
get() {
ensureResolved(FirResolvePhase.TYPES)
return fir.annotations.mapNotNull { (it.annotationTypeRef.coneType as? ConeClassLikeType)?.lookupTag?.classId }
}
}
@RequiresOptIn
@@ -21,6 +21,10 @@ abstract class FirCallableSymbol<D : FirCallableDeclaration> : FirBasedSymbol<D>
return fir.returnTypeRef as FirResolvedTypeRef
}
val resolvedReturnType: ConeKotlinType
get() = resolvedReturnTypeRef.coneType
val resolvedReceiverTypeRef: FirResolvedTypeRef?
get() {
ensureType(fir.receiverTypeRef)
@@ -10,10 +10,11 @@ import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.ensureResolved
import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
import org.jetbrains.kotlin.fir.types.coneType
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.name.SpecialNames
sealed class FirClassLikeSymbol<D : FirClassLikeDeclaration>(
@@ -21,6 +22,8 @@ sealed class FirClassLikeSymbol<D : FirClassLikeDeclaration>(
) : FirClassifierSymbol<D>() {
abstract override fun toLookupTag(): ConeClassLikeLookupTag
val name get() = classId.shortClassName
val deprecation: DeprecationsPerUseSite?
get() {
ensureResolved(FirResolvePhase.STATUS)
@@ -44,6 +47,9 @@ sealed class FirClassSymbol<C : FirClass>(classId: ClassId) : FirClassLikeSymbol
return fir.superTypeRefs as List<FirResolvedTypeRef>
}
val resolvedSuperTypes: List<ConeKotlinType>
get() = resolvedSuperTypeRefs.map { it.coneType }
val declarationSymbols: List<FirBasedSymbol<*>>
get() {
return fir.declarations.map { it.symbol }
@@ -105,6 +105,9 @@ class FirAnonymousFunctionSymbol : FirFunctionWithoutNameSymbol<FirAnonymousFunc
val label: FirLabel? get() = fir.label
}
class FirPropertyAccessorSymbol : FirFunctionWithoutNameSymbol<FirPropertyAccessor>(Name.identifier("accessor"))
class FirPropertyAccessorSymbol : FirFunctionWithoutNameSymbol<FirPropertyAccessor>(Name.identifier("accessor")) {
val isGetter: Boolean get() = fir.isGetter
val isSetter: Boolean get() = fir.isSetter
}
class FirErrorFunctionSymbol : FirFunctionWithoutNameSymbol<FirErrorFunction>(Name.identifier("error"))
@@ -30,6 +30,12 @@ open class FirPropertySymbol(
val setterSymbol: FirPropertyAccessorSymbol?
get() = fir.setter?.symbol
val backingFieldSymbol: FirBackingFieldSymbol?
get() = fir.backingField?.symbol
val delegateFieldSymbol: FirDelegateFieldSymbol?
get() = fir.delegateFieldSymbol
val hasInitializer: Boolean
get() = fir.initializer != null
@@ -61,6 +67,9 @@ class FirBackingFieldSymbol(callableId: CallableId) : FirVariableSymbol<FirBacki
val isVar: Boolean
get() = fir.isVar
val propertySymbol: FirPropertySymbol
get() = fir.propertySymbol
val getterSymbol: FirPropertyAccessorSymbol?
get() = fir.propertySymbol.fir.getter?.symbol
}