void () { 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; }