K2: Rename delegateProvider in node for delegate and refine its type

This commit is contained in:
Denis.Zharkov
2023-12-29 16:37:59 +01:00
committed by Space Team
parent ca9372cfa0
commit f8fd46a5b8
7 changed files with 15 additions and 38 deletions
@@ -17,7 +17,6 @@ import org.jetbrains.kotlin.fir.builder.PsiRawFirBuilder
import org.jetbrains.kotlin.fir.contracts.FirRawContractDescription
import org.jetbrains.kotlin.fir.contracts.impl.FirEmptyContractDescription
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.annotationPlatformSupport
import org.jetbrains.kotlin.fir.declarations.utils.getExplicitBackingField
import org.jetbrains.kotlin.fir.expressions.*
import org.jetbrains.kotlin.fir.expressions.impl.FirLazyDelegatedConstructorCall
@@ -243,16 +242,7 @@ private fun rebindDelegate(newTarget: FirProperty, oldTarget: FirProperty) {
withFirEntry("delegate", delegate)
}
val delegateProvider = delegate.delegateProvider
requireWithAttachment(
delegateProvider is FirFunctionCall,
{ "Unexpected delegate provider type: ${delegateProvider::class.simpleName}" },
) {
withFirEntry("newTarget", newTarget)
withFirEntry("oldTarget", oldTarget)
withFirEntry("expression", delegateProvider)
}
val delegateProvider = delegate.provideDelegateCall
rebindArgumentList(
delegateProvider.argumentList,
newTarget = newTarget.symbol,
@@ -6,7 +6,6 @@
package org.jetbrains.kotlin.fir.builder
import com.intellij.psi.tree.IElementType
import org.jetbrains.kotlin.*
import org.jetbrains.kotlin.KtFakeSourceElementKind
import org.jetbrains.kotlin.KtRealSourceElementKind
import org.jetbrains.kotlin.KtSourceElement
@@ -14,15 +13,12 @@ import org.jetbrains.kotlin.contracts.description.LogicOperationKind
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
import org.jetbrains.kotlin.fakeElement
import org.jetbrains.kotlin.fir.*
import org.jetbrains.kotlin.fir.contracts.FirContractDescription
import org.jetbrains.kotlin.fir.contracts.FirLegacyRawContractDescription
import org.jetbrains.kotlin.fir.contracts.builder.buildLegacyRawContractDescription
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirFunction
import org.jetbrains.kotlin.fir.declarations.FirReceiverParameter
import org.jetbrains.kotlin.fir.declarations.FirVariable
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.builder.*
import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor
@@ -41,16 +37,9 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirDelegateFieldSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertyAccessorSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
import org.jetbrains.kotlin.fir.types.ConeKotlinTypeProjectionOut
import org.jetbrains.kotlin.fir.types.ConeStarProjection
import org.jetbrains.kotlin.fir.types.FirErrorTypeRef
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
import org.jetbrains.kotlin.fir.types.builder.buildTypeProjectionWithVariance
import org.jetbrains.kotlin.fir.types.coneType
import org.jetbrains.kotlin.fir.types.constructClassLikeType
import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl
import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImplWithoutSource
import org.jetbrains.kotlin.lexer.KtTokens
@@ -431,7 +420,7 @@ fun <T> FirPropertyBuilder.generateAccessorsByDelegate(
}
delegate = lazyDelegateExpression ?: run {
delegateBuilder.delegateProvider = buildFunctionCall {
delegateBuilder.provideDelegateCall = buildFunctionCall {
explicitReceiver = delegateBuilder.expression
calleeReference = buildSimpleNamedReference {
source = fakeSource
@@ -404,7 +404,7 @@ open class FirDeclarationsResolveTransformer(
val delegateExpression = wrappedDelegateExpression.expression.transformSingle(transformer, ResolutionMode.ContextDependent.Delegate)
.transformSingle(components.integerLiteralAndOperatorApproximationTransformer, null)
val provideDelegateCall = wrappedDelegateExpression.delegateProvider as FirFunctionCall
val provideDelegateCall = wrappedDelegateExpression.provideDelegateCall
provideDelegateCall.replaceExplicitReceiver(delegateExpression)
// Resolve call for provideDelegate, without completion
@@ -23,7 +23,7 @@ abstract class FirWrappedDelegateExpression : FirWrappedExpression() {
abstract override val coneTypeOrNull: ConeKotlinType?
abstract override val annotations: List<FirAnnotation>
abstract override val expression: FirExpression
abstract val delegateProvider: FirExpression
abstract val provideDelegateCall: FirFunctionCall
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitWrappedDelegateExpression(this, data)
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.builder.toMutableOrEmpty
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
import org.jetbrains.kotlin.fir.expressions.FirWrappedDelegateExpression
import org.jetbrains.kotlin.fir.expressions.impl.FirWrappedDelegateExpressionImpl
import org.jetbrains.kotlin.fir.types.ConeKotlinType
@@ -26,14 +27,14 @@ class FirWrappedDelegateExpressionBuilder : FirAnnotationContainerBuilder, FirEx
override var source: KtSourceElement? = null
override val annotations: MutableList<FirAnnotation> = mutableListOf()
lateinit var expression: FirExpression
lateinit var delegateProvider: FirExpression
lateinit var provideDelegateCall: FirFunctionCall
override fun build(): FirWrappedDelegateExpression {
return FirWrappedDelegateExpressionImpl(
source,
annotations.toMutableOrEmpty(),
expression,
delegateProvider,
provideDelegateCall,
)
}
@@ -13,10 +13,7 @@ package org.jetbrains.kotlin.fir.expressions.impl
import org.jetbrains.kotlin.KtSourceElement
import org.jetbrains.kotlin.fir.MutableOrEmptyList
import org.jetbrains.kotlin.fir.builder.toMutableOrEmpty
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.expressions.FirWrappedDelegateExpression
import org.jetbrains.kotlin.fir.expressions.UnresolvedExpressionTypeAccess
import org.jetbrains.kotlin.fir.expressions.*
import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.fir.visitors.FirVisitor
@@ -26,7 +23,7 @@ internal class FirWrappedDelegateExpressionImpl(
override val source: KtSourceElement?,
override var annotations: MutableOrEmptyList<FirAnnotation>,
override var expression: FirExpression,
override var delegateProvider: FirExpression,
override var provideDelegateCall: FirFunctionCall,
) : FirWrappedDelegateExpression() {
@OptIn(UnresolvedExpressionTypeAccess::class)
override val coneTypeOrNull: ConeKotlinType?
@@ -35,13 +32,13 @@ internal class FirWrappedDelegateExpressionImpl(
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
annotations.forEach { it.accept(visitor, data) }
expression.accept(visitor, data)
delegateProvider.accept(visitor, data)
provideDelegateCall.accept(visitor, data)
}
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirWrappedDelegateExpressionImpl {
transformAnnotations(transformer, data)
expression = expression.transform(transformer, data)
delegateProvider = delegateProvider.transform(transformer, data)
provideDelegateCall = provideDelegateCall.transform(transformer, data)
return this
}
@@ -665,7 +665,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
}
wrappedDelegateExpression.configure {
+field("delegateProvider", expression)
+field("provideDelegateCall", functionCall)
}
enumEntryDeserializedAccessExpression.configure {