@NotNull
  private ReturnValue findValueInSwitchExpression(@NotNull LighterASTNode expr) {
    if (expr.getTokenType() != SWITCH_EXPRESSION) return ReturnValue.UNKNOWN;
    LighterASTNode block = firstChildOfType(tree, expr, CODE_BLOCK);
    if (block == null) return ReturnValue.UNKNOWN;
    List<LighterASTNode> rules = getChildrenOfType(tree, block, SWITCH_LABELED_RULE);
    List<ReturnValue> values = new ArrayList<>();
    if (!rules.isEmpty()) {
      for (LighterASTNode rule : rules) {
        ReturnValue ruleReturnValue = findValueInRule(rule);
        if (ruleReturnValue != null) {
          values.add(ruleReturnValue);
        }
      }
    }
    else {
      values.addAll(findValueInSwitchBlock(block));
    }
    return values.stream()
      .reduce(ReturnValue::merge)
      .orElse(ReturnValue.UNKNOWN);
  }
@NotNull
  private ReturnValue findValueInSwitchExpression(@NotNull LighterASTNode expr)