[FIR] Use correct source for implicit this receiver
#KT-57489 Fixed #KT-56139 Fixed #KT-56755 Fixed
This commit is contained in:
@@ -38,6 +38,8 @@ abstract class FirSmartCastExpression : FirExpression() {
|
||||
|
||||
abstract override fun replaceTypeRef(newTypeRef: FirTypeRef)
|
||||
|
||||
abstract fun replaceOriginalExpression(newOriginalExpression: FirExpression)
|
||||
|
||||
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirSmartCastExpression
|
||||
|
||||
abstract fun <D> transformOriginalExpression(transformer: FirTransformer<D>, data: D): FirSmartCastExpression
|
||||
|
||||
+16
@@ -84,3 +84,19 @@ inline fun buildThisReceiverExpression(init: FirThisReceiverExpressionBuilder.()
|
||||
}
|
||||
return FirThisReceiverExpressionBuilder().apply(init).build()
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalContracts::class)
|
||||
inline fun buildThisReceiverExpressionCopy(original: FirThisReceiverExpression, init: FirThisReceiverExpressionBuilder.() -> Unit): FirThisReceiverExpression {
|
||||
contract {
|
||||
callsInPlace(init, kotlin.contracts.InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
val copyBuilder = FirThisReceiverExpressionBuilder()
|
||||
copyBuilder.typeRef = original.typeRef
|
||||
copyBuilder.annotations.addAll(original.annotations)
|
||||
copyBuilder.contextReceiverArguments.addAll(original.contextReceiverArguments)
|
||||
copyBuilder.typeArguments.addAll(original.typeArguments)
|
||||
copyBuilder.source = original.source
|
||||
copyBuilder.calleeReference = original.calleeReference
|
||||
copyBuilder.isImplicit = original.isImplicit
|
||||
return copyBuilder.apply(init).build()
|
||||
}
|
||||
|
||||
+4
@@ -69,4 +69,8 @@ internal class FirSmartCastExpressionImpl(
|
||||
override fun replaceTypeRef(newTypeRef: FirTypeRef) {
|
||||
typeRef = newTypeRef
|
||||
}
|
||||
|
||||
override fun replaceOriginalExpression(newOriginalExpression: FirExpression) {
|
||||
originalExpression = newOriginalExpression
|
||||
}
|
||||
}
|
||||
|
||||
+1
@@ -257,6 +257,7 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
|
||||
builder(thisReceiverExpression) {
|
||||
parents += qualifiedAccessExpressionBuilder
|
||||
default("isImplicit", "false")
|
||||
withCopy()
|
||||
}
|
||||
|
||||
builder(thisReference, "FirExplicitThisReference") {
|
||||
|
||||
+1
-1
@@ -562,7 +562,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
|
||||
|
||||
smartCastExpression.configure {
|
||||
+typeRefField
|
||||
+field("originalExpression", expression).withTransform()
|
||||
+field("originalExpression", expression, withReplace = true).withTransform()
|
||||
+field("typesFromSmartCast", "Collection<ConeKotlinType>", null, customType = coneKotlinTypeType)
|
||||
+field("smartcastType", typeRef)
|
||||
+field("smartcastTypeWithoutNullableNothing", typeRef, nullable = true)
|
||||
|
||||
Reference in New Issue
Block a user