void (@NotNull SwitchStatement statement) { @NotNull List<List<StatEdge>> caseEdges = statement.getCaseEdges(); int indexDefault = -1; boolean deleteDefault = false; for (int caseIndex = 0; caseIndex < caseEdges.size(); caseIndex++) { List<StatEdge> edges = caseEdges.get(caseIndex); int indexDefaultInside = edges.indexOf(statement.getDefaultEdge()); if (indexDefaultInside == -1) { continue; } indexDefault = caseIndex; //delete other case values for default if (edges.size() != 1) { List<Exprent> exprentsToRemove = new ArrayList<>(); List<StatEdge> edgesToRemove = new ArrayList<>(); List<@Nullable Exprent> exprents = statement.getCaseValues().get(caseIndex); for (int i = 0; i < edges.size(); i++) { if (edges.get(i) == statement.getDefaultEdge()) { continue; } if (exprents.get(i) instanceof VarExprent) { exprentsToRemove.add(exprents.get(i)); edgesToRemove.add(edges.get(i)); } } edges.removeAll(edgesToRemove); exprents.removeAll(exprentsToRemove); break; } Statement defaultStatement = statement.getCaseStatements().get(caseIndex); if (defaultStatement.getExprents() != null && defaultStatement.getExprents().size() == 1) { Exprent expectedFastExit = defaultStatement.getExprents().get(0); if (expectedFastExit instanceof ExitExprent exitExprent && exitExprent.getExitType() == EXIT_THROW && exitExprent.getValue() instanceof NewExprent newExprent && newExprent.getConstructor() != null) { InvocationExprent constructor = newExprent.getConstructor(); if ("java/lang/MatchException".equals(constructor.getClassName()) && constructor.getParameters().size() == 2 && constructor.getParameters().get(0) instanceof ConstExprent constExprent1 && constExprent1.isNull() && constructor.getParameters().get(1) instanceof ConstExprent constExprent2 && constExprent2.isNull()) { deleteDefault = true; } } } break; } if (deleteDefault) { statement.getCaseStatements().remove(indexDefault); statement.getCaseValues().remove(indexDefault); statement.getCaseEdges().remove(indexDefault); } }