refactoring: extracted 'recordCastOrError' method
This commit is contained in:
+20
-12
@@ -105,14 +105,8 @@ public class AutoCastUtils {
|
|||||||
AutoCastReceiver autoCastReceiver = (AutoCastReceiver) receiver;
|
AutoCastReceiver autoCastReceiver = (AutoCastReceiver) receiver;
|
||||||
ReceiverValue original = autoCastReceiver.getOriginal();
|
ReceiverValue original = autoCastReceiver.getOriginal();
|
||||||
if (original instanceof ExpressionReceiver) {
|
if (original instanceof ExpressionReceiver) {
|
||||||
ExpressionReceiver expressionReceiver = (ExpressionReceiver) original;
|
JetExpression expression = ((ExpressionReceiver) original).getExpression();
|
||||||
if (autoCastReceiver.canCast()) {
|
recordCastOrError(expression, autoCastReceiver.getType(), trace, autoCastReceiver.canCast(), true);
|
||||||
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 {
|
else {
|
||||||
assert autoCastReceiver.canCast() : "A non-expression receiver must always be autocastabe: " + original;
|
assert autoCastReceiver.canCast() : "A non-expression receiver must always be autocastabe: " + original;
|
||||||
@@ -129,12 +123,26 @@ public class AutoCastUtils {
|
|||||||
|
|
||||||
DataFlowValue dataFlowValue = DataFlowValueFactory.createDataFlowValue(receiver, trace.getBindingContext());
|
DataFlowValue dataFlowValue = DataFlowValueFactory.createDataFlowValue(receiver, trace.getBindingContext());
|
||||||
JetExpression expression = ((ExpressionReceiver) receiver).getExpression();
|
JetExpression expression = ((ExpressionReceiver) receiver).getExpression();
|
||||||
if (dataFlowValue.isStableIdentifier()) {
|
recordCastOrError(expression, notNullableType, trace, dataFlowValue.isStableIdentifier(), true);
|
||||||
trace.record(AUTOCAST, expression, notNullableType);
|
}
|
||||||
trace.record(EXPRESSION_TYPE, expression, notNullableType);
|
|
||||||
|
public static void recordCastOrError(
|
||||||
|
@NotNull JetExpression expression,
|
||||||
|
@NotNull JetType type,
|
||||||
|
@NotNull BindingTrace trace,
|
||||||
|
boolean canBeCasted,
|
||||||
|
boolean recordExpressionType
|
||||||
|
) {
|
||||||
|
if (canBeCasted) {
|
||||||
|
trace.record(AUTOCAST, expression, type);
|
||||||
|
if (recordExpressionType) {
|
||||||
|
//TODO
|
||||||
|
//Why the expression type is rewritten for receivers and is not rewritten for arguments? Is it necessary?
|
||||||
|
trace.record(EXPRESSION_TYPE, expression, type);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
trace.report(AUTOCAST_IMPOSSIBLE.on(expression, notNullableType, expression.getText()));
|
trace.report(AUTOCAST_IMPOSSIBLE.on(expression, type, expression.getText()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import org.jetbrains.jet.lang.evaluate.EvaluatePackage;
|
|||||||
import org.jetbrains.jet.lang.psi.*;
|
import org.jetbrains.jet.lang.psi.*;
|
||||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||||
import org.jetbrains.jet.lang.resolve.BindingTrace;
|
import org.jetbrains.jet.lang.resolve.BindingTrace;
|
||||||
|
import org.jetbrains.jet.lang.resolve.calls.autocasts.AutoCastUtils;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo;
|
import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowValue;
|
import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowValue;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowValueFactory;
|
import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowValueFactory;
|
||||||
@@ -40,7 +41,6 @@ import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
|
|||||||
import org.jetbrains.jet.lexer.JetTokens;
|
import org.jetbrains.jet.lexer.JetTokens;
|
||||||
|
|
||||||
import static org.jetbrains.jet.lang.diagnostics.Errors.*;
|
import static org.jetbrains.jet.lang.diagnostics.Errors.*;
|
||||||
import static org.jetbrains.jet.lang.resolve.BindingContext.AUTOCAST;
|
|
||||||
import static org.jetbrains.jet.lang.resolve.calls.context.ContextDependency.INDEPENDENT;
|
import static org.jetbrains.jet.lang.resolve.calls.context.ContextDependency.INDEPENDENT;
|
||||||
import static org.jetbrains.jet.lang.types.TypeUtils.*;
|
import static org.jetbrains.jet.lang.types.TypeUtils.*;
|
||||||
|
|
||||||
@@ -180,12 +180,7 @@ public class DataFlowUtils {
|
|||||||
DataFlowValue dataFlowValue = DataFlowValueFactory.createDataFlowValue(expression, expressionType, trace.getBindingContext());
|
DataFlowValue dataFlowValue = DataFlowValueFactory.createDataFlowValue(expression, expressionType, trace.getBindingContext());
|
||||||
for (JetType possibleType : dataFlowInfo.getPossibleTypes(dataFlowValue)) {
|
for (JetType possibleType : dataFlowInfo.getPossibleTypes(dataFlowValue)) {
|
||||||
if (JetTypeChecker.INSTANCE.isSubtypeOf(possibleType, expectedType)) {
|
if (JetTypeChecker.INSTANCE.isSubtypeOf(possibleType, expectedType)) {
|
||||||
if (dataFlowValue.isStableIdentifier()) {
|
AutoCastUtils.recordCastOrError(expression, possibleType, trace, dataFlowValue.isStableIdentifier(), false);
|
||||||
trace.record(AUTOCAST, expression, possibleType);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
trace.report(AUTOCAST_IMPOSSIBLE.on(expression, possibleType, expression.getText()));
|
|
||||||
}
|
|
||||||
return possibleType;
|
return possibleType;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user