@Nullable
  private ReturnValue findValueInRule(@NotNull LighterASTNode rule) {
    LighterASTNode body = firstChildOfType(tree, rule, PsiSwitchLabeledRuleStatementImpl.BODY_STATEMENTS);
    if (body == null) {
      return ReturnValue.UNKNOWN;
    }
    else if (body.getTokenType() == EXPRESSION_STATEMENT) {
      return getExpressionValue(findExpressionChild(tree, body));
    }
    else if (body.getTokenType() == THROW_STATEMENT) {
      return null;
    }
    else if (body.getTokenType() == BLOCK_STATEMENT) {
      List<ReturnValue> values = findValueInSwitchBlock(body);
      return values.stream()
        .reduce(ReturnValue::merge)
        .orElse(ReturnValue.UNKNOWN);
    }
    return ReturnValue.UNKNOWN;
  }
@Nullable
  private ReturnValue findValueInRule(@NotNull LighterASTNode rule)