From 49bfbd3bc719e8988127420d36785e80c724e4f2 Mon Sep 17 00:00:00 2001 From: Jonathan Gibbons Date: Wed, 13 May 2020 10:39:35 -0700 Subject: [PATCH] 8243417: Clean up com.sun.tools.javac.main.CommandLine Reviewed-by: prappo --- .../com/sun/tools/javac/main/Arguments.java | 4 +-- .../com/sun/tools/javac/main/CommandLine.java | 27 +++---------------- .../com/sun/tools/javac/main/Main.java | 5 ++-- .../tools/sjavac/options/OptionHelper.java | 5 ++-- .../jdk/javadoc/internal/tool/Start.java | 5 ++-- .../tools/javac/main/EnvVariableTest.java | 11 +++++--- 6 files changed, 21 insertions(+), 36 deletions(-) diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/main/Arguments.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/main/Arguments.java index 3802cb909f7..dbd82e34ab4 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/main/Arguments.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/main/Arguments.java @@ -183,14 +183,14 @@ public void addClassName(String s) { * @param ownName the name of this tool; used to prefix messages * @param args the args to be processed */ - public void init(String ownName, String... args) { + public void init(String ownName, Iterable args) { this.ownName = ownName; errorMode = ErrorMode.LOG; files = new LinkedHashSet<>(); deferredFileManagerOptions = new LinkedHashMap<>(); fileObjects = null; classNames = new LinkedHashSet<>(); - processArgs(List.from(args), Option.getJavaCompilerOptions(), cmdLineHelper, true, false); + processArgs(args, Option.getJavaCompilerOptions(), cmdLineHelper, true, false); if (errors) { log.printLines(PrefixKind.JAVAC, "msg.usage", ownName); } diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/main/CommandLine.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/main/CommandLine.java index de8d0376106..ec6f711f9bc 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/main/CommandLine.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/main/CommandLine.java @@ -56,10 +56,10 @@ public class CommandLine { * @return the arguments, with @files expanded * @throws IOException if there is a problem reading any of the @files */ - public static String[] parse(String[] args) throws IOException { + public static List parse(List args) throws IOException { List newArgs = new ArrayList<>(); - appendParsedCommandArgs(newArgs, Arrays.asList(args)); - return newArgs.toArray(new String[newArgs.size()]); + appendParsedCommandArgs(newArgs, args); + return newArgs; } private static void appendParsedCommandArgs(List newArgs, List args) throws IOException { @@ -104,27 +104,6 @@ public static List parse(String envVariable, List args) return newArgs; } - /** - * Process the given environment variable and appends any Win32-style - * command files for the specified command line arguments and return - * the resulting arguments. A command file argument - * is of the form '@file' where 'file' is the name of the file whose - * contents are to be parsed for additional arguments. The contents of - * the command file are parsed using StreamTokenizer and the original - * '@file' argument replaced with the resulting tokens. Recursive command - * files are not supported. The '@' character itself can be quoted with - * the sequence '@@'. - * @param envVariable the env variable to process - * @param args the arguments that may contain @files - * @return the arguments, with environment variable's content and expansion of @files - * @throws IOException if there is a problem reading any of the @files - * @throws com.sun.tools.javac.main.CommandLine.UnmatchedQuote - */ - public static String[] parse(String envVariable, String[] args) throws IOException, UnmatchedQuote { - List out = parse(envVariable, Arrays.asList(args)); - return out.toArray(new String[out.size()]); - } - private static void loadCmdFile(String name, List args) throws IOException { try (Reader r = Files.newBufferedReader(Paths.get(name), Charset.defaultCharset())) { Tokenizer t = new Tokenizer(r); diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/main/Main.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/main/Main.java index 4f5a2a4f113..d437678eeb5 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/main/Main.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/main/Main.java @@ -217,8 +217,9 @@ public void put(String name, String value) { } } // prefix argv with contents of environment variable and expand @-files + Iterable allArgs; try { - argv = CommandLine.parse(ENV_OPT_NAME, argv); + allArgs = CommandLine.parse(ENV_OPT_NAME, List.from(argv)); } catch (UnmatchedQuote ex) { reportDiag(Errors.UnmatchedQuote(ex.variableName)); return Result.CMDERR; @@ -232,7 +233,7 @@ public void put(String name, String value) { } } Arguments args = Arguments.instance(context); - args.init(ownName, argv); + args.init(ownName, allArgs); if (log.nerrors > 0) return Result.CMDERR; diff --git a/src/jdk.compiler/share/classes/com/sun/tools/sjavac/options/OptionHelper.java b/src/jdk.compiler/share/classes/com/sun/tools/sjavac/options/OptionHelper.java index 709bf835a5b..2d0e8790b15 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/sjavac/options/OptionHelper.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/sjavac/options/OptionHelper.java @@ -117,12 +117,13 @@ public abstract class OptionHelper { * @param args the arguments to traverse. */ void traverse(String[] args) { + Iterable allArgs; try { - args = CommandLine.parse(args); // Detect @file and load it as a command line. + allArgs = CommandLine.parse(List.of(args)); // Detect @file and load it as a command line. } catch (java.io.IOException e) { throw new IllegalArgumentException("Problem reading @"+e.getMessage()); } - ArgumentIterator argIter = new ArgumentIterator(Arrays.asList(args)); + ArgumentIterator argIter = new ArgumentIterator(allArgs); nextArg: while (argIter.hasNext()) { diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/Start.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/Start.java index bb213615f1b..a23da6c6c0e 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/Start.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/Start.java @@ -341,13 +341,14 @@ void showOption(List names, String parameters, String description) { @SuppressWarnings("deprecation") Result begin(String... argv) { // Preprocess @file arguments + List allArgs; try { - argv = CommandLine.parse(argv); + allArgs = CommandLine.parse(List.of(argv)); } catch (IOException e) { error("main.cant.read", e.getMessage()); return ERROR; } - return begin(Arrays.asList(argv), Collections.emptySet()); + return begin(allArgs, Collections.emptySet()); } // Called by the JSR 199 API diff --git a/test/langtools/tools/javac/main/EnvVariableTest.java b/test/langtools/tools/javac/main/EnvVariableTest.java index 0d44edcb72c..cba7f7f02be 100644 --- a/test/langtools/tools/javac/main/EnvVariableTest.java +++ b/test/langtools/tools/javac/main/EnvVariableTest.java @@ -35,6 +35,9 @@ import java.io.IOException; import java.io.PrintStream; import java.nio.file.Path; +import java.util.Arrays; +import java.util.stream.Collectors; +import java.util.List; import toolbox.*; @@ -135,14 +138,14 @@ void test(String full, String... expectedArgs) throws Exception { * print the result. */ public static class Tester { - private static final String[] EMPTY_ARRAY = new String[0]; + private static final List EMPTY_LIST = List.of(); static String arrayToString(String... args) { - return String.join(", ", args); + return List.of(args).stream().collect(Collectors.joining(", ")); } public static void main(String... args) throws IOException { try { - String[] argv = CommandLine.parse("JDK_JAVAC_OPTIONS", EMPTY_ARRAY); - System.out.print(arrayToString(argv)); + List argv = CommandLine.parse("JDK_JAVAC_OPTIONS", EMPTY_LIST); + System.out.print(argv.stream().collect(Collectors.joining(", "))); } catch (CommandLine.UnmatchedQuote ex) { System.out.print("Exception: " + ex.variableName); }