Add method replaceType for ReceiverValue.
This method will used for capturing from expressions before call resolution.
This commit is contained in:
+8
-2
@@ -28,6 +28,8 @@ interface ExpressionReceiver : ReceiverValue {
|
||||
private open class ExpressionReceiverImpl(
|
||||
override val expression: KtExpression, type: KotlinType
|
||||
): AbstractReceiverValue(type), ExpressionReceiver {
|
||||
override fun replaceType(newType: KotlinType) = ExpressionReceiverImpl(expression, newType)
|
||||
|
||||
override fun toString() = "$type {$expression: ${expression.text}}"
|
||||
}
|
||||
|
||||
@@ -35,13 +37,17 @@ interface ExpressionReceiver : ReceiverValue {
|
||||
override val classDescriptor: ClassDescriptor,
|
||||
expression: KtExpression,
|
||||
type: KotlinType
|
||||
) : ExpressionReceiverImpl(expression, type), ThisClassReceiver
|
||||
) : ExpressionReceiverImpl(expression, type), ThisClassReceiver {
|
||||
override fun replaceType(newType: KotlinType) = ThisExpressionClassReceiver(classDescriptor, expression, newType)
|
||||
}
|
||||
|
||||
private class SuperExpressionReceiver(
|
||||
override val thisType: KotlinType,
|
||||
expression: KtExpression,
|
||||
type: KotlinType
|
||||
) : ExpressionReceiverImpl(expression, type), SuperCallReceiverValue
|
||||
) : ExpressionReceiverImpl(expression, type), SuperCallReceiverValue {
|
||||
override fun replaceType(newType: KotlinType) = SuperExpressionReceiver(thisType, expression, newType)
|
||||
}
|
||||
|
||||
fun create(
|
||||
expression: KtExpression,
|
||||
|
||||
@@ -125,4 +125,6 @@ class ClassValueReceiver(val classQualifier: ClassifierQualifier, private val ty
|
||||
|
||||
override val expression: KtExpression
|
||||
get() = classQualifier.expression
|
||||
|
||||
override fun replaceType(newType: KotlinType) = ClassValueReceiver(classQualifier, newType)
|
||||
}
|
||||
|
||||
@@ -26,4 +26,5 @@ fun getReceiverValueWithSmartCast(
|
||||
|
||||
private class SmartCastReceiverValue(private val type: KotlinType) : ReceiverValue {
|
||||
override fun getType() = type
|
||||
override fun replaceType(newType: KotlinType) = SmartCastReceiverValue(newType)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user