1 /*
   2  * Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package com.sun.tools.javadoc.main;
  27 
  28 import java.util.LinkedHashMap;
  29 import java.util.Map;
  30 import java.util.StringTokenizer;
  31 
  32 import com.sun.tools.javac.code.Flags;
  33 import com.sun.tools.javac.main.Option;
  34 import com.sun.tools.javac.main.OptionHelper;
  35 import com.sun.tools.javac.util.ListBuffer;
  36 import com.sun.tools.javac.util.Options;
  37 
  38 
  39 /**
  40  * javadoc tool options.
  41  *
  42  *  <p><b>This is NOT part of any supported API.
  43  *  If you write code that depends on this, you do so at your own risk.
  44  *  This code and its internal interfaces are subject to change or
  45  *  deletion without notice.</b>
  46  */
  47 @Deprecated
  48 public enum ToolOption {
  49     // ----- options for underlying compiler -----
  50 
  51     BOOTCLASSPATH("-bootclasspath", true) {
  52         @Override
  53         public void process(Helper helper, String arg) {
  54             helper.setFileManagerOpt(Option.BOOT_CLASS_PATH, arg);
  55         }
  56     },
  57 
  58     CLASSPATH("-classpath", true) {
  59         @Override
  60         public void process(Helper helper, String arg) {
  61             helper.setFileManagerOpt(Option.CLASS_PATH, arg);
  62         }
  63     },
  64 
  65     CP("-cp", true) {
  66         @Override
  67         public void process(Helper helper, String arg) {
  68             helper.setFileManagerOpt(Option.CLASS_PATH, arg);
  69         }
  70     },
  71 
  72     CLASS_PATH("--class-path", true) {
  73         @Override
  74         public void process(Helper helper, String arg) {
  75             helper.setFileManagerOpt(Option.CLASS_PATH, arg);
  76         }
  77     },
  78 
  79     EXTDIRS("-extdirs", true) {
  80         @Override
  81         public void process(Helper helper, String arg) {
  82             helper.setFileManagerOpt(Option.EXTDIRS, arg);
  83         }
  84     },
  85 
  86     SOURCEPATH("-sourcepath", true) {
  87         @Override
  88         public void process(Helper helper, String arg) {
  89             helper.setFileManagerOpt(Option.SOURCE_PATH, arg);
  90         }
  91     },
  92 
  93     SOURCE_PATH("--source-path", true) {
  94         @Override
  95         public void process(Helper helper, String arg) {
  96             helper.setFileManagerOpt(Option.SOURCE_PATH, arg);
  97         }
  98     },
  99 
 100     SYSCLASSPATH("-sysclasspath", true) {
 101         @Override
 102         public void process(Helper helper, String arg) {
 103             helper.setFileManagerOpt(Option.BOOT_CLASS_PATH, arg);
 104         }
 105     },
 106 
 107     MODULE_SOURCE_PATH("--module-source-path", true) {
 108         @Override
 109         public void process(Helper helper, String arg) {
 110             helper.setFileManagerOpt(Option.MODULE_SOURCE_PATH, arg);
 111         }
 112     },
 113 
 114     UPGRADE_MODULE_PATH("--upgrade-module-path", true) {
 115         @Override
 116         public void process(Helper helper, String arg) {
 117             helper.setFileManagerOpt(Option.UPGRADE_MODULE_PATH, arg);
 118         }
 119     },
 120 
 121     SYSTEM_("--system", true) {
 122         @Override
 123         public void process(Helper helper, String arg) {
 124             helper.setFileManagerOpt(Option.SYSTEM, arg);
 125         }
 126     },
 127 
 128     MODULE_PATH("--module-path", true) {
 129         @Override
 130         public void process(Helper helper, String arg) {
 131             helper.setFileManagerOpt(Option.MODULE_PATH, arg);
 132         }
 133     },
 134 
 135     P("-p", true) {
 136         @Override
 137         public void process(Helper helper, String arg) {
 138             helper.setFileManagerOpt(Option.MODULE_PATH, arg);
 139         }
 140     },
 141 
 142     ADD_MODULES("--add-modules", true) {
 143         @Override
 144         public void process(Helper helper, String arg) {
 145             Option.ADD_MODULES.process(helper.getOptionHelper(), opt, arg);
 146         }
 147     },
 148 
 149     LIMIT_MODULES("--limit-modules", true) {
 150         @Override
 151         public void process(Helper helper, String arg) {
 152             Option.LIMIT_MODULES.process(helper.getOptionHelper(), opt, arg);
 153         }
 154     },
 155 
 156     ENCODING("-encoding", true) {
 157         @Override
 158         public void process(Helper helper, String arg) {
 159             helper.encoding = arg;
 160             helper.setCompilerOpt(opt, arg);
 161         }
 162     },
 163 
 164     RELEASE("--release", true) {
 165         @Override
 166         public void process(Helper helper, String arg) {
 167             helper.setCompilerOpt(opt, arg);
 168         }
 169     },
 170 
 171     SOURCE("-source", true) {
 172         @Override
 173         public void process(Helper helper, String arg) {
 174             helper.setCompilerOpt(opt, arg);
 175         }
 176     },
 177 
 178     XMAXERRS("-Xmaxerrs", true) {
 179         @Override
 180         public void process(Helper helper, String arg) {
 181             helper.setCompilerOpt(opt, arg);
 182         }
 183     },
 184 
 185     XMAXWARNS("-Xmaxwarns", true) {
 186         @Override
 187         public void process(Helper helper, String arg) {
 188             helper.setCompilerOpt(opt, arg);
 189         }
 190     },
 191 
 192     ADD_READS("--add-reads", true) {
 193         @Override
 194         public void process(Helper helper, String arg) {
 195             Option.ADD_READS.process(helper.getOptionHelper(), opt, arg);
 196         }
 197     },
 198 
 199     ADD_EXPORTS("--add-exports", true) {
 200         @Override
 201         public void process(Helper helper, String arg) {
 202             Option.ADD_EXPORTS.process(helper.getOptionHelper(), opt, arg);
 203         }
 204     },
 205 
 206     XMODULE("-Xmodule:", false) {
 207         @Override
 208         public void process(Helper helper, String arg) {
 209             Option.XMODULE.process(helper.getOptionHelper(), arg);
 210         }
 211     },
 212 
 213     PATCH_MODULE("--patch-module", true) {
 214         @Override
 215         public void process(Helper helper, String arg) {
 216             Option.PATCH_MODULE.process(helper.getOptionHelper(), opt, arg);
 217         }
 218     },
 219 
 220     // ----- doclet options -----
 221 
 222     DOCLET("-doclet", true), // handled in setDocletInvoker
 223 
 224     DOCLETPATH("-docletpath", true), // handled in setDocletInvoker
 225 
 226     // ----- selection options -----
 227 
 228     SUBPACKAGES("-subpackages", true) {
 229         @Override
 230         public void process(Helper helper, String arg) {
 231             helper.addToList(helper.subPackages, arg);
 232         }
 233     },
 234 
 235     EXCLUDE("-exclude", true) {
 236         @Override
 237         public void process(Helper helper, String arg) {
 238             helper.addToList(helper.excludedPackages, arg);
 239         }
 240     },
 241 
 242     // ----- filtering options -----
 243 
 244     PACKAGE("-package") {
 245         @Override
 246         public void process(Helper helper) {
 247             helper.setFilter(
 248                     Flags.PUBLIC | Flags.PROTECTED | ModifierFilter.PACKAGE);
 249         }
 250     },
 251 
 252     PRIVATE("-private") {
 253         @Override
 254         public void process(Helper helper) {
 255             helper.setFilter(ModifierFilter.ALL_ACCESS);
 256         }
 257     },
 258 
 259     PROTECTED("-protected") {
 260         @Override
 261         public void process(Helper helper) {
 262             helper.setFilter(Flags.PUBLIC | Flags.PROTECTED);
 263         }
 264     },
 265 
 266     PUBLIC("-public") {
 267         @Override
 268         public void process(Helper helper) {
 269             helper.setFilter(Flags.PUBLIC);
 270         }
 271     },
 272 
 273     // ----- output control options -----
 274 
 275     PROMPT("-prompt") {
 276         @Override
 277         public void process(Helper helper) {
 278             helper.compOpts.put("-prompt", "-prompt");
 279             helper.promptOnError = true;
 280         }
 281     },
 282 
 283     QUIET("-quiet") {
 284         @Override
 285         public void process(Helper helper) {
 286             helper.quiet = true;
 287         }
 288     },
 289 
 290     VERBOSE("-verbose") {
 291         @Override
 292         public void process(Helper helper) {
 293             helper.compOpts.put("-verbose", "");
 294         }
 295     },
 296 
 297     XWERROR("-Xwerror") {
 298         @Override
 299         public void process(Helper helper) {
 300             helper.rejectWarnings = true;
 301 
 302         }
 303     },
 304 
 305     // ----- other options -----
 306 
 307     BREAKITERATOR("-breakiterator") {
 308         @Override
 309         public void process(Helper helper) {
 310             helper.breakiterator = true;
 311         }
 312     },
 313 
 314     LOCALE("-locale", true) {
 315         @Override
 316         public void process(Helper helper, String arg) {
 317             helper.docLocale = arg;
 318         }
 319     },
 320 
 321     OVERVIEW("-overview", true),
 322 
 323     XCLASSES("-Xclasses") {
 324         @Override
 325         public void process(Helper helper) {
 326             helper.docClasses = true;
 327 
 328         }
 329     },
 330 
 331     // ----- help options -----
 332 
 333     HELP("-help") {
 334         @Override
 335         public void process(Helper helper) {
 336             helper.usage();
 337         }
 338     },
 339 
 340     X("-X") {
 341         @Override
 342         public void process(Helper helper) {
 343             helper.Xusage();
 344         }
 345     };
 346 
 347     public final String opt;
 348     public final boolean hasArg;
 349 
 350     ToolOption(String opt) {
 351         this(opt, false);
 352     }
 353 
 354     ToolOption(String opt, boolean hasArg) {
 355         this.opt = opt;
 356         this.hasArg = hasArg;
 357     }
 358 
 359     void process(Helper helper, String arg) { }
 360 
 361     void process(Helper helper) { }
 362 
 363     static ToolOption get(String name) {
 364         for (ToolOption o: values()) {
 365             if (name.equals(o.opt))
 366                 return o;
 367         }
 368         return null;
 369     }
 370 
 371     static abstract class Helper {
 372         /** List of decoded options. */
 373         final ListBuffer<String[]> options = new ListBuffer<>();
 374 
 375         /** Selected packages, from -subpackages. */
 376         final ListBuffer<String> subPackages = new ListBuffer<>();
 377 
 378         /** Excluded packages, from -exclude. */
 379         final ListBuffer<String> excludedPackages = new ListBuffer<>();
 380 
 381         // File manager options
 382         final Map<Option, String> fileManagerOpts = new LinkedHashMap<>();
 383 
 384         /** javac options, set by various options. */
 385         Options compOpts; // = Options.instance(context)
 386 
 387         /* Encoding for javac, and files written? set by -encoding. */
 388         String encoding = null;
 389 
 390         /** Set by -breakiterator. */
 391         boolean breakiterator = false;
 392 
 393         /** Set by -quiet. */
 394         boolean quiet = false;
 395 
 396         /** Set by -Xclasses. */
 397         boolean docClasses = false;
 398 
 399         /** Set by -Xwerror. */
 400         boolean rejectWarnings = false;
 401 
 402         /** Set by -prompt. */
 403         boolean promptOnError;
 404 
 405         /** Set by -locale. */
 406         String docLocale = "";
 407 
 408         /** Set by -public, private, -protected, -package. */
 409         ModifierFilter showAccess = null;
 410 
 411         abstract void usage();
 412         abstract void Xusage();
 413 
 414         abstract void usageError(String msg, Object... args);
 415         abstract OptionHelper getOptionHelper();
 416 
 417         void addToList(ListBuffer<String> list, String str){
 418             StringTokenizer st = new StringTokenizer(str, ":");
 419             String current;
 420             while(st.hasMoreTokens()){
 421                 current = st.nextToken();
 422                 list.append(current);
 423             }
 424         }
 425 
 426         void setFilter(long filterBits) {
 427             if (showAccess != null) {
 428                 usageError("main.incompatible.access.flags");
 429             }
 430             showAccess = new ModifierFilter(filterBits);
 431         }
 432 
 433         void setCompilerOpt(String opt, String arg) {
 434             if (compOpts.get(opt) != null) {
 435                 usageError("main.option.already.seen", opt);
 436             }
 437             compOpts.put(opt, arg);
 438         }
 439 
 440         void setFileManagerOpt(Option opt, String arg) {
 441             fileManagerOpts.put(opt, arg);
 442         }
 443     }
 444 }