diff --git a/src/main/java/de/hhu/stups/codegenerator/CodeGenerator.java b/src/main/java/de/hhu/stups/codegenerator/CodeGenerator.java index 53ce6a4d636214fa5d6cb372d020f901e8c95c0a..9c6135faa7da859db262f1c7d1cb96fb7ded7384 100755 --- a/src/main/java/de/hhu/stups/codegenerator/CodeGenerator.java +++ b/src/main/java/de/hhu/stups/codegenerator/CodeGenerator.java @@ -231,7 +231,7 @@ public class CodeGenerator { return paths; } - public void generateBlackBoxTraceGenerator(Path path, String name, String modelPath, String learningTechnique, int episodes, String minint, String maxint, String deferredSetSize) { + public void generateBlackBoxTraceGenerator(Path path, String name, String modelPath, String learningTechnique, int episodes, String minint, String maxint, String deferredSetSize) throws IOException { paths.clear(); BProject project = parseProject(path); @@ -249,9 +249,16 @@ public class CodeGenerator { boolean forModelChecking, boolean useConstraintSolving, MachineNode node, Path addition, boolean isIncludedMachine, boolean forVisualisation, String visualisationFile, BProject project, String serverLink) throws IOException { + String additionText; + if (addition != null && !addition.toFile().isDirectory()) { + additionText = new String(Files.readAllBytes(addition)); + } else { + additionText = null; + } + MachineGenerator generator = new MachineGenerator(mode, useBigInteger, minint, maxint, deferredSetSize, forModelChecking, - useConstraintSolving, addition, isIncludedMachine, forVisualisation, serverLink); + useConstraintSolving, additionText, isIncludedMachine, forVisualisation, serverLink); machineReferenceGenerator.updateNameHandler(generator); machineReferenceGenerator.updateDeclarationGenerator(generator); machineReferenceGenerator.updateRecordStructGenerator(generator); @@ -275,7 +282,7 @@ public class CodeGenerator { return codePath; } - private void generateVisualisation(BProject project, VisBProject visBProject, MachineGenerator generator, Path mainMachinePath) { + private void generateVisualisation(BProject project, VisBProject visBProject, MachineGenerator generator, Path mainMachinePath) throws IOException { VisualisationGenerator visualisationGenerator = new VisualisationGenerator(project, generator, generator.getImportGenerator(), generator.getExpressionGenerator(), generator.getInvariantGenerator(), generator.getIterationConstructHandler()); String htmlCode = visualisationGenerator.generateHTML(visBProject); writeToFile(mainMachinePath, GeneratorMode.HTML, false, null, false, generator, htmlCode); @@ -293,7 +300,7 @@ public class CodeGenerator { /* * This function writes code for a targeted programming language with creating the belonging file */ - private Path writeToFile(Path path, GeneratorMode mode, boolean forModelChecking, MachineNode node, boolean isIncludedMachine, MachineGenerator generator, String code) { + private Path writeToFile(Path path, GeneratorMode mode, boolean forModelChecking, MachineNode node, boolean isIncludedMachine, MachineGenerator generator, String code) throws IOException { String fileName = path.getFileName().toString().replace(".mch", ""); Path newPath = null; Path jsonPath = null; @@ -310,49 +317,44 @@ public class CodeGenerator { jsonPath = Paths.get(path.getParent().toString(), generator.getNameHandler().handle(fileName) + ".json"); } - try { - if(forModelChecking) { - ModelCheckingInfo mcInfo = generator.generateModelCheckingInfo(node); - assert jsonPath != null; - try (final Writer writer = Files.newBufferedWriter(jsonPath)) { - final JsonWriter jsonWriter = new JsonWriter(writer); - jsonWriter.setHtmlSafe(false); - jsonWriter.setIndent(" "); - Gson gson = Converters.registerAll(new GsonBuilder()) - .disableHtmlEscaping() - .serializeNulls() - .setPrettyPrinting() - .create(); - - gson.toJson(mcInfo.toJsonObject(), jsonWriter); - } + if(forModelChecking) { + ModelCheckingInfo mcInfo = generator.generateModelCheckingInfo(node); + assert jsonPath != null; + try (final Writer writer = Files.newBufferedWriter(jsonPath)) { + final JsonWriter jsonWriter = new JsonWriter(writer); + jsonWriter.setHtmlSafe(false); + jsonWriter.setIndent(" "); + Gson gson = Converters.registerAll(new GsonBuilder()) + .disableHtmlEscaping() + .serializeNulls() + .setPrettyPrinting() + .create(); + + gson.toJson(mcInfo.toJsonObject(), jsonWriter); } - return Files.write(newPath, code.getBytes(), Files.exists(newPath) ? TRUNCATE_EXISTING : CREATE_NEW); - } catch (IOException e) { - e.printStackTrace(); - throw new RuntimeException(e); } + return Files.write(newPath, code.getBytes(), Files.exists(newPath) ? TRUNCATE_EXISTING : CREATE_NEW); } /* * This function executes parsing and semantic checking on a project */ - private BProject parseProject(Path path) throws CodeGenerationException { + private BProject parseProject(Path path) throws CodeGenerationException, IOException { BProject project; try { project = Antlr4BParser.createBProjectFromMainMachineFile(path.toFile()); - } catch (TypeErrorException | ScopeException | IOException e) { + } catch (TypeErrorException | ScopeException e) { e.printStackTrace(); throw new CodeGenerationException(e.getMessage()); } return project; } - private VisBProject parseVisBProject(Path path, VisBVisualisation visualisation) throws CodeGenerationException { + private VisBProject parseVisBProject(Path path, VisBVisualisation visualisation) throws CodeGenerationException, IOException { VisBProject project; try { project = VisBProjectParser.createVisBProjectFromMainFile(path.toFile(), visualisation); - } catch (TypeErrorException | ScopeException | IOException e) { + } catch (TypeErrorException | ScopeException e) { e.printStackTrace(); throw new CodeGenerationException(e.getMessage()); } diff --git a/src/main/java/de/hhu/stups/codegenerator/generators/MachineGenerator.java b/src/main/java/de/hhu/stups/codegenerator/generators/MachineGenerator.java index 252a2bd59a38d670f6a811d70d5a6f9e8b169fc2..84cb6906c01027322cb58b1ce8c9ce58359e61d7 100755 --- a/src/main/java/de/hhu/stups/codegenerator/generators/MachineGenerator.java +++ b/src/main/java/de/hhu/stups/codegenerator/generators/MachineGenerator.java @@ -57,9 +57,6 @@ import de.prob.parser.ast.visitors.AbstractVisitor; import org.stringtemplate.v4.ST; import org.stringtemplate.v4.STGroup; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; import java.util.*; import java.util.stream.Collectors; @@ -152,7 +149,7 @@ public class MachineGenerator implements AbstractVisitor<String, Void> { private Set<String> enumIdentifier; public MachineGenerator(GeneratorMode mode, boolean useBigInteger, String minint, String maxint, String deferredSetSize, - boolean forModelChecking, boolean useConstraintSolving, Path addition, boolean isIncludedMachine, + boolean forModelChecking, boolean useConstraintSolving, String addition, boolean isIncludedMachine, boolean forVisualisation, String serverLink) { this.mode = mode; this.currentGroup = CodeGeneratorUtils.getGroup(mode); @@ -161,13 +158,7 @@ public class MachineGenerator implements AbstractVisitor<String, Void> { this.useBigInteger = useBigInteger; this.serverLink = serverLink; this.boundedVariablesDepth = new HashMap<>(); - if(addition != null && !addition.toFile().isDirectory()) { - try { - this.addition = new String(Files.readAllBytes(addition)); - } catch (IOException e) { - e.printStackTrace(); - } - } + this.addition = addition; this.machinePreprocessor = new MachinePreprocessor(forModelChecking, forVisualisation); this.nameHandler = new NameHandler(this, currentGroup); this.parallelConstructHandler = new ParallelConstructHandler();