From 1c599efbcd6c9a26f297b5a612dc880da0500100 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Tue, 19 Jun 2012 14:39:14 +0400 Subject: [PATCH] pass correct DataFlowInfo through qualified expressions #KT-2216 Fixed #KT-2164 Fixed --- .../types/expressions/BasicExpressionTypingVisitor.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) 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 00dbe4ae03b..b36d7ee6a10 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 @@ -543,6 +543,8 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor { if (selectorExpression == null) return JetTypeInfo.create(null, context.dataFlowInfo); if (receiverType == null) receiverType = ErrorUtils.createErrorType("Type for " + expression.getText()); + context = context.replaceDataFlowInfo(receiverTypeInfo.getDataFlowInfo()); + if (selectorExpression instanceof JetSimpleNameExpression) { propagateConstantValues(expression, context, (JetSimpleNameExpression) selectorExpression); } @@ -563,7 +565,7 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor { if (selectorReturnType != null) { context.trace.record(BindingContext.EXPRESSION_TYPE, selectorExpression, selectorReturnType); } - return DataFlowUtils.checkType(selectorReturnType, expression, context, receiverTypeInfo.getDataFlowInfo()); + return DataFlowUtils.checkType(selectorReturnType, expression, context, selectorReturnTypeInfo.getDataFlowInfo()); } private void propagateConstantValues(JetQualifiedExpression expression, ExpressionTypingContext context, JetSimpleNameExpression selectorExpression) { @@ -658,9 +660,10 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor { JetExpression newReceiverExpression = qualifiedExpression.getReceiverExpression(); JetTypeInfo newReceiverTypeInfo = getSelectorReturnTypeInfo(receiver, callOperationNode, newReceiverExpression, context.replaceExpectedType(NO_EXPECTED_TYPE)); JetType newReceiverType = newReceiverTypeInfo.getType(); + DataFlowInfo newReceiverDataFlowInfo = newReceiverTypeInfo.getDataFlowInfo(); JetExpression newSelectorExpression = qualifiedExpression.getSelectorExpression(); if (newReceiverType != null && newSelectorExpression != null) { - return getSelectorReturnTypeInfo(new ExpressionReceiver(newReceiverExpression, newReceiverType), qualifiedExpression.getOperationTokenNode(), newSelectorExpression, context); + return getSelectorReturnTypeInfo(new ExpressionReceiver(newReceiverExpression, newReceiverType), qualifiedExpression.getOperationTokenNode(), newSelectorExpression, context.replaceDataFlowInfo(newReceiverDataFlowInfo)); } } else {