diff --git a/src/main/java/org/jastadd/relast/compiler/Mustache.java b/src/main/java/org/jastadd/relast/compiler/Mustache.java index c413bfe5eaa88df8beced589731a355b2b3c80ac..e5b09f3922452275ae598c32332af6cf4a0a4722 100644 --- a/src/main/java/org/jastadd/relast/compiler/Mustache.java +++ b/src/main/java/org/jastadd/relast/compiler/Mustache.java @@ -43,6 +43,7 @@ public class Mustache { Template template = handlebars.compile(templateFileName); try (Writer w = new FileWriter(outputFileName)) { + System.out.println("Writing " + outputFileName); template.apply(context, w); w.flush(); } diff --git a/src/main/java/org/jastadd/relast/compiler/RelAstProcessor.java b/src/main/java/org/jastadd/relast/compiler/RelAstProcessor.java index 18e72d055619f10b13dd10a8952ff359caba01cb..858934970ccb72e5db62ed427210d25b0f0db99e 100644 --- a/src/main/java/org/jastadd/relast/compiler/RelAstProcessor.java +++ b/src/main/java/org/jastadd/relast/compiler/RelAstProcessor.java @@ -55,14 +55,14 @@ public abstract class RelAstProcessor extends AbstractCompiler { inputBasePath = Paths.get(optionInputBaseDir.value()).toAbsolutePath(); } else { inputBasePath = Paths.get(".").toAbsolutePath(); - printMessage("No input base dir is set. Assuming current directory '" + inputBasePath.toAbsolutePath().toString() + "'."); + printMessage("No input base dir is set. Assuming current directory '" + inputBasePath.toAbsolutePath() + "'."); } if (!inputBasePath.toFile().exists()) { - printMessage("Input path '" + inputBasePath.toAbsolutePath().toString() + "' does not exist. Exiting..."); + printMessage("Input path '" + inputBasePath.toAbsolutePath() + "' does not exist. Exiting..."); System.exit(-1); } else if (!inputBasePath.toFile().isDirectory()) { - printMessage("Input path '" + inputBasePath.toAbsolutePath().toString() + "' is not a directory. Exiting..."); + printMessage("Input path '" + inputBasePath.toAbsolutePath() + "' is not a directory. Exiting..."); System.exit(-1); } @@ -74,29 +74,29 @@ public abstract class RelAstProcessor extends AbstractCompiler { } if (outputBasePath.toFile().exists() && !outputBasePath.toFile().isDirectory()) { - printMessage("Output path '" + inputBasePath.toAbsolutePath().toString() + "' exists, but is not a directory. Exiting..."); + printMessage("Output path '" + inputBasePath.toAbsolutePath() + "' exists, but is not a directory. Exiting..."); } printMessage("Running " + getName()); // gather all files Collection<Path> inputFiles = new ArrayList<>(); - getConfiguration().getFiles().forEach(name -> relativizeFileName(inputBasePath, Paths.get(name)).ifPresent(inputFiles::add)); + getConfiguration().getFiles().forEach(name -> checkFileName(inputBasePath, Paths.get(name)).ifPresent(inputFiles::add)); - Program program = parseProgram(inputFiles); + Program program = parseProgram(inputBasePath, inputFiles); return processGrammar(program, inputBasePath, outputBasePath); } protected abstract int processGrammar(Program program, Path inputBasePath, Path outputBasePath) throws CompilerException; - private Optional<Path> relativizeFileName(Path inputBasePath, Path filePath) { + private Optional<Path> checkFileName(Path inputBasePath, Path filePath) { if (filePath.isAbsolute()) { - if (filePath.startsWith(inputBasePath)) { - return Optional.of(filePath.relativize(inputBasePath)); + if (filePath.normalize().startsWith(inputBasePath.normalize())) { + return Optional.of(filePath); } else { - printMessage("Path '" + filePath + "' is not contained in the base path '" + inputBasePath + "'."); + printMessage("Path '" + filePath + "' is not contained in the base path '" + inputBasePath + "', ignoring it."); return Optional.empty(); } } else { @@ -118,7 +118,7 @@ public abstract class RelAstProcessor extends AbstractCompiler { } } - private Program parseProgram(Collection<Path> inputFiles) { + private Program parseProgram(Path inputBasePath, Collection<Path> inputFiles) { Program program = new Program(); RelAstParser parser = new RelAstParser(); @@ -128,7 +128,7 @@ public abstract class RelAstProcessor extends AbstractCompiler { try (BufferedReader reader = Files.newBufferedReader(path)) { RelAstScanner scanner = new RelAstScanner(reader); GrammarFile inputGrammar = (GrammarFile) parser.parse(scanner); - inputGrammar.setFileName(path.toString()); + inputGrammar.setFileName(inputBasePath.relativize(path).toString()); program.addGrammarFile(inputGrammar); } catch (IOException | beaver.Parser.Exception e) { printMessage("Could not parse grammar file " + path);