ANDROID: Port fix for JDK-8166379 to legacy javadoc code path.

Due to a bug [1] javadoc -source 1.9 --patch-module ... crashed 100% of the
time; this bug was fixed [2] in upstream OpenJDK 9 for the logic in
jdk.javadoc.internal. However, there is near-duplicate legacy logic in
com.sun.tools.javadoc for which the bug has not yet been fixed upstream;
this legacy logic is invoked when processing legacy doclets
implementations (such as Droiddoc) that do not extend the Doclet class.

This CL ports the upstream fix to the legacy code path; note that in the
legacy code, alias options (example: --class-path vs. -classpath vs. -cp)
are treated as logically separate options with their own names whereas
in the non-legacy codepath these have been refactored to be represented
as a single Option where one of those names (the first) is the "primaryName".

Test: In a local client with other patches applied to droiddoc.mk and
      droiddoc.go, "make docs" doesn't exhibit the early crash indicated
      in http://b/74381003#comment2 . There are currently still other
      blockers for droiddoc support for language level 9 sources, so a
      complete "make docs" run has not yet been completed.
Bug: 74381003

[1] https://bugs.openjdk.java.net/browse/JDK-8166379
[2] http://hg.openjdk.java.net/jdk9/dev/langtools/rev/ed2e9ef4ce42

Change-Id: I54fcecd12eab1595822f24b170a8511b7635c50a
diff --git a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/Start.java b/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/Start.java
index 86bf750..92d9583 100644
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/Start.java
+++ b/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/Start.java
@@ -580,6 +580,17 @@
             public void put(String name, String value) {
                 compOpts.put(name, value);
             }
+
+            @Override
+            public void remove(String name) {
+                compOpts.remove(name);
+            }
+
+            @Override
+            public boolean handleFileManagerOption(com.sun.tools.javac.main.Option option, String value) {
+                fileManagerOpts.put(option, value);
+               return true;
+            }
         };
     }
 }
diff --git a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/ToolOption.java b/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/ToolOption.java
index e84e659..7f70d9b 100644
--- a/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/ToolOption.java
+++ b/src/jdk.javadoc/share/classes/com/sun/tools/javadoc/main/ToolOption.java
@@ -51,92 +51,85 @@
 
     BOOTCLASSPATH("-bootclasspath", true) {
         @Override
-        public void process(Helper helper, String arg) {
-            helper.setFileManagerOpt(Option.BOOT_CLASS_PATH, arg);
+        public void process(Helper helper, String arg) throws InvalidValueException {
+            Option.BOOT_CLASS_PATH.process(helper.getOptionHelper(), opt, arg);
         }
     },
 
     CLASSPATH("-classpath", true) {
         @Override
-        public void process(Helper helper, String arg) {
-            helper.setFileManagerOpt(Option.CLASS_PATH, arg);
+        public void process(Helper helper, String arg) throws InvalidValueException {
+            Option.CLASS_PATH.process(helper.getOptionHelper(), opt, arg);
         }
     },
 
     CP("-cp", true) {
         @Override
-        public void process(Helper helper, String arg) {
-            helper.setFileManagerOpt(Option.CLASS_PATH, arg);
+        public void process(Helper helper, String arg) throws InvalidValueException {
+            Option.CLASS_PATH.process(helper.getOptionHelper(), opt, arg);
         }
     },
 
     CLASS_PATH("--class-path", true) {
         @Override
-        public void process(Helper helper, String arg) {
-            helper.setFileManagerOpt(Option.CLASS_PATH, arg);
+        public void process(Helper helper, String arg) throws InvalidValueException {
+            Option.CLASS_PATH.process(helper.getOptionHelper(), opt, arg);
         }
     },
 
     EXTDIRS("-extdirs", true) {
         @Override
-        public void process(Helper helper, String arg) {
-            helper.setFileManagerOpt(Option.EXTDIRS, arg);
+        public void process(Helper helper, String arg) throws InvalidValueException {
+            Option.EXTDIRS.process(helper.getOptionHelper(), opt, arg);
         }
     },
 
     SOURCEPATH("-sourcepath", true) {
         @Override
-        public void process(Helper helper, String arg) {
-            helper.setFileManagerOpt(Option.SOURCE_PATH, arg);
+        public void process(Helper helper, String arg) throws InvalidValueException {
+            Option.SOURCE_PATH.process(helper.getOptionHelper(), opt, arg);
         }
     },
 
     SOURCE_PATH("--source-path", true) {
         @Override
-        public void process(Helper helper, String arg) {
-            helper.setFileManagerOpt(Option.SOURCE_PATH, arg);
-        }
-    },
-
-    SYSCLASSPATH("-sysclasspath", true) {
-        @Override
-        public void process(Helper helper, String arg) {
-            helper.setFileManagerOpt(Option.BOOT_CLASS_PATH, arg);
+        public void process(Helper helper, String arg) throws InvalidValueException {
+            Option.SOURCE_PATH.process(helper.getOptionHelper(), opt, arg);
         }
     },
 
     MODULE_SOURCE_PATH("--module-source-path", true) {
         @Override
-        public void process(Helper helper, String arg) {
-            helper.setFileManagerOpt(Option.MODULE_SOURCE_PATH, arg);
+        public void process(Helper helper, String arg) throws InvalidValueException {
+            Option.MODULE_SOURCE_PATH.process(helper.getOptionHelper(), opt, arg);
         }
     },
 
     UPGRADE_MODULE_PATH("--upgrade-module-path", true) {
         @Override
-        public void process(Helper helper, String arg) {
-            helper.setFileManagerOpt(Option.UPGRADE_MODULE_PATH, arg);
+        public void process(Helper helper, String arg) throws InvalidValueException {
+            Option.UPGRADE_MODULE_PATH.process(helper.getOptionHelper(), opt, arg);
         }
     },
 
     SYSTEM_("--system", true) {
         @Override
-        public void process(Helper helper, String arg) {
-            helper.setFileManagerOpt(Option.SYSTEM, arg);
+        public void process(Helper helper, String arg) throws InvalidValueException {
+            Option.SYSTEM.process(helper.getOptionHelper(), opt, arg);
         }
     },
 
     MODULE_PATH("--module-path", true) {
         @Override
-        public void process(Helper helper, String arg) {
-            helper.setFileManagerOpt(Option.MODULE_PATH, arg);
+        public void process(Helper helper, String arg) throws InvalidValueException {
+            Option.MODULE_PATH.process(helper.getOptionHelper(), opt, arg);
         }
     },
 
     P("-p", true) {
         @Override
-        public void process(Helper helper, String arg) {
-            helper.setFileManagerOpt(Option.MODULE_PATH, arg);
+        public void process(Helper helper, String arg) throws InvalidValueException {
+            Option.MODULE_PATH.process(helper.getOptionHelper(), opt, arg);
         }
     },
 
@@ -156,37 +149,36 @@
 
     ENCODING("-encoding", true) {
         @Override
-        public void process(Helper helper, String arg) {
-            helper.encoding = arg;
-            helper.setCompilerOpt(opt, arg);
+        public void process(Helper helper, String arg) throws InvalidValueException {
+            Option.ENCODING.process(helper.getOptionHelper(), opt, arg);
         }
     },
 
     RELEASE("--release", true) {
         @Override
-        public void process(Helper helper, String arg) {
-            helper.setCompilerOpt(opt, arg);
+        public void process(Helper helper, String arg) throws InvalidValueException {
+            Option.RELEASE.process(helper.getOptionHelper(), opt, arg);
         }
     },
 
     SOURCE("-source", true) {
         @Override
-        public void process(Helper helper, String arg) {
-            helper.setCompilerOpt(opt, arg);
+        public void process(Helper helper, String arg) throws InvalidValueException {
+            Option.SOURCE.process(helper.getOptionHelper(), opt, arg);
         }
     },
 
     XMAXERRS("-Xmaxerrs", true) {
         @Override
-        public void process(Helper helper, String arg) {
-            helper.setCompilerOpt(opt, arg);
+        public void process(Helper helper, String arg) throws InvalidValueException {
+            Option.XMAXERRS.process(helper.getOptionHelper(), opt, arg);
         }
     },
 
     XMAXWARNS("-Xmaxwarns", true) {
         @Override
-        public void process(Helper helper, String arg) {
-            helper.setCompilerOpt(opt, arg);
+        public void process(Helper helper, String arg) throws InvalidValueException {
+            Option.XMAXWARNS.process(helper.getOptionHelper(), opt, arg);
         }
     },