From af3690309b03484b52456a8178d8688604331fa5 Mon Sep 17 00:00:00 2001 From: Svetlana Isakova Date: Mon, 29 Oct 2012 15:14:41 +0400 Subject: [PATCH] recordAutoCastIfNecessary method moved to AutoCastUtils --- .../lang/resolve/calls/CandidateResolver.java | 27 +------ .../calls/autocasts/AutoCastUtils.java | 70 +++++++------------ 2 files changed, 26 insertions(+), 71 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CandidateResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CandidateResolver.java index 476adef9921..8d7529eff73 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CandidateResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CandidateResolver.java @@ -38,7 +38,6 @@ import org.jetbrains.jet.lang.resolve.calls.results.ResolutionStatus; import org.jetbrains.jet.lang.resolve.calls.tasks.ResolutionTask; import org.jetbrains.jet.lang.resolve.calls.tasks.TaskPrioritizer; import org.jetbrains.jet.lang.resolve.calls.tasks.TracingStrategy; -import org.jetbrains.jet.lang.resolve.scopes.receivers.ExpressionReceiver; import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor; import org.jetbrains.jet.lang.types.*; import org.jetbrains.jet.lang.types.checker.JetTypeChecker; @@ -51,8 +50,6 @@ import java.util.Map; import java.util.Set; import static org.jetbrains.jet.lang.diagnostics.Errors.*; -import static org.jetbrains.jet.lang.resolve.BindingContext.AUTOCAST; -import static org.jetbrains.jet.lang.resolve.BindingContext.EXPRESSION_TYPE; import static org.jetbrains.jet.lang.resolve.calls.results.ResolutionStatus.*; import static org.jetbrains.jet.lang.types.TypeUtils.NO_EXPECTED_TYPE; @@ -196,8 +193,8 @@ public class CandidateResolver { candidateCall.addStatus(OTHER_ERROR); } - recordAutoCastIfNecessary(candidateCall.getReceiverArgument(), candidateCall.getTrace()); - recordAutoCastIfNecessary(candidateCall.getThisObject(), candidateCall.getTrace()); + AutoCastUtils.recordAutoCastIfNecessary(candidateCall.getReceiverArgument(), candidateCall.getTrace()); + AutoCastUtils.recordAutoCastIfNecessary(candidateCall.getThisObject(), candidateCall.getTrace()); } public void completeTypeInferenceDependentOnExpectedTypeForCall( @@ -516,26 +513,6 @@ public class CandidateResolver { } - private static void recordAutoCastIfNecessary(ReceiverDescriptor receiver, BindingTrace trace) { - if (receiver instanceof AutoCastReceiver) { - AutoCastReceiver autoCastReceiver = (AutoCastReceiver) receiver; - ReceiverDescriptor original = autoCastReceiver.getOriginal(); - if (original instanceof ExpressionReceiver) { - ExpressionReceiver expressionReceiver = (ExpressionReceiver) original; - if (autoCastReceiver.canCast()) { - trace.record(AUTOCAST, expressionReceiver.getExpression(), autoCastReceiver.getType()); - trace.record(EXPRESSION_TYPE, expressionReceiver.getExpression(), autoCastReceiver.getType()); - } - else { - trace.report(AUTOCAST_IMPOSSIBLE.on(expressionReceiver.getExpression(), autoCastReceiver.getType(), expressionReceiver.getExpression().getText())); - } - } - else { - assert autoCastReceiver.canCast() : "A non-expression receiver must always be autocastabe: " + original; - } - } - } - @NotNull private static JetType getEffectiveExpectedType(ValueParameterDescriptor parameterDescriptor, ValueArgument argument) { if (argument.getSpreadElement() != null) { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/autocasts/AutoCastUtils.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/autocasts/AutoCastUtils.java index 9edbd543fa7..7d421027259 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/autocasts/AutoCastUtils.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/autocasts/AutoCastUtils.java @@ -19,12 +19,17 @@ package org.jetbrains.jet.lang.resolve.calls.autocasts; import com.google.common.collect.Lists; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.resolve.BindingContext; +import org.jetbrains.jet.lang.resolve.BindingTrace; import org.jetbrains.jet.lang.resolve.scopes.receivers.*; import org.jetbrains.jet.lang.types.JetType; import java.util.Collections; import java.util.List; +import static org.jetbrains.jet.lang.diagnostics.Errors.AUTOCAST_IMPOSSIBLE; +import static org.jetbrains.jet.lang.resolve.BindingContext.AUTOCAST; +import static org.jetbrains.jet.lang.resolve.BindingContext.EXPRESSION_TYPE; + /** * @author abreslav */ @@ -67,18 +72,6 @@ public class AutoCastUtils { @Override public List visitExpressionReceiver(ExpressionReceiver receiver, Object data) { -// JetExpression expression = receiver.getExpression(); -// VariableDescriptor variableDescriptor = DataFlowValueFactory.getVariableDescriptorFromSimpleName(bindingContext, expression); -// if (variableDescriptor != null) { -// List result = Lists.newArrayList(); -// for (JetType possibleType : dataFlowInfo.getPossibleTypesForVariable(variableDescriptor)) { -// result.add(new AutoCastReceiver(receiver, possibleType, DataFlowValueFactory.isStableVariable(variableDescriptor))); -// } -// return result; -// } -// else if (expression instanceof JetThisExpression) { -// return castThis(dataFlowInfo, receiver); -// } DataFlowValue dataFlowValue = DataFlowValueFactory.INSTANCE.createDataFlowValue(receiver.getExpression(), receiver.getType(), bindingContext); List result = Lists.newArrayList(); @@ -99,38 +92,23 @@ public class AutoCastUtils { return result; } -// @Nullable -// public static JetType castExpression(@NotNull JetExpression expression, @NotNull JetType expectedType, @NotNull DataFlowInfo dataFlowInfo, @NotNull BindingTrace trace) { -// JetTypeChecker typeChecker = JetTypeChecker.INSTANCE; -// DataFlowValue dataFlowValue = DataFlowValueFactory.INSTANCE.createDataFlowValue(expression, trace.getBindingContext()); -// for (JetType possibleType : dataFlowInfo.getPossibleTypes(dataFlowValue)) { -// if (typeChecker.isSubtypeOf(possibleType, expectedType)) { -// if (dataFlowValue.isStableIdentifier()) { -// trace.record(AUTOCAST, expression, possibleType); -// } -// else { -// trace.report(AUTOCAST_IMPOSSIBLE.on(expression, possibleType, expression.getText())); -// } -// return possibleType; -// } -// } -//// VariableDescriptor variableDescriptor = DataFlowValueFactory.getVariableDescriptorFromSimpleName(trace.getBindingContext(), expression); -//// if (variableDescriptor != null) { -//// List possibleTypes = Lists.newArrayList(dataFlowInfo.getPossibleTypes(variableDescriptor)); -//// Collections.reverse(possibleTypes); -//// for (JetType possibleType : possibleTypes) { -//// if (typeChecker.isSubtypeOf(possibleType, expectedType)) { -//// if (DataFlowValueFactory.isStableVariable(variableDescriptor)) { -//// trace.record(AUTOCAST, expression, possibleType); -//// } -//// else { -//// trace.report(AUTOCAST_IMPOSSIBLE.on(expression, possibleType, expression.getText())); -//// } -//// return possibleType; -//// } -//// } -//// } -// return null; -// } - + public static void recordAutoCastIfNecessary(ReceiverDescriptor receiver, @NotNull BindingTrace trace) { + if (receiver instanceof AutoCastReceiver) { + AutoCastReceiver autoCastReceiver = (AutoCastReceiver) receiver; + ReceiverDescriptor original = autoCastReceiver.getOriginal(); + if (original instanceof ExpressionReceiver) { + ExpressionReceiver expressionReceiver = (ExpressionReceiver) original; + if (autoCastReceiver.canCast()) { + trace.record(AUTOCAST, expressionReceiver.getExpression(), autoCastReceiver.getType()); + trace.record(EXPRESSION_TYPE, expressionReceiver.getExpression(), autoCastReceiver.getType()); + } + else { + trace.report(AUTOCAST_IMPOSSIBLE.on(expressionReceiver.getExpression(), autoCastReceiver.getType(), expressionReceiver.getExpression().getText())); + } + } + else { + assert autoCastReceiver.canCast() : "A non-expression receiver must always be autocastabe: " + original; + } + } + } }