[Analysis API, FIR] optimize KtSymbol requests for declaration statuses

resolvedStatus is not needed for the most calls while it may be expensive to compute as it requires running declaration resolve.
This commit is contained in:
Ilya Kirillov
2022-06-23 15:51:46 +02:00
parent bc39727bf1
commit 1915a1029f
3 changed files with 35 additions and 28 deletions
@@ -29,20 +29,20 @@ inline val FirCallableSymbol<*>.allowsToHaveFakeOverride: Boolean
inline val FirCallableSymbol<*>.isActual: Boolean get() = resolvedStatus.isActual
inline val FirCallableSymbol<*>.isExpect: Boolean get() = resolvedStatus.isExpect
inline val FirCallableSymbol<*>.isInner: Boolean get() = resolvedStatus.isInner
inline val FirCallableSymbol<*>.isStatic: Boolean get() = resolvedStatus.isStatic
inline val FirCallableSymbol<*>.isOverride: Boolean get() = resolvedStatus.isOverride
inline val FirCallableSymbol<*>.isInner: Boolean get() = rawStatus.isInner
inline val FirCallableSymbol<*>.isStatic: Boolean get() = rawStatus.isStatic
inline val FirCallableSymbol<*>.isOverride: Boolean get() = rawStatus.isOverride
inline val FirCallableSymbol<*>.isOperator: Boolean get() = resolvedStatus.isOperator
inline val FirCallableSymbol<*>.isInfix: Boolean get() = resolvedStatus.isInfix
inline val FirCallableSymbol<*>.isInline: Boolean get() = resolvedStatus.isInline
inline val FirCallableSymbol<*>.isTailRec: Boolean get() = resolvedStatus.isTailRec
inline val FirCallableSymbol<*>.isExternal: Boolean get() = resolvedStatus.isExternal
inline val FirCallableSymbol<*>.isSuspend: Boolean get() = resolvedStatus.isSuspend
inline val FirCallableSymbol<*>.isConst: Boolean get() = resolvedStatus.isConst
inline val FirCallableSymbol<*>.isLateInit: Boolean get() = resolvedStatus.isLateInit
inline val FirCallableSymbol<*>.isFromSealedClass: Boolean get() = resolvedStatus.isFromSealedClass
inline val FirCallableSymbol<*>.isFromEnumClass: Boolean get() = resolvedStatus.isFromEnumClass
inline val FirCallableSymbol<*>.isFun: Boolean get() = resolvedStatus.isFun
inline val FirCallableSymbol<*>.isInline: Boolean get() = rawStatus.isInline
inline val FirCallableSymbol<*>.isTailRec: Boolean get() = rawStatus.isTailRec
inline val FirCallableSymbol<*>.isExternal: Boolean get() = rawStatus.isExternal
inline val FirCallableSymbol<*>.isSuspend: Boolean get() = rawStatus.isSuspend
inline val FirCallableSymbol<*>.isConst: Boolean get() = rawStatus.isConst
inline val FirCallableSymbol<*>.isLateInit: Boolean get() = rawStatus.isLateInit
inline val FirCallableSymbol<*>.isFromSealedClass: Boolean get() = rawStatus.isFromSealedClass
inline val FirCallableSymbol<*>.isFromEnumClass: Boolean get() = rawStatus.isFromEnumClass
inline val FirCallableSymbol<*>.isFun: Boolean get() = rawStatus.isFun
// ---------------------- regular with status ----------------------
@@ -61,15 +61,15 @@ inline val FirClassSymbol<*>.effectiveVisibility: EffectiveVisibility get() = re
inline val FirClassSymbol<*>.isActual: Boolean get() = resolvedStatus.isActual
inline val FirClassSymbol<*>.isExpect: Boolean get() = resolvedStatus.isExpect
inline val FirClassSymbol<*>.isInner: Boolean get() = resolvedStatus.isInner
inline val FirClassSymbol<*>.isStatic: Boolean get() = resolvedStatus.isStatic
inline val FirClassSymbol<*>.isInline: Boolean get() = resolvedStatus.isInline
inline val FirClassSymbol<*>.isExternal: Boolean get() = resolvedStatus.isExternal
inline val FirClassSymbol<*>.isFromSealedClass: Boolean get() = resolvedStatus.isFromSealedClass
inline val FirClassSymbol<*>.isFromEnumClass: Boolean get() = resolvedStatus.isFromEnumClass
inline val FirClassSymbol<*>.isFun: Boolean get() = resolvedStatus.isFun
inline val FirClassSymbol<*>.isCompanion: Boolean get() = resolvedStatus.isCompanion
inline val FirClassSymbol<*>.isData: Boolean get() = resolvedStatus.isData
inline val FirClassSymbol<*>.isInner: Boolean get() = rawStatus.isInner
inline val FirClassSymbol<*>.isStatic: Boolean get() = rawStatus.isStatic
inline val FirClassSymbol<*>.isInline: Boolean get() = rawStatus.isInline
inline val FirClassSymbol<*>.isExternal: Boolean get() = rawStatus.isExternal
inline val FirClassSymbol<*>.isFromSealedClass: Boolean get() = rawStatus.isFromSealedClass
inline val FirClassSymbol<*>.isFromEnumClass: Boolean get() = rawStatus.isFromEnumClass
inline val FirClassSymbol<*>.isFun: Boolean get() = rawStatus.isFun
inline val FirClassSymbol<*>.isCompanion: Boolean get() = rawStatus.isCompanion
inline val FirClassSymbol<*>.isData: Boolean get() = rawStatus.isData
inline val FirClassSymbol<*>.isSealed: Boolean get() = resolvedStatus.modality == Modality.SEALED
inline val FirRegularClassSymbol.canHaveAbstractDeclaration: Boolean
@@ -93,13 +93,13 @@ inline val FirTypeAliasSymbol.effectiveVisibility: EffectiveVisibility
inline val FirTypeAliasSymbol.isActual: Boolean get() = resolvedStatus.isActual
inline val FirTypeAliasSymbol.isExpect: Boolean get() = resolvedStatus.isExpect
inline val FirTypeAliasSymbol.isInner: Boolean get() = resolvedStatus.isInner
inline val FirTypeAliasSymbol.isStatic: Boolean get() = resolvedStatus.isStatic
inline val FirTypeAliasSymbol.isInline: Boolean get() = resolvedStatus.isInline
inline val FirTypeAliasSymbol.isExternal: Boolean get() = resolvedStatus.isExternal
inline val FirTypeAliasSymbol.isFromSealedClass: Boolean get() = resolvedStatus.isFromSealedClass
inline val FirTypeAliasSymbol.isFromEnumClass: Boolean get() = resolvedStatus.isFromEnumClass
inline val FirTypeAliasSymbol.isFun: Boolean get() = resolvedStatus.isFun
inline val FirTypeAliasSymbol.isInner: Boolean get() = rawStatus.isInner
inline val FirTypeAliasSymbol.isStatic: Boolean get() = rawStatus.isStatic
inline val FirTypeAliasSymbol.isInline: Boolean get() = rawStatus.isInline
inline val FirTypeAliasSymbol.isExternal: Boolean get() = rawStatus.isExternal
inline val FirTypeAliasSymbol.isFromSealedClass: Boolean get() = rawStatus.isFromSealedClass
inline val FirTypeAliasSymbol.isFromEnumClass: Boolean get() = rawStatus.isFromEnumClass
inline val FirTypeAliasSymbol.isFun: Boolean get() = rawStatus.isFun
// ---------------------- common classes ----------------------
@@ -37,6 +37,10 @@ abstract class FirCallableSymbol<D : FirCallableDeclaration> : FirBasedSymbol<D>
return fir.status as FirResolvedDeclarationStatus
}
val rawStatus: FirDeclarationStatus
get() = fir.status
val typeParameterSymbols: List<FirTypeParameterSymbol>
get() {
return fir.typeParameters.map { it.symbol }
@@ -30,6 +30,9 @@ sealed class FirClassLikeSymbol<D : FirClassLikeDeclaration>(
return fir.deprecation
}
val rawStatus: FirDeclarationStatus
get() = fir.status
override fun toString(): String = "${this::class.simpleName} ${classId.asString()}"
}