add the noRootDirectories option

This commit is contained in:
Renaud Pawlak 2015-11-21 07:52:39 +01:00
parent d94ac28d90
commit 8166ffacaf
2 changed files with 34 additions and 15 deletions

View File

@ -81,8 +81,9 @@ public class JSweetCommandLineLauncher {
Util.addFiles(".java", inputDir, files); Util.addFiles(".java", inputDir, files);
JSweetTranspiler transpiler = new JSweetTranspiler(tsOutputDir, jsOutputDir, classPath); JSweetTranspiler transpiler = new JSweetTranspiler(tsOutputDir, jsOutputDir, classPath);
transpiler.setBundle(jsapArgs.getBoolean("bundle"));
transpiler.setBundle(jsapArgs.getBoolean("bundle"));
transpiler.setNoRootDirectories(jsapArgs.getBoolean("noRootDirectories"));
File bundlesDirectory = null; File bundlesDirectory = null;
if (jsapArgs.getFile("bundlesDirectory") != null) { if (jsapArgs.getFile("bundlesDirectory") != null) {
bundlesDirectory = jsapArgs.getFile("bundlesDirectory"); bundlesDirectory = jsapArgs.getFile("bundlesDirectory");
@ -90,25 +91,13 @@ public class JSweetCommandLineLauncher {
} }
logger.info("bundles directory: " + bundlesDirectory); logger.info("bundles directory: " + bundlesDirectory);
transpiler.setBundlesDirectory(bundlesDirectory); transpiler.setBundlesDirectory(bundlesDirectory);
transpiler.setPreserveSourceLineNumbers(jsapArgs.getBoolean("debug")); transpiler.setPreserveSourceLineNumbers(jsapArgs.getBoolean("debug"));
if (args.length > 4) {
File f = new File(args[4]);
if (f.exists()) {
transpiler.setTsDefDirs(f);
logger.info("tsdef dir: " + args[4]);
} else {
OUTPUT_LOGGER.warn("tsdef dir does not exist - " + args[4]);
}
}
transpiler.setModuleKind(ModuleKind.valueOf(jsapArgs.getString("module"))); transpiler.setModuleKind(ModuleKind.valueOf(jsapArgs.getString("module")));
transpiler.setEncoding(jsapArgs.getString("encoding"));
ErrorCountTranspilationHandler transpilationHandler = new ErrorCountTranspilationHandler(new ConsoleTranspilationHandler()); ErrorCountTranspilationHandler transpilationHandler = new ErrorCountTranspilationHandler(new ConsoleTranspilationHandler());
errorCount = transpilationHandler.getErrorCount(); errorCount = transpilationHandler.getErrorCount();
transpiler.setEncoding(jsapArgs.getString("encoding"));
transpiler.transpile(transpilationHandler, SourceFile.toSourceFiles(files)); transpiler.transpile(transpilationHandler, SourceFile.toSourceFiles(files));
errorCount = transpilationHandler.getErrorCount(); errorCount = transpilationHandler.getErrorCount();
@ -159,6 +148,14 @@ public class JSweetCommandLineLauncher {
optionArg.setHelp("An input dir containing Java files to be transpiled."); optionArg.setHelp("An input dir containing Java files to be transpiled.");
jsap.registerParameter(optionArg); jsap.registerParameter(optionArg);
// Skip empty root dirs
switchArg = new Switch("noRootDirectories");
switchArg.setLongFlag("noRootDirectories");
switchArg.setHelp(
"Skip the root directories (i.e. packages annotated with @jsweet.lang.Root) so that the generated file hierarchy starts at the root directories rather than including the entire directory structure.");
switchArg.setDefault("false");
jsap.registerParameter(switchArg);
// TypeScript output directory // TypeScript output directory
optionArg = new FlaggedOption("tsout"); optionArg = new FlaggedOption("tsout");
optionArg.setLongFlag("tsout"); optionArg.setLongFlag("tsout");

View File

@ -132,6 +132,7 @@ public class JSweetTranspiler {
private boolean bundle = false; private boolean bundle = false;
private File bundlesDirectory; private File bundlesDirectory;
private String encoding = null; private String encoding = null;
private boolean noRootDirectories = false;
/** /**
* Creates a JSweet transpiler, with the default values. * Creates a JSweet transpiler, with the default values.
@ -773,7 +774,8 @@ public class JSweetTranspiler {
String cuName = s[s.length - 1]; String cuName = s[s.length - 1];
s = cuName.split("\\."); s = cuName.split("\\.");
cuName = s[0]; cuName = s[0];
String outputFileRelativePathNoExt = cu.packge.fullname.toString().replace(".", File.separator) + File.separator + cuName; String packageName = isNoRootDirectories() ? Util.getRootRelativeJavaName(cu.packge) : cu.packge.getQualifiedName().toString();
String outputFileRelativePathNoExt = packageName.replace(".", File.separator) + File.separator + cuName;
String outputFileRelativePath = outputFileRelativePathNoExt + printer.getTargetFilesExtension(); String outputFileRelativePath = outputFileRelativePathNoExt + printer.getTargetFilesExtension();
logger.info("output file: " + outputFileRelativePath); logger.info("output file: " + outputFileRelativePath);
File outputFile = new File(tsOutputDir, outputFileRelativePath); File outputFile = new File(tsOutputDir, outputFileRelativePath);
@ -1236,4 +1238,24 @@ public class JSweetTranspiler {
public void setEncoding(String encoding) { public void setEncoding(String encoding) {
this.encoding = encoding; this.encoding = encoding;
} }
/**
* Tells if this transpiler skips the root directories (packages annotated
* with @jsweet.lang.Root) so that the generated file hierarchy starts at
* the root directories rather than including the entire directory
* structure.
*/
public boolean isNoRootDirectories() {
return noRootDirectories;
}
/**
* Sets this transpiler to skip the root directories (packages annotated
* with @jsweet.lang.Root) so that the generated file hierarchy starts at
* the root directories rather than including the entire directory
* structure.
*/
public void setNoRootDirectories(boolean noRootDirectories) {
this.noRootDirectories = noRootDirectories;
}
} }