From 2850be7fdfa925b2e299bd8b06a11d3c11d7b49f Mon Sep 17 00:00:00 2001
From: rschoene <rene.schoene@tu-dresden.de>
Date: Sun, 20 Jun 2021 10:49:50 +0200
Subject: [PATCH] import command line messages

- fix handling of absolute input files
- see #5
---
 .../org/jastadd/relast/compiler/Mustache.java |  1 +
 .../relast/compiler/RelAstProcessor.java      | 24 +++++++++----------
 2 files changed, 13 insertions(+), 12 deletions(-)

diff --git a/src/main/java/org/jastadd/relast/compiler/Mustache.java b/src/main/java/org/jastadd/relast/compiler/Mustache.java
index c413bfe..e5b09f3 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 18e72d0..8589349 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);
-- 
GitLab