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 }