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 KtExpression receiverExpression = KtPsiFactoryKt
.KtPsiFactory(state.getProject()).createExpression("callableReferenceFakeReceiver"); .KtPsiFactory(state.getProject()).createExpression("callableReferenceFakeReceiver");
codegen.tempVariables.put(receiverExpression, receiverParameterStackValue(signature)); codegen.tempVariables.put(receiverExpression, receiverParameterStackValue(signature));
return new ExpressionReceiver(receiverExpression, receiver.getType()); return new ExpressionReceiver.Companion.ExpressionReceiverImpl(receiverExpression, receiver.getType());
} }
@NotNull @NotNull
@@ -20,17 +20,22 @@ import org.jetbrains.kotlin.psi.KtExpression
import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.KotlinType
class ExpressionReceiver(val expression: KtExpression, type: KotlinType) : AbstractReceiverValue(type), ReceiverValue { interface ExpressionReceiver : ReceiverValue {
val expression: KtExpression
override fun toString() = "$type {$expression: ${expression.text}}"
companion object { companion object {
class ExpressionReceiverImpl(
override val expression: KtExpression, type: KotlinType
): AbstractReceiverValue(type), ExpressionReceiver {
override fun toString() = "$type {$expression: ${expression.text}}"
}
fun create( fun create(
expression: KtExpression, expression: KtExpression,
type: KotlinType, type: KotlinType,
bindingContext: BindingContext): ExpressionReceiver { bindingContext: BindingContext
return ExpressionReceiver(expression, type) ): ExpressionReceiver {
return ExpressionReceiverImpl(expression, type)
} }
} }
} }
@@ -558,7 +558,7 @@ public class KotlinTypeCheckerTest extends KotlinLiteFixture {
KotlinType thisType = makeType(contextType); KotlinType thisType = makeType(contextType);
ReceiverParameterDescriptorImpl receiverParameterDescriptor = new ReceiverParameterDescriptorImpl( ReceiverParameterDescriptorImpl receiverParameterDescriptor = new ReceiverParameterDescriptorImpl(
scopeWithImports.getOwnerDescriptor(), 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, LexicalScope scope = new LexicalScopeImpl(scopeWithImports, scopeWithImports.getOwnerDescriptor(), false,