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 }