String (@NotNull final ControlFlow flow, @NotNull final ControlFlowProvider provider) { StringBuilder builder = new StringBuilder(); builder.append("digraph {"); for (Instruction instruction : flow.getInstructions()) { printInstruction(builder, instruction, provider); if (instruction instanceof ConditionalInstruction conditionalInstruction) { builder.append("\n").append("Its ").append(conditionalInstruction.getResult()). append(" branch, condition: ").append(conditionalInstruction.getCondition().getText()); } builder.append("\"").append("]"); builder.append(System.lineSeparator()); if (instruction.allPred().isEmpty()) { builder.append("Entry -> Instruction").append(instruction.num()).append(System.lineSeparator()); } if (instruction.allSucc().isEmpty()) { builder.append("Instruction").append(instruction.num()).append(" -> Exit").append(System.lineSeparator()); } for (Instruction succ : instruction.allSucc()) { builder.append("Instruction").append(instruction.num()).append(" -> ") .append("Instruction").append(succ.num()).append(System.lineSeparator()); } } builder.append("}"); return builder.toString(); }