ToolOption.java revision 3233:b5d08bc0d224
1221828Sgrehan/* 2221828Sgrehan * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved. 3221828Sgrehan * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4221828Sgrehan * 5221828Sgrehan * This code is free software; you can redistribute it and/or modify it 6221828Sgrehan * under the terms of the GNU General Public License version 2 only, as 7221828Sgrehan * published by the Free Software Foundation. Oracle designates this 8221828Sgrehan * particular file as subject to the "Classpath" exception as provided 9221828Sgrehan * by Oracle in the LICENSE file that accompanied this code. 10221828Sgrehan * 11221828Sgrehan * This code is distributed in the hope that it will be useful, but WITHOUT 12221828Sgrehan * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13221828Sgrehan * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14221828Sgrehan * version 2 for more details (a copy is included in the LICENSE file that 15221828Sgrehan * accompanied this code). 16221828Sgrehan * 17221828Sgrehan * You should have received a copy of the GNU General Public License version 18221828Sgrehan * 2 along with this work; if not, write to the Free Software Foundation, 19221828Sgrehan * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20221828Sgrehan * 21221828Sgrehan * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22221828Sgrehan * or visit www.oracle.com if you need additional information or have any 23221828Sgrehan * questions. 24221828Sgrehan */ 25221828Sgrehan 26221828Sgrehanpackage jdk.javadoc.internal.tool; 27221828Sgrehan 28221828Sgrehanimport java.util.ArrayList; 29221828Sgrehanimport java.util.LinkedHashMap; 30221828Sgrehanimport java.util.List; 31221828Sgrehanimport java.util.Map; 32221828Sgrehanimport java.util.StringTokenizer; 33221828Sgrehan 34221828Sgrehanimport com.sun.tools.javac.main.Option; 35221828Sgrehanimport com.sun.tools.javac.util.Options; 36221828Sgrehan 37221828Sgrehan/** 38221828Sgrehan * javadoc tool options. 39221828Sgrehan * 40221828Sgrehan * <p><b>This is NOT part of any supported API. 41221828Sgrehan * If you write code that depends on this, you do so at your own risk. 42221828Sgrehan * This code and its internal interfaces are subject to change or 43240922Sneel * deletion without notice.</b> 44240922Sneel */ 45221828Sgrehanpublic enum ToolOption { 46221828Sgrehan // ----- options for underlying compiler ----- 47221828Sgrehan 48240894Sneel BOOTCLASSPATH("-bootclasspath", true) { 49221828Sgrehan @Override 50241147Sneel public void process(Helper helper, String arg) { 51241147Sneel helper.setFileManagerOpt(Option.BOOTCLASSPATH, arg); 52241147Sneel } 53241147Sneel }, 54241147Sneel 55221828Sgrehan CLASSPATH("-classpath", true) { 56221828Sgrehan @Override 57221828Sgrehan public void process(Helper helper, String arg) { 58221828Sgrehan helper.setFileManagerOpt(Option.CLASSPATH, arg); 59221828Sgrehan } 60221828Sgrehan }, 61221828Sgrehan 62221828Sgrehan CP("-cp", true) { 63221828Sgrehan @Override 64221828Sgrehan public void process(Helper helper, String arg) { 65221828Sgrehan helper.setFileManagerOpt(Option.CP, arg); 66221828Sgrehan } 67221828Sgrehan }, 68221828Sgrehan 69221828Sgrehan EXTDIRS("-extdirs", true) { 70221828Sgrehan @Override 71221828Sgrehan public void process(Helper helper, String arg) { 72221828Sgrehan helper.setFileManagerOpt(Option.EXTDIRS, arg); 73221828Sgrehan } 74221828Sgrehan }, 75221828Sgrehan 76241147Sneel SOURCEPATH("-sourcepath", true) { 77241147Sneel @Override 78221828Sgrehan public void process(Helper helper, String arg) { 79221828Sgrehan helper.setFileManagerOpt(Option.SOURCEPATH, arg); 80221828Sgrehan } 81221828Sgrehan }, 82221828Sgrehan 83221828Sgrehan SYSCLASSPATH("-sysclasspath", true) { 84221828Sgrehan @Override 85221828Sgrehan public void process(Helper helper, String arg) { 86221828Sgrehan helper.setFileManagerOpt(Option.BOOTCLASSPATH, arg); 87221828Sgrehan } 88221828Sgrehan }, 89221828Sgrehan 90221828Sgrehan ENCODING("-encoding", true) { 91221828Sgrehan @Override 92221828Sgrehan public void process(Helper helper, String arg) { 93241041Sneel helper.encoding = arg; 94221828Sgrehan helper.setCompilerOpt(opt, arg); 95221828Sgrehan } 96221828Sgrehan }, 97221828Sgrehan 98221828Sgrehan RELEASE("-release", true) { 99221828Sgrehan @Override 100221828Sgrehan public void process(Helper helper, String arg) { 101221828Sgrehan helper.setCompilerOpt(opt, arg); 102221828Sgrehan } 103221828Sgrehan }, 104221828Sgrehan 105221828Sgrehan SOURCE("-source", true) { 106221828Sgrehan @Override 107221828Sgrehan public void process(Helper helper, String arg) { 108221828Sgrehan helper.setCompilerOpt(opt, arg); 109221828Sgrehan } 110221828Sgrehan }, 111241982Sneel 112241982Sneel XMAXERRS("-Xmaxerrs", true) { 113221828Sgrehan @Override 114221828Sgrehan public void process(Helper helper, String arg) { 115221828Sgrehan helper.setCompilerOpt(opt, arg); 116221828Sgrehan } 117240922Sneel }, 118240922Sneel 119221828Sgrehan XMAXWARNS("-Xmaxwarns", true) { 120223621Sgrehan @Override 121240894Sneel public void process(Helper helper, String arg) { 122221828Sgrehan helper.setCompilerOpt(opt, arg); 123221828Sgrehan } 124221828Sgrehan }, 125221828Sgrehan 126221828Sgrehan // ----- doclet options ----- 127221828Sgrehan 128221828Sgrehan DOCLET("-doclet", true), // handled in setDocletInvoker 129221828Sgrehan 130221828Sgrehan DOCLETPATH("-docletpath", true), // handled in setDocletInvoker 131221828Sgrehan 132221828Sgrehan // ----- selection options ----- 133241489Sneel 134241489Sneel SUBPACKAGES("-subpackages", true) { 135241489Sneel @Override 136241489Sneel public void process(Helper helper, String arg) { 137241489Sneel helper.addToList(helper.subPackages, arg); 138221828Sgrehan } 139241489Sneel }, 140241489Sneel 141221828Sgrehan EXCLUDE("-exclude", true) { 142221828Sgrehan @Override 143241489Sneel public void process(Helper helper, String arg) { 144221828Sgrehan helper.addToList(helper.excludedPackages, arg); 145241489Sneel } 146221828Sgrehan }, 147221828Sgrehan 148241489Sneel // ----- filtering options ----- 149241489Sneel 150241489Sneel PACKAGE("-package") { 151221828Sgrehan @Override 152221828Sgrehan public void process(Helper helper) { 153221828Sgrehan helper.setFilter("package"); 154221828Sgrehan } 155221828Sgrehan }, 156221828Sgrehan 157221828Sgrehan PRIVATE("-private") { 158221828Sgrehan @Override 159221828Sgrehan public void process(Helper helper) { 160221828Sgrehan helper.setFilter("private"); 161221828Sgrehan } 162221828Sgrehan }, 163221828Sgrehan 164221828Sgrehan PROTECTED("-protected") { 165221828Sgrehan @Override 166221828Sgrehan public void process(Helper helper) { 167221828Sgrehan helper.setFilter("protected"); 168221828Sgrehan } 169221828Sgrehan }, 170221828Sgrehan 171221828Sgrehan PUBLIC("-public") { 172221828Sgrehan @Override 173221828Sgrehan public void process(Helper helper) { 174221828Sgrehan helper.setFilter("public"); 175221828Sgrehan } 176221828Sgrehan }, 177221828Sgrehan 178221828Sgrehan // ----- output control options ----- 179221828Sgrehan 180221828Sgrehan PROMPT("-prompt") { 181221828Sgrehan @Override 182221828Sgrehan public void process(Helper helper) { 183221828Sgrehan helper.compOpts.put("-prompt", "-prompt"); 184221828Sgrehan helper.promptOnError = true; 185221828Sgrehan } 186221828Sgrehan }, 187221828Sgrehan 188221828Sgrehan QUIET("-quiet") { 189221828Sgrehan @Override 190221828Sgrehan public void process(Helper helper) { 191221828Sgrehan helper.quiet = true; 192221828Sgrehan } 193221828Sgrehan }, 194221828Sgrehan 195221828Sgrehan VERBOSE("-verbose") { 196221828Sgrehan @Override 197221828Sgrehan public void process(Helper helper) { 198221828Sgrehan helper.compOpts.put("-verbose", ""); 199221828Sgrehan } 200221828Sgrehan }, 201221828Sgrehan 202221828Sgrehan XWERROR("-Xwerror") { 203221828Sgrehan @Override 204221828Sgrehan public void process(Helper helper) { 205221828Sgrehan helper.rejectWarnings = true; 206221828Sgrehan 207221828Sgrehan } 208221828Sgrehan }, 209221828Sgrehan 210221828Sgrehan // ----- other options ----- 211221828Sgrehan 212221828Sgrehan BREAKITERATOR("-breakiterator") { 213221828Sgrehan @Override 214221828Sgrehan public void process(Helper helper) { 215221828Sgrehan helper.breakiterator = true; 216221828Sgrehan } 217221828Sgrehan }, 218221828Sgrehan 219221828Sgrehan LOCALE("-locale", true) { 220240922Sneel @Override 221240922Sneel public void process(Helper helper, String arg) { 222240922Sneel helper.docLocale = arg; 223240922Sneel } 224240922Sneel }, 225240922Sneel 226240922Sneel // the doclet consumes this 227221828Sgrehan OVERVIEW("-overview", true) { 228221828Sgrehan @Override 229221828Sgrehan public void process(Helper helper, String arg) { 230221828Sgrehan helper.setOverviewpath(arg); 231221828Sgrehan } 232221828Sgrehan }, 233221828Sgrehan 234221828Sgrehan XCLASSES("-Xclasses") { 235221828Sgrehan @Override 236221828Sgrehan public void process(Helper helper) { 237221828Sgrehan helper.docClasses = true; 238221828Sgrehan 239221828Sgrehan } 240221828Sgrehan }, 241221828Sgrehan 242221828Sgrehan // ----- help options ----- 243221828Sgrehan 244221828Sgrehan HELP("-help") { 245221828Sgrehan @Override 246221828Sgrehan public void process(Helper helper) { 247221828Sgrehan helper.usage(); 248221828Sgrehan } 249234761Sgrehan }, 250240912Sneel 251234761Sgrehan X("-X") { 252221828Sgrehan @Override 253221828Sgrehan public void process(Helper helper) { 254221828Sgrehan helper.Xusage(); 255221828Sgrehan } 256221828Sgrehan }; 257221828Sgrehan 258221828Sgrehan public final String opt; 259221828Sgrehan public final boolean hasArg; 260221828Sgrehan 261221828Sgrehan ToolOption(String opt) { 262221828Sgrehan this(opt, false); 263221828Sgrehan } 264221828Sgrehan 265221828Sgrehan ToolOption(String opt, boolean hasArg) { 266221828Sgrehan this.opt = opt; 267234761Sgrehan this.hasArg = hasArg; 268234761Sgrehan } 269241497Sgrehan 270241497Sgrehan void process(Helper helper, String arg) { } 271234761Sgrehan 272221828Sgrehan void process(Helper helper) { } 273221828Sgrehan 274221828Sgrehan static ToolOption get(String name) { 275221828Sgrehan for (ToolOption o: values()) { 276221828Sgrehan if (name.equals(o.opt)) 277221828Sgrehan return o; 278221828Sgrehan } 279221828Sgrehan return null; 280221828Sgrehan } 281221828Sgrehan 282221828Sgrehan static abstract class Helper { 283221828Sgrehan /** List of decoded options. */ 284221828Sgrehan final List<List<String>> options = new ArrayList<>(); 285240912Sneel 286240912Sneel /** Selected packages, from -subpackages. */ 287240912Sneel final List<String> subPackages = new ArrayList<>(); 288240912Sneel 289221828Sgrehan /** Excluded packages, from -exclude. */ 290221828Sgrehan final List<String> excludedPackages = new ArrayList<>(); 291221828Sgrehan 292221828Sgrehan // File manager options 293 final Map<Option, String> fileManagerOpts = new LinkedHashMap<>(); 294 295 /** javac options, set by various options. */ 296 Options compOpts; // = Options.instance(context) 297 298 /* Encoding for javac, and files written? set by -encoding. */ 299 String encoding = null; 300 301 /** Set by -breakiterator. */ 302 boolean breakiterator = false; 303 304 /** Set by -quiet. */ 305 boolean quiet = false; 306 307 /** Set by -Xclasses. */ 308 boolean docClasses = false; 309 310 /** Set by -Xwerror. */ 311 boolean rejectWarnings = false; 312 313 /** Set by -prompt. */ 314 boolean promptOnError; 315 316 /** Set by -locale. */ 317 String docLocale = ""; 318 319 /** Set by -public, private, -protected, -package. */ 320 String showAccess = null; 321 String overviewpath; 322 323 abstract void usage(); 324 abstract void Xusage(); 325 326 abstract void usageError(String msg, Object... args); 327 328 void addToList(List<String> list, String str){ 329 StringTokenizer st = new StringTokenizer(str, ":"); 330 String current; 331 while(st.hasMoreTokens()){ 332 current = st.nextToken(); 333 list.add(current); 334 } 335 } 336 337 void setFilter(String showAccess) { 338 if (showAccess != null) { 339 if (!"public".equals(showAccess) 340 && !"protected".equals(showAccess) 341 && !"private".equals(showAccess) 342 && !"package".equals(showAccess)) { 343 usageError("main.incompatible.access.flags"); 344 } 345 this.showAccess = showAccess; 346 } 347 } 348 349 void setCompilerOpt(String opt, String arg) { 350 if (compOpts.get(opt) != null) { 351 usageError("main.option.already.seen", opt); 352 } 353 compOpts.put(opt, arg); 354 } 355 356 void setFileManagerOpt(Option opt, String arg) { 357 fileManagerOpts.put(opt, arg); 358 } 359 360 private void setOverviewpath(String arg) { 361 this.overviewpath = arg; 362 } 363 } 364} 365