< prev index next >

src/jdk.incubator.jpackage/share/classes/jdk/incubator/jpackage/main/CommandLine.java

Print this page

        

@@ -21,30 +21,39 @@
  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  * or visit www.oracle.com if you need additional information or have any
  * questions.
  */
 
-package jdk.jpackage.main;
+package jdk.incubator.jpackage.main;
 
+import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.io.File;
 import java.io.Reader;
 import java.nio.charset.Charset;
 import java.nio.file.Files;
+import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
 /**
+ * This file was originally a copy of CommandLine.java in
+ * com.sun.tools.javac.main.
+ * It should track changes made to that file.
+ */
+
+/**
  * Various utility methods for processing Java tool command line arguments.
  *
  *  <p><b>This is NOT part of any supported API.
  *  If you write code that depends on this, you do so at your own risk.
  *  This code and its internal interfaces are subject to change or
  *  deletion without notice.</b>
  */
-public class CommandLine {
+class CommandLine {
     /**
      * Process 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

@@ -60,11 +69,12 @@
         List<String> newArgs = new ArrayList<>();
         appendParsedCommandArgs(newArgs, Arrays.asList(args));
         return newArgs.toArray(new String[newArgs.size()]);
     }
 
-    private static void appendParsedCommandArgs(List<String> newArgs, List<String> args) throws IOException {
+    private static void appendParsedCommandArgs(List<String> newArgs,
+            List<String> args) throws IOException {
         for (String arg : args) {
             if (arg.length() > 1 && arg.charAt(0) == '@') {
                 arg = arg.substring(1);
                 if (arg.charAt(0) == '@') {
                     newArgs.add(arg);

@@ -75,60 +85,17 @@
                 newArgs.add(arg);
             }
         }
     }
 
-    /**
-     * 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 List<String> parse(String envVariable, List<String> args)
-            throws IOException, UnmatchedQuote {
-
-        List<String> inArgs = new ArrayList<>();
-        appendParsedEnvVariables(inArgs, envVariable);
-        inArgs.addAll(args);
-        List<String> newArgs = new ArrayList<>();
-        appendParsedCommandArgs(newArgs, inArgs);
-        return newArgs;
+    private static void loadCmdFile(String name, List<String> args)
+            throws IOException {
+        if (!Files.isReadable(Path.of(name))) {
+            throw new FileNotFoundException(name);
     }
-
-    /**
-     * 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<String> out = parse(envVariable, Arrays.asList(args));
-        return out.toArray(new String[out.size()]);
-    }
-
-    private static void loadCmdFile(String name, List<String> args) throws IOException {
-        try (Reader r = Files.newBufferedReader(Paths.get(name), Charset.defaultCharset())) {
+        try (Reader r = Files.newBufferedReader(Paths.get(name),
+                Charset.defaultCharset())) {
             Tokenizer t = new Tokenizer(r);
             String s;
             while ((s = t.nextToken()) != null) {
                 args.add(s);
             }

@@ -183,11 +150,13 @@
                         if (quoteChar != 0) {
                             ch = in.read();
                             switch (ch) {
                                 case '\n':
                                 case '\r':
-                                    while (ch == ' ' || ch == '\n' || ch == '\r' || ch == '\t' || ch == '\f') {
+                                    while (ch == ' ' || ch == '\n'
+                                            || ch == '\r' || ch == '\t'
+                                            || ch == '\f') {
                                         ch = in.read();
                                     }
                                     continue;
 
                                 case 'n':

@@ -240,77 +209,6 @@
 
                 ch = in.read();
             }
         }
     }
-
-    @SuppressWarnings("fallthrough")
-    private static void appendParsedEnvVariables(List<String> newArgs, String envVariable)
-            throws UnmatchedQuote {
-
-        if (envVariable == null) {
-            return;
-        }
-        String in = System.getenv(envVariable);
-        if (in == null || in.trim().isEmpty()) {
-            return;
-        }
-
-        final char NUL = (char)0;
-        final int len = in.length();
-
-        int pos = 0;
-        StringBuilder sb = new StringBuilder();
-        char quote = NUL;
-        char ch;
-
-        loop:
-        while (pos < len) {
-            ch = in.charAt(pos);
-            switch (ch) {
-                case '\"': case '\'':
-                    if (quote == NUL) {
-                        quote = ch;
-                    } else if (quote == ch) {
-                        quote = NUL;
-                    } else {
-                        sb.append(ch);
-                    }
-                    pos++;
-                    break;
-                case '\f': case '\n': case '\r': case '\t': case ' ':
-                    if (quote == NUL) {
-                        newArgs.add(sb.toString());
-                        sb.setLength(0);
-                        while (ch == '\f' || ch == '\n' || ch == '\r' || ch == '\t' || ch == ' ') {
-                            pos++;
-                            if (pos >= len) {
-                                break loop;
-                            }
-                            ch = in.charAt(pos);
-                        }
-                        break;
-                    }
-                    // fall through
-                default:
-                    sb.append(ch);
-                    pos++;
-            }
-        }
-        if (sb.length() != 0) {
-            newArgs.add(sb.toString());
-        }
-        if (quote != NUL) {
-            throw new UnmatchedQuote(envVariable);
-        }
-    }
-
-    public static class UnmatchedQuote extends Exception {
-        private static final long serialVersionUID = 0;
-
-        public final String variableName;
-
-        UnmatchedQuote(String variable) {
-            this.variableName = variable;
-        }
-    }
 }
< prev index next >