static boolean processAtLeastOneBlock(@NotNull VarTracker tracker, @NotNull Statement statement) {
    if (statement instanceof BasicBlockStatement  && statement.getExprents() != null) {
      boolean found = false;
      List<Exprent> exprents = statement.getExprents();
      List<StatEdge> edges = statement.getSuccessorEdges(StatEdge.EdgeType.DIRECT_ALL);
      //should keep this variable, because it is used outside
      if (edges.size() == 1 && edges.get(0).getType() == StatEdge.EdgeType.BREAK && exprents.size() > 1) {
        Exprent exprent = exprents.get(exprents.size() - 1);
        if (exprent instanceof AssignmentExprent assignmentExprent &&
            assignmentExprent.getLeft() instanceof VarExprent preserveVarExprent &&
            usedOutside(edges.get(0), assignmentExprent)) {
            exprents = exprents.subList(0, exprents.size() - 1);
            tracker.addPreserve(preserveVarExprent, statement);
        }
      }
      for (Exprent statementExprent : exprents) {
        if (collectRecordAssignment(tracker, statementExprent, statement)) {
          found = true;
          continue;
        }
        return found;
      }
    }
    if (statement instanceof SequenceStatement || statement instanceof IfStatement) {
      return processAtLeastOneBlock(tracker, statement.getFirst());
    }
    return true;
  }
static boolean processAtLeastOneBlock(@NotNull VarTracker tracker, @NotNull Statement statement)