[LL FIR] rewrite on-air resolve

Now we will resolve declarations only ones and to the
minimal required phase to get a fully resolved element
depends on an insert position, because not all elements
require body resolution

A side change: `getOnAirGetTowerContextProvider` now
won't do rebind to the original declaration. In the future,
this part will be rewritten to avoid on-air resolution,
so it is not a problem

^KT-59685 Fixed
This commit is contained in:
Dmitrii Gridin
2023-07-06 11:02:35 +02:00
committed by Space Team
parent 61acd2b6f5
commit 6867dffff1
17 changed files with 345 additions and 263 deletions
@@ -228,6 +228,23 @@ open class PsiRawFirBuilder(
context
)
open fun convertPropertyAccessor(
accessor: KtPropertyAccessor?,
property: KtProperty,
propertyTypeRef: FirTypeRef,
propertySymbol: FirPropertySymbol,
isGetter: Boolean,
accessorAnnotationsFromProperty: List<FirAnnotation>,
parameterAnnotationsFromProperty: List<FirAnnotation>,
): FirPropertyAccessor? = accessor.toFirPropertyAccessor(
property,
propertyTypeRef,
propertySymbol,
isGetter,
accessorAnnotationsFromProperty,
parameterAnnotationsFromProperty,
)
open fun convertValueParameter(
valueParameter: KtParameter,
functionSymbol: FirFunctionSymbol<*>,
@@ -1914,7 +1931,8 @@ open class PsiRawFirBuilder(
propertyAnnotations.filter { it.useSiteTarget == FIELD || it.useSiteTarget == PROPERTY_DELEGATE_FIELD },
)
getter = this@toFirProperty.getter.toFirPropertyAccessor(
getter = convertPropertyAccessor(
this@toFirProperty.getter,
this@toFirProperty,
propertyType,
propertySymbol = symbol,
@@ -1922,7 +1940,9 @@ open class PsiRawFirBuilder(
accessorAnnotationsFromProperty = propertyAnnotations.filterUseSiteTarget(PROPERTY_GETTER),
parameterAnnotationsFromProperty = emptyList()
)
setter = this@toFirProperty.setter.toFirPropertyAccessor(
setter = convertPropertyAccessor(
this@toFirProperty.setter,
this@toFirProperty,
propertyType,
propertySymbol = symbol,
@@ -19,6 +19,8 @@ import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.BodyResolveCon
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirAbstractBodyResolveTransformerDispatcher
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirDeclarationsResolveTransformer
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirExpressionsResolveTransformer
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirResolveContextCollector
import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.transformSingle
open class FirAnnotationArgumentsMappingTransformer(
@@ -27,6 +29,7 @@ open class FirAnnotationArgumentsMappingTransformer(
resolvePhase: FirResolvePhase,
outerBodyResolveContext: BodyResolveContext? = null,
returnTypeCalculator: ReturnTypeCalculator = ReturnTypeCalculatorForFullBodyResolve,
firResolveContextCollector: FirResolveContextCollector? = null,
) : FirAbstractBodyResolveTransformerDispatcher(
session,
resolvePhase,
@@ -34,6 +37,7 @@ open class FirAnnotationArgumentsMappingTransformer(
scopeSession,
outerBodyResolveContext = outerBodyResolveContext,
returnTypeCalculator = returnTypeCalculator,
firResolveContextCollector = firResolveContextCollector,
) {
final override val expressionsTransformer: FirExpressionsResolveTransformer =
FirExpressionTransformerForAnnotationArgumentsMapping(this)
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirDeclaration
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirExpressionsResolveTransformer
import org.jetbrains.kotlin.fir.visitors.transformSingle
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeAmbiguouslyResolvedAnnotationArgument
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirResolveContextCollector
import org.jetbrains.kotlin.fir.symbols.impl.FirEnumEntrySymbol
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
@@ -38,6 +39,7 @@ open class FirAnnotationArgumentsResolveTransformer(
resolvePhase: FirResolvePhase,
outerBodyResolveContext: BodyResolveContext? = null,
returnTypeCalculator: ReturnTypeCalculator = ReturnTypeCalculatorForFullBodyResolve,
firResolveContextCollector: FirResolveContextCollector? = null,
) : FirAbstractBodyResolveTransformerDispatcher(
session,
resolvePhase,
@@ -45,6 +47,7 @@ open class FirAnnotationArgumentsResolveTransformer(
scopeSession,
outerBodyResolveContext = outerBodyResolveContext,
returnTypeCalculator = returnTypeCalculator,
firResolveContextCollector = firResolveContextCollector,
) {
final override val expressionsTransformer: FirExpressionsResolveTransformer =
FirExpressionsResolveTransformerForSpecificAnnotations(this)