public void sortEdgesAndNodes() {
    Map<StatEdge, Integer> edgeIndicesMapping = new HashMap<>();
    List<StatEdge> firstSuccessors = first.getSuccessorEdges(EdgeType.DIRECT_ALL);
    for (int i = 0; i < firstSuccessors.size(); i++) {
      edgeIndicesMapping.put(firstSuccessors.get(i), i == 0 ? firstSuccessors.size() : i);
    }

    BasicBlockStatement firstBlock = (BasicBlockStatement)first;
    int[] values = ((SwitchInstruction)firstBlock.getBlock().getLastInstruction()).getValues();
    List<@Nullable Statement> caseStatements = new ArrayList<>(stats.size() - 1);
    List<List<Integer>> edgeIndices = new ArrayList<>(stats.size() - 1);
    collectRegularEdgesIndices(edgeIndicesMapping, caseStatements, edgeIndices);
    collectExitEdgesIndices(edgeIndicesMapping, caseStatements, edgeIndices);
    sortEdges(caseStatements, edgeIndices);

    List<List<StatEdge>> caseEdges = new ArrayList<>(edgeIndices.size());
    List<List<@Nullable Exprent>> caseValues = new ArrayList<>(edgeIndices.size());
    mapEdgeIndicesToEdges(values, edgeIndices, caseEdges, caseValues);

    replaceNullStatementsWithBasicBlocks(caseStatements, caseEdges);

    this.caseStatements = caseStatements;
    this.caseEdges = caseEdges;
    this.caseValues = caseValues;
  }
public void sortEdgesAndNodes()