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     MODULESOURCEPATH("-modulesourcepath", true) {
 108         @Override
 109         public void process(Helper helper, String arg) {
 110             helper.setFileManagerOpt(Option.MODULE_SOURCE_PATH, arg);
 111         }
 112     },
 113 
 114     MODULE_SOURCE_PATH("--module-source-path", true) {
 115         @Override
 116         public void process(Helper helper, String arg) {
 117             helper.setFileManagerOpt(Option.MODULE_SOURCE_PATH, arg);
 118         }
 119     },
 120 
 121     UPGRADEMODULEPATH("-upgrademodulepath", true) {
 122         @Override
 123         public void process(Helper helper, String arg) {
 124             helper.setFileManagerOpt(Option.UPGRADE_MODULE_PATH, arg);
 125         }
 126     },
 127 
 128     UPGRADE_MODULE_PATH("--upgrade-module-path", true) {
 129         @Override
 130         public void process(Helper helper, String arg) {
 131             helper.setFileManagerOpt(Option.UPGRADE_MODULE_PATH, arg);
 132         }
 133     },
 134 
 135     SYSTEM("-system", true) {
 136         @Override
 137         public void process(Helper helper, String arg) {
 138             helper.setFileManagerOpt(Option.SYSTEM, arg);
 139         }
 140     },
 141 
 142     SYSTEM_("--system", true) {
 143         @Override
 144         public void process(Helper helper, String arg) {
 145             helper.setFileManagerOpt(Option.SYSTEM, arg);
 146         }
 147     },
 148 
 149     MODULEPATH("-modulepath", true) {
 150         @Override
 151         public void process(Helper helper, String arg) {
 152             helper.setFileManagerOpt(Option.MODULE_PATH, arg);
 153         }
 154     },
 155 
 156     MODULE_PATH("--module-path", true) {
 157         @Override
 158         public void process(Helper helper, String arg) {
 159             helper.setFileManagerOpt(Option.MODULE_PATH, arg);
 160         }
 161     },
 162 
 163     P("-p", true) {
 164         @Override
 165         public void process(Helper helper, String arg) {
 166             helper.setFileManagerOpt(Option.MODULE_PATH, arg);
 167         }
 168     },
 169 
 170     ADDMODS("-addmods", true) {
 171         @Override
 172         public void process(Helper helper, String arg) {
 173             helper.setCompilerOpt(opt, arg);
 174         }
 175     },
 176 
 177     ADD_MODULES("--add-modules", true) {
 178         @Override
 179         public void process(Helper helper, String arg) {
 180             Option.ADD_MODULES.process(helper.getOptionHelper(), opt, arg);
 181         }
 182     },
 183 
 184     LIMITMODS("-limitmods", true) {
 185         @Override
 186         public void process(Helper helper, String arg) {
 187             helper.setCompilerOpt(opt, arg);
 188         }
 189     },
 190 
 191     LIMIT_MODULES("--limit-modules", true) {
 192         @Override
 193         public void process(Helper helper, String arg) {
 194             Option.LIMIT_MODULES.process(helper.getOptionHelper(), opt, arg);
 195         }
 196     },
 197 
 198     ENCODING("-encoding", true) {
 199         @Override
 200         public void process(Helper helper, String arg) {
 201             helper.encoding = arg;
 202             helper.setCompilerOpt(opt, arg);
 203         }
 204     },
 205 
 206     RELEASE("--release", true) {
 207         @Override
 208         public void process(Helper helper, String arg) {
 209             helper.setCompilerOpt(opt, arg);
 210         }
 211     },
 212 
 213     RELEASE_OLD("-release", true) {
 214         @Override
 215         public void process(Helper helper, String arg) {
 216             helper.setCompilerOpt("--release", arg);
 217         }
 218     },
 219 
 220     SOURCE("-source", true) {
 221         @Override
 222         public void process(Helper helper, String arg) {
 223             helper.setCompilerOpt(opt, arg);
 224         }
 225     },
 226 
 227     XMAXERRS("-Xmaxerrs", true) {
 228         @Override
 229         public void process(Helper helper, String arg) {
 230             helper.setCompilerOpt(opt, arg);
 231         }
 232     },
 233 
 234     XMAXWARNS("-Xmaxwarns", true) {
 235         @Override
 236         public void process(Helper helper, String arg) {
 237             helper.setCompilerOpt(opt, arg);
 238         }
 239     },
 240 
 241     XADDREADS("-XaddReads:", false) {
 242         @Override
 243         public void process(Helper helper, String arg) {
 244             Option.ADD_READS.process(helper.getOptionHelper(), arg);
 245         }
 246     },
 247 
 248     ADD_READS("--add-reads", true) {
 249         @Override
 250         public void process(Helper helper, String arg) {
 251             Option.ADD_READS.process(helper.getOptionHelper(), opt, arg);
 252         }
 253     },
 254 
 255     ADDEXPORTS("-XaddExports:", false) {
 256         @Override
 257         public void process(Helper helper, String arg) {
 258             Option.ADD_EXPORTS.process(helper.getOptionHelper(), arg);
 259         }
 260     },
 261 
 262     ADD_EXPORTS("--add-exports", true) {
 263         @Override
 264         public void process(Helper helper, String arg) {
 265             Option.ADD_EXPORTS.process(helper.getOptionHelper(), opt, arg);
 266         }
 267     },
 268 
 269     XMODULE("-Xmodule:", false) {
 270         @Override
 271         public void process(Helper helper, String arg) {
 272             Option.XMODULE.process(helper.getOptionHelper(), arg);
 273         }
 274     },
 275 
 276     XPATCH("-Xpatch:", false) {
 277         @Override
 278         public void process(Helper helper, String arg) {
 279             Option.XMODULE.process(helper.getOptionHelper(), arg);
 280         }
 281     },
 282 
 283     PATCH_MODULE("--patch-module", true) {
 284         @Override
 285         public void process(Helper helper, String arg) {
 286             Option.PATCH_MODULE.process(helper.getOptionHelper(), opt, arg);
 287         }
 288     },
 289 
 290     // ----- doclet options -----
 291 
 292     DOCLET("-doclet", true), // handled in setDocletInvoker
 293 
 294     DOCLETPATH("-docletpath", true), // handled in setDocletInvoker
 295 
 296     // ----- selection options -----
 297 
 298     SUBPACKAGES("-subpackages", true) {
 299         @Override
 300         public void process(Helper helper, String arg) {
 301             helper.addToList(helper.subPackages, arg);
 302         }
 303     },
 304 
 305     EXCLUDE("-exclude", true) {
 306         @Override
 307         public void process(Helper helper, String arg) {
 308             helper.addToList(helper.excludedPackages, arg);
 309         }
 310     },
 311 
 312     // ----- filtering options -----
 313 
 314     PACKAGE("-package") {
 315         @Override
 316         public void process(Helper helper) {
 317             helper.setFilter(
 318                     Flags.PUBLIC | Flags.PROTECTED | ModifierFilter.PACKAGE);
 319         }
 320     },
 321 
 322     PRIVATE("-private") {
 323         @Override
 324         public void process(Helper helper) {
 325             helper.setFilter(ModifierFilter.ALL_ACCESS);
 326         }
 327     },
 328 
 329     PROTECTED("-protected") {
 330         @Override
 331         public void process(Helper helper) {
 332             helper.setFilter(Flags.PUBLIC | Flags.PROTECTED);
 333         }
 334     },
 335 
 336     PUBLIC("-public") {
 337         @Override
 338         public void process(Helper helper) {
 339             helper.setFilter(Flags.PUBLIC);
 340         }
 341     },
 342 
 343     // ----- output control options -----
 344 
 345     PROMPT("-prompt") {
 346         @Override
 347         public void process(Helper helper) {
 348             helper.compOpts.put("-prompt", "-prompt");
 349             helper.promptOnError = true;
 350         }
 351     },
 352 
 353     QUIET("-quiet") {
 354         @Override
 355         public void process(Helper helper) {
 356             helper.quiet = true;
 357         }
 358     },
 359 
 360     VERBOSE("-verbose") {
 361         @Override
 362         public void process(Helper helper) {
 363             helper.compOpts.put("-verbose", "");
 364         }
 365     },
 366 
 367     XWERROR("-Xwerror") {
 368         @Override
 369         public void process(Helper helper) {
 370             helper.rejectWarnings = true;
 371 
 372         }
 373     },
 374 
 375     // ----- other options -----
 376 
 377     BREAKITERATOR("-breakiterator") {
 378         @Override
 379         public void process(Helper helper) {
 380             helper.breakiterator = true;
 381         }
 382     },
 383 
 384     LOCALE("-locale", true) {
 385         @Override
 386         public void process(Helper helper, String arg) {
 387             helper.docLocale = arg;
 388         }
 389     },
 390 
 391     OVERVIEW("-overview", true),
 392 
 393     XCLASSES("-Xclasses") {
 394         @Override
 395         public void process(Helper helper) {
 396             helper.docClasses = true;
 397 
 398         }
 399     },
 400 
 401     // ----- help options -----
 402 
 403     HELP("-help") {
 404         @Override
 405         public void process(Helper helper) {
 406             helper.usage();
 407         }
 408     },
 409 
 410     X("-X") {
 411         @Override
 412         public void process(Helper helper) {
 413             helper.Xusage();
 414         }
 415     };
 416 
 417     public final String opt;
 418     public final boolean hasArg;
 419 
 420     ToolOption(String opt) {
 421         this(opt, false);
 422     }
 423 
 424     ToolOption(String opt, boolean hasArg) {
 425         this.opt = opt;
 426         this.hasArg = hasArg;
 427     }
 428 
 429     void process(Helper helper, String arg) { }
 430 
 431     void process(Helper helper) { }
 432 
 433     static ToolOption get(String name) {
 434         for (ToolOption o: values()) {
 435             if (name.equals(o.opt))
 436                 return o;
 437         }
 438         return null;
 439     }
 440 
 441     static abstract class Helper {
 442         /** List of decoded options. */
 443         final ListBuffer<String[]> options = new ListBuffer<>();
 444 
 445         /** Selected packages, from -subpackages. */
 446         final ListBuffer<String> subPackages = new ListBuffer<>();
 447 
 448         /** Excluded packages, from -exclude. */
 449         final ListBuffer<String> excludedPackages = new ListBuffer<>();
 450 
 451         // File manager options
 452         final Map<Option, String> fileManagerOpts = new LinkedHashMap<>();
 453 
 454         /** javac options, set by various options. */
 455         Options compOpts; // = Options.instance(context)
 456 
 457         /* Encoding for javac, and files written? set by -encoding. */
 458         String encoding = null;
 459 
 460         /** Set by -breakiterator. */
 461         boolean breakiterator = false;
 462 
 463         /** Set by -quiet. */
 464         boolean quiet = false;
 465 
 466         /** Set by -Xclasses. */
 467         boolean docClasses = false;
 468 
 469         /** Set by -Xwerror. */
 470         boolean rejectWarnings = false;
 471 
 472         /** Set by -prompt. */
 473         boolean promptOnError;
 474 
 475         /** Set by -locale. */
 476         String docLocale = "";
 477 
 478         /** Set by -public, private, -protected, -package. */
 479         ModifierFilter showAccess = null;
 480 
 481         abstract void usage();
 482         abstract void Xusage();
 483 
 484         abstract void usageError(String msg, Object... args);
 485         abstract OptionHelper getOptionHelper();
 486 
 487         void addToList(ListBuffer<String> list, String str){
 488             StringTokenizer st = new StringTokenizer(str, ":");
 489             String current;
 490             while(st.hasMoreTokens()){
 491                 current = st.nextToken();
 492                 list.append(current);
 493             }
 494         }
 495 
 496         void setFilter(long filterBits) {
 497             if (showAccess != null) {
 498                 usageError("main.incompatible.access.flags");
 499             }
 500             showAccess = new ModifierFilter(filterBits);
 501         }
 502 
 503         void setCompilerOpt(String opt, String arg) {
 504             if (compOpts.get(opt) != null) {
 505                 usageError("main.option.already.seen", opt);
 506             }
 507             compOpts.put(opt, arg);
 508         }
 509 
 510         void setFileManagerOpt(Option opt, String arg) {
 511             fileManagerOpts.put(opt, arg);
 512         }
 513     }
 514 }