Condition analysis: left part of and (true condition) / or (false condition) is used for right part analysis #KT-8780 Fixed

This commit is contained in:
Mikhail Glukhikh
2015-10-28 20:11:04 +03:00
parent 12103d19d2
commit dd1196ae6b
6 changed files with 82 additions and 1 deletions
@@ -85,8 +85,11 @@ public class DataFlowAnalyzer {
DataFlowInfo dataFlowInfo = extractDataFlowInfoFromCondition(expression.getLeft(), conditionValue, context);
KtExpression expressionRight = expression.getRight();
if (expressionRight != null) {
DataFlowInfo rightInfo = extractDataFlowInfoFromCondition(expressionRight, conditionValue, context);
boolean and = operationToken == KtTokens.ANDAND;
DataFlowInfo rightInfo = extractDataFlowInfoFromCondition(
expressionRight, conditionValue,
and == conditionValue ? context.replaceDataFlowInfo(dataFlowInfo) : context
);
if (and == conditionValue) { // this means: and && conditionValue || !and && !conditionValue
dataFlowInfo = dataFlowInfo.and(rightInfo);
}