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