package de.gaalop.dot; import de.gaalop.CodeGenerator; import de.gaalop.OutputFile; import de.gaalop.CodeGeneratorException; import de.gaalop.cfg.ControlFlowGraph; import java.util.Set; import java.util.Collections; import java.nio.charset.Charset; /** * This class implements the DOT code generator. */ public enum DotCodeGenerator implements CodeGenerator { INSTANCE; @Override public Set<OutputFile> generate(ControlFlowGraph in) throws CodeGeneratorException { String dotCode = generateCode(in); String filename = generateFilename(in); Charset charset = Charset.forName("UTF-8"); OutputFile output = new OutputFile(filename, dotCode, charset); return Collections.singleton(output); } private String generateFilename(ControlFlowGraph in) { String filename = "gaalop.dot"; if (in.getSource() != null) { filename = in.getSource().getName(); int lastDotIndex = filename.lastIndexOf('.'); if (lastDotIndex != -1) { filename = filename.substring(0, lastDotIndex); } filename += ".dot"; } return filename; } private String generateCode(ControlFlowGraph in) { CfgVisitor visitor = new CfgVisitor(); in.accept(visitor); return visitor.getResult(); } }