Minor. Split ExpressionReceiver to interface & implementation

This commit is contained in:
Stanislav Erokhin
2015-11-15 22:51:02 +03:00
parent 5a7e879c0c
commit 6b7bf63814
3 changed files with 12 additions and 7 deletions
@@ -167,7 +167,7 @@ public class FunctionReferenceGenerationStrategy extends FunctionGenerationStrat
KtExpression receiverExpression = KtPsiFactoryKt
.KtPsiFactory(state.getProject()).createExpression("callableReferenceFakeReceiver");
codegen.tempVariables.put(receiverExpression, receiverParameterStackValue(signature));
return new ExpressionReceiver(receiverExpression, receiver.getType());
return new ExpressionReceiver.Companion.ExpressionReceiverImpl(receiverExpression, receiver.getType());
}
@NotNull
@@ -20,17 +20,22 @@ import org.jetbrains.kotlin.psi.KtExpression
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.types.KotlinType
class ExpressionReceiver(val expression: KtExpression, type: KotlinType) : AbstractReceiverValue(type), ReceiverValue {
override fun toString() = "$type {$expression: ${expression.text}}"
interface ExpressionReceiver : ReceiverValue {
val expression: KtExpression
companion object {
class ExpressionReceiverImpl(
override val expression: KtExpression, type: KotlinType
): AbstractReceiverValue(type), ExpressionReceiver {
override fun toString() = "$type {$expression: ${expression.text}}"
}
fun create(
expression: KtExpression,
type: KotlinType,
bindingContext: BindingContext): ExpressionReceiver {
return ExpressionReceiver(expression, type)
bindingContext: BindingContext
): ExpressionReceiver {
return ExpressionReceiverImpl(expression, type)
}
}
}
@@ -558,7 +558,7 @@ public class KotlinTypeCheckerTest extends KotlinLiteFixture {
KotlinType thisType = makeType(contextType);
ReceiverParameterDescriptorImpl receiverParameterDescriptor = new ReceiverParameterDescriptorImpl(
scopeWithImports.getOwnerDescriptor(),
new ExpressionReceiver(KtPsiFactoryKt.KtPsiFactory(getProject()).createExpression(expression), thisType)
new ExpressionReceiver.Companion.ExpressionReceiverImpl(KtPsiFactoryKt.KtPsiFactory(getProject()).createExpression(expression), thisType)
);
LexicalScope scope = new LexicalScopeImpl(scopeWithImports, scopeWithImports.getOwnerDescriptor(), false,