package eu.hats_project.build.maven.plugin;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.logging.Log;
import abs.backend.maude.MaudeCompiler;
/**
*
* @author pwong
*
*/
public class MaudeGenerator extends MTVLParser {
/**
*
* @param absfrontEnd
* @param absSrcFolder
* @param absArguments
* @param absMaudeBackendOutputFile
* @param verbose
* @param stdlib
* @param loctype
* @param productName
* @param mainBlock
* sets the main block to execute
* @param timed
* generate code for timed interpreter
* @return
*
* @throws MojoExecutionException
*/
List<String> generateMaude(
File absfrontEnd,
File absSrcFolder,
List<String> absArguments,
File absMaudeBackendOutputFile,
boolean checkProductSelection,
boolean verbose,
boolean stdlib,
boolean loctype,
String productName,
String mainBlock,
boolean timed,
Log log) throws MojoExecutionException {
if (!absMaudeBackendOutputFile.getParentFile().exists()) {
if (!absMaudeBackendOutputFile.getParentFile().mkdirs()) {
throw new MojoExecutionException("Could not create folder for output file " + absMaudeBackendOutputFile);
}
}
if (!absSrcFolder.exists()) {
throw new MojoExecutionException("Source folder does not exist");
}
List<String> args = new ArrayList<String>();
System.setProperty("java.class.path", absfrontEnd.getAbsolutePath());
args.add("-o");
args.add(absMaudeBackendOutputFile.getAbsolutePath());
absArguments =
super.parseMTVL(absfrontEnd, absArguments, productName, verbose, checkProductSelection, log);
if (productName != null) {
args.add("-product="+productName);
}
if (verbose) {
args.add("-v");
}
if (! stdlib) {
args.add("-nostdlib");
}
if (loctype) {
args.add("-loctypes");
}
if (timed) {
args.add("-timed");
}
if (mainBlock != null) {
args.add("-main="+mainBlock);
}
args.addAll(absArguments);
String[] argArray = args.toArray(new String[args.size()]);
new DebugArgOutput().debug("Generating Maude Code", argArray, log);
try {
MaudeCompiler.main(argArray);
} catch (Exception e) {
throw new MojoExecutionException("Could not generate Maude script", e);
}
return absArguments;
}
}