K2: Rename delegateProvider in node for delegate and refine its type
This commit is contained in:
committed by
Space Team
parent
ca9372cfa0
commit
f8fd46a5b8
+1
-11
@@ -17,7 +17,6 @@ import org.jetbrains.kotlin.fir.builder.PsiRawFirBuilder
|
|||||||
import org.jetbrains.kotlin.fir.contracts.FirRawContractDescription
|
import org.jetbrains.kotlin.fir.contracts.FirRawContractDescription
|
||||||
import org.jetbrains.kotlin.fir.contracts.impl.FirEmptyContractDescription
|
import org.jetbrains.kotlin.fir.contracts.impl.FirEmptyContractDescription
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
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.declarations.utils.getExplicitBackingField
|
||||||
import org.jetbrains.kotlin.fir.expressions.*
|
import org.jetbrains.kotlin.fir.expressions.*
|
||||||
import org.jetbrains.kotlin.fir.expressions.impl.FirLazyDelegatedConstructorCall
|
import org.jetbrains.kotlin.fir.expressions.impl.FirLazyDelegatedConstructorCall
|
||||||
@@ -243,16 +242,7 @@ private fun rebindDelegate(newTarget: FirProperty, oldTarget: FirProperty) {
|
|||||||
withFirEntry("delegate", delegate)
|
withFirEntry("delegate", delegate)
|
||||||
}
|
}
|
||||||
|
|
||||||
val delegateProvider = delegate.delegateProvider
|
val delegateProvider = delegate.provideDelegateCall
|
||||||
requireWithAttachment(
|
|
||||||
delegateProvider is FirFunctionCall,
|
|
||||||
{ "Unexpected delegate provider type: ${delegateProvider::class.simpleName}" },
|
|
||||||
) {
|
|
||||||
withFirEntry("newTarget", newTarget)
|
|
||||||
withFirEntry("oldTarget", oldTarget)
|
|
||||||
withFirEntry("expression", delegateProvider)
|
|
||||||
}
|
|
||||||
|
|
||||||
rebindArgumentList(
|
rebindArgumentList(
|
||||||
delegateProvider.argumentList,
|
delegateProvider.argumentList,
|
||||||
newTarget = newTarget.symbol,
|
newTarget = newTarget.symbol,
|
||||||
|
|||||||
+4
-15
@@ -6,7 +6,6 @@
|
|||||||
package org.jetbrains.kotlin.fir.builder
|
package org.jetbrains.kotlin.fir.builder
|
||||||
|
|
||||||
import com.intellij.psi.tree.IElementType
|
import com.intellij.psi.tree.IElementType
|
||||||
import org.jetbrains.kotlin.*
|
|
||||||
import org.jetbrains.kotlin.KtFakeSourceElementKind
|
import org.jetbrains.kotlin.KtFakeSourceElementKind
|
||||||
import org.jetbrains.kotlin.KtRealSourceElementKind
|
import org.jetbrains.kotlin.KtRealSourceElementKind
|
||||||
import org.jetbrains.kotlin.KtSourceElement
|
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.Modality
|
||||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
||||||
|
import org.jetbrains.kotlin.fakeElement
|
||||||
import org.jetbrains.kotlin.fir.*
|
import org.jetbrains.kotlin.fir.*
|
||||||
import org.jetbrains.kotlin.fir.contracts.FirContractDescription
|
import org.jetbrains.kotlin.fir.contracts.FirContractDescription
|
||||||
import org.jetbrains.kotlin.fir.contracts.FirLegacyRawContractDescription
|
import org.jetbrains.kotlin.fir.contracts.FirLegacyRawContractDescription
|
||||||
import org.jetbrains.kotlin.fir.contracts.builder.buildLegacyRawContractDescription
|
import org.jetbrains.kotlin.fir.contracts.builder.buildLegacyRawContractDescription
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
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.builder.*
|
import org.jetbrains.kotlin.fir.declarations.builder.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
|
import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor
|
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.FirDelegateFieldSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertyAccessorSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertyAccessorSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
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.builder.buildResolvedTypeRef
|
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.builder.buildTypeProjectionWithVariance
|
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.ConeTypeParameterTypeImpl
|
||||||
import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImplWithoutSource
|
import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImplWithoutSource
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
@@ -431,7 +420,7 @@ fun <T> FirPropertyBuilder.generateAccessorsByDelegate(
|
|||||||
}
|
}
|
||||||
|
|
||||||
delegate = lazyDelegateExpression ?: run {
|
delegate = lazyDelegateExpression ?: run {
|
||||||
delegateBuilder.delegateProvider = buildFunctionCall {
|
delegateBuilder.provideDelegateCall = buildFunctionCall {
|
||||||
explicitReceiver = delegateBuilder.expression
|
explicitReceiver = delegateBuilder.expression
|
||||||
calleeReference = buildSimpleNamedReference {
|
calleeReference = buildSimpleNamedReference {
|
||||||
source = fakeSource
|
source = fakeSource
|
||||||
|
|||||||
+1
-1
@@ -404,7 +404,7 @@ open class FirDeclarationsResolveTransformer(
|
|||||||
val delegateExpression = wrappedDelegateExpression.expression.transformSingle(transformer, ResolutionMode.ContextDependent.Delegate)
|
val delegateExpression = wrappedDelegateExpression.expression.transformSingle(transformer, ResolutionMode.ContextDependent.Delegate)
|
||||||
.transformSingle(components.integerLiteralAndOperatorApproximationTransformer, null)
|
.transformSingle(components.integerLiteralAndOperatorApproximationTransformer, null)
|
||||||
|
|
||||||
val provideDelegateCall = wrappedDelegateExpression.delegateProvider as FirFunctionCall
|
val provideDelegateCall = wrappedDelegateExpression.provideDelegateCall
|
||||||
provideDelegateCall.replaceExplicitReceiver(delegateExpression)
|
provideDelegateCall.replaceExplicitReceiver(delegateExpression)
|
||||||
|
|
||||||
// Resolve call for provideDelegate, without completion
|
// Resolve call for provideDelegate, without completion
|
||||||
|
|||||||
+1
-1
@@ -23,7 +23,7 @@ abstract class FirWrappedDelegateExpression : FirWrappedExpression() {
|
|||||||
abstract override val coneTypeOrNull: ConeKotlinType?
|
abstract override val coneTypeOrNull: ConeKotlinType?
|
||||||
abstract override val annotations: List<FirAnnotation>
|
abstract override val annotations: List<FirAnnotation>
|
||||||
abstract override val expression: FirExpression
|
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 =
|
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||||
visitor.visitWrappedDelegateExpression(this, data)
|
visitor.visitWrappedDelegateExpression(this, data)
|
||||||
|
|||||||
+3
-2
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
|
|||||||
import org.jetbrains.kotlin.fir.builder.toMutableOrEmpty
|
import org.jetbrains.kotlin.fir.builder.toMutableOrEmpty
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
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.FirWrappedDelegateExpression
|
||||||
import org.jetbrains.kotlin.fir.expressions.impl.FirWrappedDelegateExpressionImpl
|
import org.jetbrains.kotlin.fir.expressions.impl.FirWrappedDelegateExpressionImpl
|
||||||
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||||
@@ -26,14 +27,14 @@ class FirWrappedDelegateExpressionBuilder : FirAnnotationContainerBuilder, FirEx
|
|||||||
override var source: KtSourceElement? = null
|
override var source: KtSourceElement? = null
|
||||||
override val annotations: MutableList<FirAnnotation> = mutableListOf()
|
override val annotations: MutableList<FirAnnotation> = mutableListOf()
|
||||||
lateinit var expression: FirExpression
|
lateinit var expression: FirExpression
|
||||||
lateinit var delegateProvider: FirExpression
|
lateinit var provideDelegateCall: FirFunctionCall
|
||||||
|
|
||||||
override fun build(): FirWrappedDelegateExpression {
|
override fun build(): FirWrappedDelegateExpression {
|
||||||
return FirWrappedDelegateExpressionImpl(
|
return FirWrappedDelegateExpressionImpl(
|
||||||
source,
|
source,
|
||||||
annotations.toMutableOrEmpty(),
|
annotations.toMutableOrEmpty(),
|
||||||
expression,
|
expression,
|
||||||
delegateProvider,
|
provideDelegateCall,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+4
-7
@@ -13,10 +13,7 @@ package org.jetbrains.kotlin.fir.expressions.impl
|
|||||||
import org.jetbrains.kotlin.KtSourceElement
|
import org.jetbrains.kotlin.KtSourceElement
|
||||||
import org.jetbrains.kotlin.fir.MutableOrEmptyList
|
import org.jetbrains.kotlin.fir.MutableOrEmptyList
|
||||||
import org.jetbrains.kotlin.fir.builder.toMutableOrEmpty
|
import org.jetbrains.kotlin.fir.builder.toMutableOrEmpty
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
import org.jetbrains.kotlin.fir.expressions.*
|
||||||
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.types.ConeKotlinType
|
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||||
@@ -26,7 +23,7 @@ internal class FirWrappedDelegateExpressionImpl(
|
|||||||
override val source: KtSourceElement?,
|
override val source: KtSourceElement?,
|
||||||
override var annotations: MutableOrEmptyList<FirAnnotation>,
|
override var annotations: MutableOrEmptyList<FirAnnotation>,
|
||||||
override var expression: FirExpression,
|
override var expression: FirExpression,
|
||||||
override var delegateProvider: FirExpression,
|
override var provideDelegateCall: FirFunctionCall,
|
||||||
) : FirWrappedDelegateExpression() {
|
) : FirWrappedDelegateExpression() {
|
||||||
@OptIn(UnresolvedExpressionTypeAccess::class)
|
@OptIn(UnresolvedExpressionTypeAccess::class)
|
||||||
override val coneTypeOrNull: ConeKotlinType?
|
override val coneTypeOrNull: ConeKotlinType?
|
||||||
@@ -35,13 +32,13 @@ internal class FirWrappedDelegateExpressionImpl(
|
|||||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||||
annotations.forEach { it.accept(visitor, data) }
|
annotations.forEach { it.accept(visitor, data) }
|
||||||
expression.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 {
|
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirWrappedDelegateExpressionImpl {
|
||||||
transformAnnotations(transformer, data)
|
transformAnnotations(transformer, data)
|
||||||
expression = expression.transform(transformer, data)
|
expression = expression.transform(transformer, data)
|
||||||
delegateProvider = delegateProvider.transform(transformer, data)
|
provideDelegateCall = provideDelegateCall.transform(transformer, data)
|
||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -665,7 +665,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
|
|||||||
}
|
}
|
||||||
|
|
||||||
wrappedDelegateExpression.configure {
|
wrappedDelegateExpression.configure {
|
||||||
+field("delegateProvider", expression)
|
+field("provideDelegateCall", functionCall)
|
||||||
}
|
}
|
||||||
|
|
||||||
enumEntryDeserializedAccessExpression.configure {
|
enumEntryDeserializedAccessExpression.configure {
|
||||||
|
|||||||
Reference in New Issue
Block a user