From 5661e7c67f3155a641063fe2295b83df45c11a6b Mon Sep 17 00:00:00 2001 From: rschoene <rene.schoene@tu-dresden.de> Date: Fri, 17 Jul 2020 16:56:35 +0200 Subject: [PATCH] Fix jar build, allow multiple grammars, allow typedecls fail to resolve. --- relast2uml.base/build.gradle | 12 +++++++++++ .../src/main/jastadd/NameResolution.jrag | 12 ++++++++++- .../jastadd/relast2uml/compiler/Compiler.java | 21 +++++++++++++------ .../compiler/options/StringOption.java | 9 +++++++- 4 files changed, 46 insertions(+), 8 deletions(-) diff --git a/relast2uml.base/build.gradle b/relast2uml.base/build.gradle index 7c6be02..86db1fe 100644 --- a/relast2uml.base/build.gradle +++ b/relast2uml.base/build.gradle @@ -46,6 +46,18 @@ task newVersion() { } } +jar { + manifest { + attributes "Main-Class": mainClassName + } + + from { + configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } + } + + archiveBaseName = 'relast2uml' +} + sourceSets { main { java.srcDir "src/gen/java" diff --git a/relast2uml.base/src/main/jastadd/NameResolution.jrag b/relast2uml.base/src/main/jastadd/NameResolution.jrag index 0152ba6..e6450fb 100644 --- a/relast2uml.base/src/main/jastadd/NameResolution.jrag +++ b/relast2uml.base/src/main/jastadd/NameResolution.jrag @@ -1,2 +1,12 @@ -aspect NameResolution { +aspect NameResolutionExtended { + refine NameResolution eq Program.resolveTypeDecl(String name) { + try { + return refined(name); + } catch (RuntimeException e) { + System.err.println(e.getMessage()); + TypeDecl dummy = new TypeDecl(); + dummy.setName("(" + name + ")"); + return dummy; + } + } } diff --git a/relast2uml.base/src/main/java/org/jastadd/relast2uml/compiler/Compiler.java b/relast2uml.base/src/main/java/org/jastadd/relast2uml/compiler/Compiler.java index a216bd7..bb60cd8 100644 --- a/relast2uml.base/src/main/java/org/jastadd/relast2uml/compiler/Compiler.java +++ b/relast2uml.base/src/main/java/org/jastadd/relast2uml/compiler/Compiler.java @@ -78,7 +78,7 @@ public class Compiler { System.out.println("No output output file is set. Assuming '" + output + "'."); } try { - Files.createDirectories(Paths.get(output).getParent()); + Files.createDirectories(Paths.get(output).toAbsolutePath().getParent()); } catch (IOException e) { throw new CompilerException("Error creating output dir " + Paths.get(output).getParent().toAbsolutePath(), e); } @@ -86,6 +86,9 @@ public class Compiler { if (anyRequiredOptionIsUnset()) { throw new CompilerException("Aborting due to missing values for required options."); } + if (commandLine.getArguments().isEmpty()) { + throw new CompilerException("No input grammars specified!"); + } Relast2Uml relast2uml = parseProgram(); @@ -158,11 +161,16 @@ public class Compiler { } private void addOptions() { - optionOutputFile = addOption(new StringOption("output", "target file to be generated.")); - optionInputRelast2Uml = addOption(new StringOption("inputRelast2Uml", "relast2uml definition file.")); - optionHelp = addOption(new FlagOption("help", "Print usage and exit.")); - optionVersion = addOption(new FlagOption("help", "Print version and exit.")); - optionVerbose = addOption(new FlagOption("verbose", "Print more messages while compiling.")); + optionOutputFile = addOption(new StringOption( + "output", "target file to be generated.", "uml.md").makeOptional()); + optionInputRelast2Uml = addOption(new StringOption( + "inputRelast2Uml", "relast2uml definition file.").makeOptional()); + optionHelp = addOption(new FlagOption( + "help", "Print usage and exit.")); + optionVersion = addOption(new FlagOption( + "help", "Print version and exit.")); + optionVerbose = addOption(new FlagOption( + "verbose", "Print more messages while compiling.")); } private <OptionType extends Option<?>> OptionType addOption(OptionType option) { @@ -175,6 +183,7 @@ public class Compiler { Relast2Uml relast2Uml; for (String inputGrammarFileName : commandLine.getArguments()) { + printMessage("Parsing " + inputGrammarFileName); GrammarFile inputGrammar; try (BufferedReader reader = Files.newBufferedReader(Paths.get(inputGrammarFileName))) { Relast2UmlScanner scanner = new Relast2UmlScanner(reader); diff --git a/relast2uml.base/src/main/java/org/jastadd/relast2uml/compiler/options/StringOption.java b/relast2uml.base/src/main/java/org/jastadd/relast2uml/compiler/options/StringOption.java index c75f09e..baa92bc 100644 --- a/relast2uml.base/src/main/java/org/jastadd/relast2uml/compiler/options/StringOption.java +++ b/relast2uml.base/src/main/java/org/jastadd/relast2uml/compiler/options/StringOption.java @@ -1,6 +1,7 @@ package org.jastadd.relast2uml.compiler.options; public class StringOption extends Option<String> { + private HasArgument hasArgument; private String value; private boolean isSet; @@ -12,6 +13,12 @@ public class StringOption extends Option<String> { super(name, description); value = defaultValue; isSet = false; + hasArgument = HasArgument.YES; + } + + public StringOption makeOptional() { + hasArgument = HasArgument.OPTIONAL; + return this; } @Override @@ -21,7 +28,7 @@ public class StringOption extends Option<String> { @Override public Option.HasArgument hasArgument() { - return Option.HasArgument.YES; + return hasArgument; } @Override -- GitLab