diff --git a/relast2uml.base/build.gradle b/relast2uml.base/build.gradle index 7c6be0213b75876f976bce2167129fa0960afbe1..86db1feb51a3cf8fb7e4fddddba40c694ac8ea9f 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 0152ba609255b5f0fafb09cc3edc17d33f2c5bc8..e6450fbd126ab20cf1d3ccc792af9d3c84ac9636 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 a216bd7e4bbafc8a0f831ea3ecd577a3f2783181..bb60cd810082c4f557b5d8a54e166d84006ee620 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 c75f09e7f4cccfbc762f2aa2b08663001e7d7239..baa92bc9e44fafa5a036e63c2062696a32d76a7c 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