jjg@1411: /* jjg@1411: * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. jjg@1411: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. jjg@1411: * jjg@1411: * This code is free software; you can redistribute it and/or modify it jjg@1411: * under the terms of the GNU General Public License version 2 only, as jjg@1411: * published by the Free Software Foundation. Oracle designates this jjg@1411: * particular file as subject to the "Classpath" exception as provided jjg@1411: * by Oracle in the LICENSE file that accompanied this code. jjg@1411: * jjg@1411: * This code is distributed in the hope that it will be useful, but WITHOUT jjg@1411: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or jjg@1411: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License jjg@1411: * version 2 for more details (a copy is included in the LICENSE file that jjg@1411: * accompanied this code). jjg@1411: * jjg@1411: * You should have received a copy of the GNU General Public License version jjg@1411: * 2 along with this work; if not, write to the Free Software Foundation, jjg@1411: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. jjg@1411: * jjg@1411: * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA jjg@1411: * or visit www.oracle.com if you need additional information or have any jjg@1411: * questions. jjg@1411: */ jjg@1411: jjg@1411: package com.sun.tools.javadoc; jjg@1411: jjg@1411: import com.sun.tools.javac.code.Flags; jjg@1411: import com.sun.tools.javac.util.ListBuffer; jjg@1411: import com.sun.tools.javac.util.Options; jjg@1411: import java.util.StringTokenizer; jjg@1411: jjg@1411: jjg@1411: /** jjg@1411: * javadoc tool options. jjg@1411: * jjg@1411: *

This is NOT part of any supported API. jjg@1411: * If you write code that depends on this, you do so at your own risk. jjg@1411: * This code and its internal interfaces are subject to change or jjg@1411: * deletion without notice. jjg@1411: */ jjg@1411: public enum ToolOption { jjg@1411: // ----- options for underlying compiler ----- jjg@1411: jjg@1411: BOOTCLASSPATH("-bootclasspath", true) { jjg@1411: @Override jjg@1411: public void process(Helper helper, String arg) { jjg@1411: helper.setCompilerOpt(opt, arg); jjg@1411: } jjg@1411: }, jjg@1411: jjg@1411: CLASSPATH("-classpath", true) { jjg@1411: @Override jjg@1411: public void process(Helper helper, String arg) { jjg@1411: helper.setCompilerOpt(opt, arg); jjg@1411: } jjg@1411: }, jjg@1411: jjg@1411: EXTDIRS("-extdirs", true) { jjg@1411: @Override jjg@1411: public void process(Helper helper, String arg) { jjg@1411: helper.setCompilerOpt(opt, arg); jjg@1411: } jjg@1411: }, jjg@1411: jjg@1411: SOURCEPATH("-sourcepath", true) { jjg@1411: @Override jjg@1411: public void process(Helper helper, String arg) { jjg@1411: helper.setCompilerOpt(opt, arg); jjg@1411: } jjg@1411: }, jjg@1411: jjg@1411: SYSCLASSPATH("-sysclasspath", true) { jjg@1411: @Override jjg@1411: public void process(Helper helper, String arg) { jjg@1411: helper.setCompilerOpt("-bootclasspath", arg); jjg@1411: } jjg@1411: }, jjg@1411: jjg@1411: ENCODING("-encoding", true) { jjg@1411: @Override jjg@1411: public void process(Helper helper, String arg) { jjg@1411: helper.encoding = arg; jjg@1411: helper.setCompilerOpt(opt, arg); jjg@1411: } jjg@1411: }, jjg@1411: jjg@1411: SOURCE("-source", true) { jjg@1411: @Override jjg@1411: public void process(Helper helper, String arg) { jjg@1411: helper.setCompilerOpt(opt, arg); jjg@1411: } jjg@1411: }, jjg@1411: jjg@1411: XMAXERRS("-Xmaxerrs", true) { jjg@1411: @Override jjg@1411: public void process(Helper helper, String arg) { jjg@1411: helper.setCompilerOpt(opt, arg); jjg@1411: } jjg@1411: }, jjg@1411: jjg@1411: XMAXWARNS("-Xmaxwarns", true) { jjg@1411: @Override jjg@1411: public void process(Helper helper, String arg) { jjg@1411: helper.setCompilerOpt(opt, arg); jjg@1411: } jjg@1411: }, jjg@1411: jjg@1411: // ----- doclet options ----- jjg@1411: jjg@1411: DOCLET("-doclet", true), // handled in setDocletInvoker jjg@1411: jjg@1411: DOCLETPATH("-docletpath", true), // handled in setDocletInvoker jjg@1411: jjg@1411: // ----- selection options ----- jjg@1411: jjg@1411: SUBPACKAGES("-subpackages", true) { jjg@1411: @Override jjg@1411: public void process(Helper helper, String arg) { jjg@1411: helper.addToList(helper.subPackages, arg); jjg@1411: } jjg@1411: }, jjg@1411: jjg@1411: EXCLUDE("-exclude", true) { jjg@1411: @Override jjg@1411: public void process(Helper helper, String arg) { jjg@1411: helper.addToList(helper.excludedPackages, arg); jjg@1411: } jjg@1411: }, jjg@1411: jjg@1411: // ----- filtering options ----- jjg@1411: jjg@1411: PACKAGE("-package") { jjg@1411: @Override jjg@1411: public void process(Helper helper) { jjg@1411: helper.setFilter( jjg@1411: Flags.PUBLIC | Flags.PROTECTED | ModifierFilter.PACKAGE); jjg@1411: } jjg@1411: }, jjg@1411: jjg@1411: PRIVATE("-private") { jjg@1411: @Override jjg@1411: public void process(Helper helper) { jjg@1411: helper.setFilter(ModifierFilter.ALL_ACCESS); jjg@1411: } jjg@1411: }, jjg@1411: jjg@1411: PROTECTED("-protected") { jjg@1411: @Override jjg@1411: public void process(Helper helper) { jjg@1411: helper.setFilter(Flags.PUBLIC | Flags.PROTECTED); jjg@1411: } jjg@1411: }, jjg@1411: jjg@1411: PUBLIC("-public") { jjg@1411: @Override jjg@1411: public void process(Helper helper) { jjg@1411: helper.setFilter(Flags.PUBLIC); jjg@1411: } jjg@1411: }, jjg@1411: jjg@1411: // ----- output control options ----- jjg@1411: jjg@1411: PROMPT("-prompt") { jjg@1411: @Override jjg@1411: public void process(Helper helper) { jjg@1411: helper.compOpts.put("-prompt", "-prompt"); jjg@1411: helper.promptOnError = true; jjg@1411: } jjg@1411: }, jjg@1411: jjg@1411: QUIET("-quiet") { jjg@1411: @Override jjg@1411: public void process(Helper helper) { jjg@1411: helper.quiet = true; jjg@1411: } jjg@1411: }, jjg@1411: jjg@1411: VERBOSE("-verbose") { jjg@1411: @Override jjg@1411: public void process(Helper helper) { jjg@1411: helper.compOpts.put("-verbose", ""); jjg@1411: } jjg@1411: }, jjg@1411: jjg@1411: XWERROR("-Xwerror") { jjg@1411: @Override jjg@1411: public void process(Helper helper) { jjg@1411: helper.rejectWarnings = true; jjg@1411: jjg@1411: } jjg@1411: }, jjg@1411: jjg@1411: // ----- other options ----- jjg@1411: jjg@1411: BREAKITERATOR("-breakiterator") { jjg@1411: @Override jjg@1411: public void process(Helper helper) { jjg@1411: helper.breakiterator = true; jjg@1411: } jjg@1411: }, jjg@1411: jjg@1411: LOCALE("-locale", true) { jjg@1411: @Override jjg@1411: public void process(Helper helper, String arg) { jjg@1411: helper.docLocale = arg; jjg@1411: } jjg@1411: }, jjg@1411: jjg@1411: OVERVIEW("-overview", true), jjg@1411: jjg@1411: XCLASSES("-Xclasses") { jjg@1411: @Override jjg@1411: public void process(Helper helper) { jjg@1411: helper.docClasses = true; jjg@1411: jjg@1411: } jjg@1411: }, jjg@1411: jjg@1411: // ----- help options ----- jjg@1411: jjg@1411: HELP("-help") { jjg@1411: @Override jjg@1411: public void process(Helper helper) { jjg@1411: helper.usage(); jjg@1411: } jjg@1411: }, jjg@1411: jjg@1411: X("-X") { jjg@1411: @Override jjg@1411: public void process(Helper helper) { jjg@1411: helper.Xusage(); jjg@1411: } jjg@1411: }; jjg@1411: jjg@1411: public final String opt; jjg@1411: public final boolean hasArg; jjg@1411: jjg@1411: ToolOption(String opt) { jjg@1411: this(opt, false); jjg@1411: } jjg@1411: jjg@1411: ToolOption(String opt, boolean hasArg) { jjg@1411: this.opt = opt; jjg@1411: this.hasArg = hasArg; jjg@1411: } jjg@1411: jjg@1411: void process(Helper helper, String arg) { } jjg@1411: jjg@1411: void process(Helper helper) { } jjg@1411: jjg@1411: static ToolOption get(String name) { jjg@1411: for (ToolOption o: values()) { jjg@1411: if (name.equals(o.opt)) jjg@1411: return o; jjg@1411: } jjg@1411: return null; jjg@1411: } jjg@1411: jjg@1411: static abstract class Helper { jjg@1411: /** List of decoded options. */ jjg@1411: final ListBuffer options = new ListBuffer(); jjg@1411: jjg@1411: /** Selected packages, from -subpackages. */ jjg@1411: final ListBuffer subPackages = new ListBuffer(); jjg@1411: jjg@1411: /** Excluded packages, from -exclude. */ jjg@1411: final ListBuffer excludedPackages = new ListBuffer(); jjg@1411: jjg@1411: /** javac options, set by various options. */ jjg@1411: Options compOpts; // = Options.instance(context) jjg@1411: jjg@1411: /* Encoding for javac, and files written? set by -encoding. */ jjg@1411: String encoding = null; jjg@1411: jjg@1411: /** Set by -breakiterator. */ jjg@1411: boolean breakiterator = false; jjg@1411: jjg@1411: /** Set by -quiet. */ jjg@1411: boolean quiet = false; jjg@1411: jjg@1411: /** Set by -Xclasses. */ jjg@1411: boolean docClasses = false; jjg@1411: jjg@1411: /** Set by -Xwerror. */ jjg@1411: boolean rejectWarnings = false; jjg@1411: jjg@1411: /** Set by -prompt. */ jjg@1411: boolean promptOnError; jjg@1411: jjg@1411: /** Set by -locale. */ jjg@1411: String docLocale = ""; jjg@1411: jjg@1411: /** Set by -public, private, -protected, -package. */ jjg@1411: ModifierFilter showAccess = null; jjg@1411: jjg@1411: abstract void usage(); jjg@1411: abstract void Xusage(); jjg@1411: jjg@1411: abstract void usageError(String msg, Object... args); jjg@1411: jjg@1411: protected void addToList(ListBuffer list, String str){ jjg@1411: StringTokenizer st = new StringTokenizer(str, ":"); jjg@1411: String current; jjg@1411: while(st.hasMoreTokens()){ jjg@1411: current = st.nextToken(); jjg@1411: list.append(current); jjg@1411: } jjg@1411: } jjg@1411: jjg@1411: protected void setFilter(long filterBits) { jjg@1411: if (showAccess != null) { jjg@1411: usageError("main.incompatible.access.flags"); jjg@1411: } jjg@1411: showAccess = new ModifierFilter(filterBits); jjg@1411: } jjg@1411: jjg@1411: private void setCompilerOpt(String opt, String arg) { jjg@1411: if (compOpts.get(opt) != null) { jjg@1411: usageError("main.option.already.seen", opt); jjg@1411: } jjg@1411: compOpts.put(opt, arg); jjg@1411: } jjg@1411: } jjg@1411: }