# HG changeset patch # User iignatyev # Date 1544745414 28800 # Thu Dec 13 15:56:54 2018 -0800 # Node ID af3fb85ffca8d6b53fe13b6b2ddd60ceac729ef7 # Parent 7d4397b43fa305806160785a4c7210600d59581a [mq]: 8215322 diff --git a/src/jdk.aot/share/classes/jdk.tools.jaotc/src/jdk/tools/jaotc/Main.java b/src/jdk.aot/share/classes/jdk.tools.jaotc/src/jdk/tools/jaotc/Main.java --- a/src/jdk.aot/share/classes/jdk.tools.jaotc/src/jdk/tools/jaotc/Main.java +++ b/src/jdk.aot/share/classes/jdk.tools.jaotc/src/jdk/tools/jaotc/Main.java @@ -21,19 +21,24 @@ * questions. */ - - package jdk.tools.jaotc; import static org.graalvm.compiler.core.common.GraalOptions.GeneratePIC; import static org.graalvm.compiler.core.common.GraalOptions.ImmutableCode; import static org.graalvm.compiler.hotspot.meta.HotSpotAOTProfilingPlugin.Options.TieredAOT; +import java.io.IOException; import java.io.PrintWriter; import java.text.MessageFormat; +import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.ListIterator; import java.util.Set; +import java.util.StringTokenizer; +import java.util.stream.Stream; +import java.nio.file.Files; +import java.nio.file.Paths; import org.graalvm.compiler.api.replacements.SnippetReflectionProvider; import org.graalvm.compiler.api.runtime.GraalJVMCICompiler; @@ -78,10 +83,33 @@ public static void main(String[] args) throws Exception { Main t = new Main(); - final int exitCode = t.run(args); + final int exitCode = t.run(parse(args)); System.exit(exitCode); } + /** + * Expands '@file' in command line arguments by replacing '@file' with the content of 'file' + * parsed by StringTokenizer. '@' character can be quoted as '@@'. + */ + private static String[] parse(String[] args) throws IOException { + List result = new ArrayList<>(); + for (String arg : args) { + if (arg.length() > 1 && arg.charAt(0) == '@') { + String v = arg.substring(1); + if (v.charAt(0) == '@') { + result.add(v); + } else { + try (Stream file = Files.lines(Paths.get(v))) { + file.map(StringTokenizer::new).map(Collections::list).flatMap(l -> l.stream().map(o -> (String) o)).forEachOrdered(result::add); + } + } + } else { + result.add(arg); + } + } + return result.toArray(String[]::new); + } + private int run(String[] args) { log = new PrintWriter(System.out); printer = new LogPrinter(this, log);