diff --git a/smithy-cli/build.gradle.kts b/smithy-cli/build.gradle.kts index 8883f305715..7fb30bee4fe 100644 --- a/smithy-cli/build.gradle.kts +++ b/smithy-cli/build.gradle.kts @@ -19,7 +19,7 @@ extra["moduleName"] = "software.amazon.smithy.cli" plugins { application - id("org.beryx.runtime") version "1.1.6" + id("org.beryx.runtime") version "1.8.4" } dependencies { @@ -32,10 +32,16 @@ dependencies { application { mainClassName = "software.amazon.smithy.cli.SmithyCli" applicationName = "smithy" - applicationDefaultJvmArgs = listOf("-XX:TieredStopAtLevel=2", "-Xshare:auto", "-XX:SharedArchiveFile=app-cds.jsa") + applicationDefaultJvmArgs = listOf("-XX:TieredStopAtLevel=2", "-Xshare:auto") } runtime { addOptions("--compress", "0", "--strip-debug", "--no-header-files", "--no-man-pages") addModules("java.logging") } + +tasks.register("optimizeCli") { + commandLine("${project.buildDir}/image/bin/java", "-Xshare:dump") +} + +tasks["runtime"].finalizedBy("optimizeCli") diff --git a/smithy-cli/src/main/java/software/amazon/smithy/cli/Cli.java b/smithy-cli/src/main/java/software/amazon/smithy/cli/Cli.java index a6ac12d7f6e..dd930f4a867 100644 --- a/smithy-cli/src/main/java/software/amazon/smithy/cli/Cli.java +++ b/smithy-cli/src/main/java/software/amazon/smithy/cli/Cli.java @@ -31,6 +31,7 @@ import java.util.logging.Logger; import java.util.logging.SimpleFormatter; import software.amazon.smithy.utils.SmithyUnstableApi; +import software.amazon.smithy.utils.StringUtils; /** * This class provides a very basic CLI abstraction. @@ -274,7 +275,7 @@ private void printMainHelp() { for (Map.Entry entry : commands.entrySet()) { table.put(" " + entry.getKey(), entry.getValue().getSummary()); } - stdout(createTable(table).trim()); + stdout(StringUtils.stripEnd(createTable(table), " \t\r\n")); } private String createTable(Map table) { @@ -302,14 +303,7 @@ private void printHelp(Command command, Parser parser) { // Omit the built-in --help arguments. if (!arg.getLongName().filter(name -> name.equals(HELP)).isPresent()) { example.append(" ["); - arg.getShortName().ifPresent(example::append); - if (arg.getShortName().isPresent() && arg.getLongName().isPresent()) { - example.append(" | "); - } - arg.getLongName().ifPresent(example::append); - if (arg.getArity() == Parser.Arity.MANY) { - example.append(" ..."); - } + writeArgHelp(arg, example); example.append("]"); } }); @@ -326,14 +320,7 @@ private void printHelp(Command command, Parser parser) { Map table = new LinkedHashMap<>(); parser.getArgs().forEach(arg -> { StringBuilder key = new StringBuilder(" "); - arg.getShortName().ifPresent(key::append); - if (arg.getShortName().isPresent() && arg.getLongName().isPresent()) { - key.append(" | "); - } - arg.getLongName().ifPresent(key::append); - if (arg.getArity() == Parser.Arity.MANY) { - key.append(" ..."); - } + writeArgHelp(arg, key); table.put(key.toString(), arg.getHelp()); }); @@ -352,6 +339,17 @@ private void printHelp(Command command, Parser parser) { stdout(body.toString()); } + private void writeArgHelp(Parser.Argument arg, StringBuilder sink) { + arg.getShortName().ifPresent(sink::append); + if (arg.getShortName().isPresent() && arg.getLongName().isPresent()) { + sink.append(" | "); + } + arg.getLongName().ifPresent(sink::append); + if (arg.getArity() == Parser.Arity.MANY) { + sink.append(" ..."); + } + } + private static final class BasicFormatter extends SimpleFormatter { @Override public synchronized String format(LogRecord r) {