[FIR] Move call of status transform extensions to FirStatusResolver

It makes more sense to run status transformer extension
  right in status resolve stage, because it reduces
  number of compiler stages
This commit is contained in:
Dmitriy Novozhilov
2021-09-20 15:20:34 +03:00
committed by TeamCityServer
parent 6d42914e56
commit 91624dd841
7 changed files with 128 additions and 142 deletions
@@ -24,7 +24,7 @@ class AllOpenStatusTransformer(session: FirSession) : FirStatusTransformerExtens
private val ALL_OPEN = FqName("org.jetbrains.kotlin.fir.plugin.AllOpen")
}
override fun transformStatus(declaration: FirDeclaration, owners: List<FirAnnotatedDeclaration>, status: FirDeclarationStatus): FirDeclarationStatus {
override fun transformStatus(status: FirDeclarationStatus, declaration: FirAnnotatedDeclaration): FirDeclarationStatus {
if (status.modality != null) return status
return status.transform(modality = Modality.OPEN)
}
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.fir.expressions.arguments
import org.jetbrains.kotlin.fir.extensions.FirStatusTransformerExtension
import org.jetbrains.kotlin.fir.extensions.predicate.DeclarationPredicate
import org.jetbrains.kotlin.fir.extensions.predicate.hasOrUnder
import org.jetbrains.kotlin.fir.extensions.predicateBasedProvider
import org.jetbrains.kotlin.fir.extensions.transform
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
@@ -39,11 +40,8 @@ class AllOpenVisibilityTransformer(session: FirSession) : FirStatusTransformerEx
private val ProtectedName = Name.identifier("Protected")
}
override fun transformStatus(
declaration: FirDeclaration,
owners: List<FirAnnotatedDeclaration>,
status: FirDeclarationStatus
): FirDeclarationStatus {
override fun transformStatus(status: FirDeclarationStatus, declaration: FirAnnotatedDeclaration): FirDeclarationStatus {
val owners = session.predicateBasedProvider.getOwnersOfDeclaration(declaration) ?: emptyList()
val visibility = findVisibility(declaration, owners) ?: return status
if (visibility == status.visibility) return status
return status.transform(visibility = visibility)