Add method replaceType for ReceiverValue.

This method will used for capturing from expressions before call resolution.
This commit is contained in:
Stanislav Erokhin
2017-04-06 12:32:46 +03:00
parent 1dcdb72a49
commit e8501c7d54
8 changed files with 49 additions and 2 deletions
@@ -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)
}