public void genJavaSourceFile(File root, GeneratedModule generatedModule) { File moduleOutputDir = JavaCodeGenUtil.getModuleOutputDir(root, this, generatedModule); if (moduleOutputDir == null) { return; } if (generatedModule != null && generatedModule.canBeGenerated() && !generatedModule.hasMergeErrors()) { String javaFileName; org.overture.codegen.ir.INode irNode = generatedModule.getIrNode(); if(irNode instanceof SClassDeclIR) { // The class may have been renamed, hence different form the original name SClassDeclIR clazz = (SClassDeclIR) irNode; javaFileName = clazz.getName(); } else { javaFileName = generatedModule.getName(); } javaFileName += IJavaConstants.JAVA_FILE_EXTENSION; emitCode(moduleOutputDir, javaFileName, generatedModule.getContent()); } }
public String getErrorMessage() { StringBuilder sb = new StringBuilder(); sb.append(modelThy.getMergeErrors().toString()); sb.append(LINEBREAK); sb.append(modelThy.getUnsupportedInIr().toString()); sb.append(LINEBREAK); sb.append(modelThy.getUnsupportedInTargLang().toString()); return sb.toString(); }
public boolean hasErrors() { return modelThy.hasMergeErrors() || modelThy.hasUnsupportedIrNodes() || modelThy.hasUnsupportedTargLangNodes(); }
if (generatedClass.hasMergeErrors()) MsgPrinter.getPrinter().println(String.format("Class %s could not be merged. Following merge errors were found:", generatedClass.getName())); GeneralCodeGenUtils.printMergeErrors(generatedClass.getMergeErrors()); } else if (!generatedClass.canBeGenerated()) + generatedClass.getName() + "\n"); if (generatedClass.hasUnsupportedIrNodes()) errors_ += generatedClass.getUnsupportedInIr().size(); GeneralCodeGenUtils.printUnsupportedIrNodes(generatedClass.getUnsupportedInIr()); if (generatedClass.hasUnsupportedTargLangNodes()) errors_ += generatedClass.getUnsupportedInTargLang().size(); GeneralCodeGenUtils.printUnsupportedNodes(generatedClass.getUnsupportedInTargLang()); if (generatedClass.isTestCase()) names.add(generatedClass.getName()); MsgPrinter.getPrinter().println(generatedClass.getContent()); MsgPrinter.getPrinter().println("\n"); } else + generatedClass.getName());
public static String vdmExp2IsaString(PExp exp) throws AnalysisException, org.overture.codegen.ir.analysis.AnalysisException { IsaGen ig = new IsaGen(); GeneratedModule r = ig.generateIsabelleSyntax(exp); if (r.hasMergeErrors()) { throw new org.overture.codegen.ir.analysis.AnalysisException(exp.toString() + " cannot be generated. Merge errors:" + r.getMergeErrors().toString()); } if (r.hasUnsupportedIrNodes()) { throw new org.overture.codegen.ir.analysis.AnalysisException(exp.toString() + " cannot be generated. Unsupported in IR:" + r.getUnsupportedInIr().toString()); } if (r.hasUnsupportedTargLangNodes()) { throw new org.overture.codegen.ir.analysis.AnalysisException(exp.toString() + " cannot be generated. Unsupported in TargLang:" + r.getUnsupportedInTargLang().toString()); } return r.getContent(); }
generatedCode.append(classCg.getContent()); generatedCode.append(MODULE_DELIMITER); generatedCode.append(q.getName());
private GeneratedModule prettyPrintNode(MergeVisitor pp, IRStatus<? extends INode> status) throws org.overture.codegen.ir.analysis.AnalysisException { INode irClass = status.getIrNode(); StringWriter sw = new StringWriter(); irClass.apply(pp, sw); if (pp.hasMergeErrors()) { return new GeneratedModule(status.getIrNodeName(), irClass, pp.getMergeErrors(), false); } else if (pp.hasUnsupportedTargLangNodes()) { return new GeneratedModule(status.getIrNodeName(), new HashSet<VdmNodeInfo>(), pp.getUnsupportedInTargLang(), false); } else { // Code can be generated. Ideally, should format it GeneratedModule generatedModule = new GeneratedModule(status.getIrNodeName(), irClass, sw.toString(), false); generatedModule.setTransformationWarnings(status.getTransformationWarnings()); return generatedModule; } } }
public String getModelThyString() { return modelThy.getContent(); }
private <T extends PIR> List<IRStatus<T>> filter(List<IRStatus<T>> statuses, List<GeneratedModule> generated, List<String> userTestCases) { List<IRStatus<T>> filtered = new LinkedList<IRStatus<T>>(); for (IRStatus<T> status : statuses) { if (status.canBeGenerated()) { filtered.add(status); } else { boolean isUserTestCase = userTestCases.contains(status.getIrNodeName()); generated.add(new GeneratedModule(status.getIrNodeName(), status.getUnsupportedInIr(), new HashSet<IrNodeInfo>(), isUserTestCase)); } } return filtered; }
public static File getModuleOutputDir(File outputDir, JavaCodeGen vdmCodGen, GeneratedModule generatedClass) { File moduleOutputDir = outputDir; String javaPackage = vdmCodGen.getJavaSettings().getJavaRootPackage(); if (generatedClass.getIrNode() instanceof SClassDeclIR) { javaPackage = ((SClassDeclIR) generatedClass.getIrNode()).getPackage(); } else if (generatedClass.getIrNode() instanceof AInterfaceDeclIR) { javaPackage = ((AInterfaceDeclIR) generatedClass.getIrNode()).getPackage(); } else { log.error("Expected IR node of " + generatedClass.getName() + " to be a class or interface declaration at this point. Got: " + generatedClass.getIrNode()); return null; } if (JavaCodeGenUtil.isValidJavaPackage(javaPackage)) { String packageFolderPath = JavaCodeGenUtil.getFolderFromJavaRootPackage(javaPackage); moduleOutputDir = new File(outputDir, packageFolderPath); } return moduleOutputDir; } }
public IsaPog(List<INode> ast) throws AnalysisException, org.overture.codegen.ir.analysis.AnalysisException { IProofObligationList pos = ProofObligationGenerator.generateProofObligations(ast); pos.renumber(); IsaGen ig = new IsaGen(); modelThy = ig.generate(ast).getClasses().get(0); modelThyName = modelThy.getName() + THY_EXT; posThy = makePosThy(pos, modelThy.getName()); posThyName = modelThy.getName() + POS_THY + THY_EXT; }
if (mergeVisitor.hasMergeErrors()) generatedModule = new GeneratedModule(status.getIrNodeName(), status.getIrNode(), mergeVisitor.getMergeErrors(), isTestCase); } else if (mergeVisitor.hasUnsupportedTargLangNodes()) generatedModule = new GeneratedModule(status.getIrNodeName(), new HashSet<VdmNodeInfo>(), mergeVisitor.getUnsupportedInTargLang(), isTestCase); } else generatedModule = new GeneratedModule(status.getIrNodeName(), status.getIrNode(), formatCode(writer), isTestCase); generatedModule.setTransformationWarnings(status.getTransformationWarnings()); } else return new GeneratedModule(status.getIrNodeName(), status.getUnsupportedInIr(), new HashSet<IrNodeInfo>(), isTestCase(status));
/** * Write Isabelle theory files to disk for the model and proof obligations * * @param path * Path to the directory to write the files to. Must end with the {@link File#separatorChar} * @return true if write is successful * @throws IOException */ public Boolean writeThyFiles(String path) throws IOException { File modelThyFile = new File(path + modelThyName); FileUtils.writeStringToFile(modelThyFile, modelThy.getContent()); File posThyFile = new File(path + posThyName); FileUtils.writeStringToFile(posThyFile, posThy); return true; }
qc.apply(javaFormat.getMergeVisitor(), writer); modules.add(new GeneratedModule(quoteNameVdm, qc, formatCode(writer), false));
} else genModules.add(new GeneratedModule(status.getIrNodeName(), status.getUnsupportedInIr(), new HashSet<IrNodeInfo>(), isTestCase(status))); funcValueInterface.apply(javaFormat.getMergeVisitor(), writer); String formattedJavaCode = JavaCodeGenUtil.formatJavaCode(writer.toString()); genModules.add(new GeneratedModule(funcValueInterface.getName(), funcValueInterface, formattedJavaCode, false));