diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallExpressionResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallExpressionResolver.java index ac358fd9a2d..e3cfffc2ed9 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallExpressionResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallExpressionResolver.java @@ -284,7 +284,7 @@ public class CallExpressionResolver { JetTypeInfo typeInfo = getCallExpressionTypeInfoWithoutFinalTypeCheck( callExpression, receiver, callOperationNode, context); if (context.contextDependency == ContextDependency.INDEPENDENT) { - DataFlowUtils.checkType(typeInfo.getType(), callExpression, context, typeInfo.getDataFlowInfo()); + DataFlowUtils.checkType(typeInfo, callExpression, context); } return typeInfo; } @@ -409,7 +409,7 @@ public class CallExpressionResolver { } JetTypeInfo typeInfo = JetTypeInfo.create(selectorReturnType, selectorReturnTypeInfo.getDataFlowInfo()); if (context.contextDependency == ContextDependency.INDEPENDENT) { - DataFlowUtils.checkType(typeInfo.getType(), expression, context, typeInfo.getDataFlowInfo()); + DataFlowUtils.checkType(typeInfo, expression, context); } return typeInfo; } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java index 0ae3c62defd..012742db49f 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java @@ -101,7 +101,7 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor { return JetTypeInfo.create(null, context.dataFlowInfo); } JetTypeInfo typeInfo = facade.getTypeInfo(innerExpression, context.replaceScope(context.scope), isStatement); - return DataFlowUtils.checkType(typeInfo.getType(), expression, context, typeInfo.getDataFlowInfo()); + return DataFlowUtils.checkType(typeInfo, expression, context); } private static JetTypeInfo createNumberValueTypeInfo( @@ -845,7 +845,7 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor { // TODO : Some processing for the label? JetTypeInfo typeInfo = facade.getTypeInfo(baseExpression, context, isStatement); context.labelResolver.exitLabeledElement(baseExpression); - return DataFlowUtils.checkType(typeInfo.getType(), expression, context, typeInfo.getDataFlowInfo()); + return DataFlowUtils.checkType(typeInfo, expression, context); } private static boolean isKnownToBeNotNull(JetExpression expression, ExpressionTypingContext context) { @@ -932,7 +932,7 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor { context.trace.report(UNSUPPORTED.on(operationSign, "Unknown operation")); result = JetTypeInfo.create(null, context.dataFlowInfo); } - return DataFlowUtils.checkType(result.getType(), expression, contextWithExpectedType, result.getDataFlowInfo()); + return DataFlowUtils.checkType(result, expression, contextWithExpectedType); } private JetTypeInfo visitEquality( @@ -1166,7 +1166,7 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor { @Override public JetTypeInfo visitArrayAccessExpression(JetArrayAccessExpression expression, ExpressionTypingContext context) { JetTypeInfo typeInfo = resolveArrayAccessGetMethod(expression, context); - return DataFlowUtils.checkType(typeInfo.getType(), expression, context, typeInfo.getDataFlowInfo()); + return DataFlowUtils.checkType(typeInfo, expression, context); } @NotNull diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/DataFlowUtils.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/DataFlowUtils.java index 3c3a6a23980..fe25141f194 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/DataFlowUtils.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/DataFlowUtils.java @@ -23,7 +23,6 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.BindingTrace; -import org.jetbrains.jet.lang.resolve.calls.context.ContextDependency; import org.jetbrains.jet.lang.resolve.calls.context.ResolutionContext; import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo; import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowValue; @@ -140,6 +139,15 @@ public class DataFlowUtils { return JetTypeInfo.create(checkType(expressionType, expression, context), dataFlowInfo); } + @NotNull + public static JetTypeInfo checkType(@NotNull JetTypeInfo typeInfo, @NotNull JetExpression expression, @NotNull ResolutionContext context) { + JetType type = checkType(typeInfo.getType(), expression, context); + if (type == typeInfo.getType()) { + return typeInfo; + } + return JetTypeInfo.create(type, typeInfo.getDataFlowInfo()); + } + @Nullable public static JetType checkType(@Nullable JetType expressionType, @NotNull JetExpression expression, @NotNull ResolutionContext context) { return checkType(expressionType, expression, context.expectedType, context.dataFlowInfo, context.trace);