duke@1: /* ohair@798: * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. duke@1: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. duke@1: * duke@1: * This code is free software; you can redistribute it and/or modify it duke@1: * under the terms of the GNU General Public License version 2 only, as ohair@554: * published by the Free Software Foundation. Oracle designates this duke@1: * particular file as subject to the "Classpath" exception as provided ohair@554: * by Oracle in the LICENSE file that accompanied this code. duke@1: * duke@1: * This code is distributed in the hope that it will be useful, but WITHOUT duke@1: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or duke@1: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License duke@1: * version 2 for more details (a copy is included in the LICENSE file that duke@1: * accompanied this code). duke@1: * duke@1: * You should have received a copy of the GNU General Public License version duke@1: * 2 along with this work; if not, write to the Free Software Foundation, duke@1: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. duke@1: * ohair@554: * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ohair@554: * or visit www.oracle.com if you need additional information or have any ohair@554: * questions. duke@1: */ duke@1: duke@1: package com.sun.tools.javac.main; duke@1: jjg@11: import com.sun.tools.javac.code.Lint; duke@1: import com.sun.tools.javac.code.Source; duke@1: import com.sun.tools.javac.code.Type; duke@1: import com.sun.tools.javac.jvm.Target; duke@1: import com.sun.tools.javac.main.JavacOption.HiddenOption; duke@1: import com.sun.tools.javac.main.JavacOption.Option; duke@1: import com.sun.tools.javac.main.JavacOption.XOption; duke@1: import com.sun.tools.javac.util.ListBuffer; duke@1: import com.sun.tools.javac.util.Options; duke@1: import com.sun.tools.javac.processing.JavacProcessingEnvironment; duke@1: import java.io.File; duke@1: import java.io.FileWriter; duke@1: import java.io.PrintWriter; duke@1: import java.util.EnumSet; jjg@377: import java.util.LinkedHashMap; jjg@377: import java.util.Map; duke@1: import java.util.Set; duke@1: import javax.lang.model.SourceVersion; duke@1: duke@1: import static com.sun.tools.javac.main.OptionName.*; duke@1: duke@1: /** duke@1: * TODO: describe com.sun.tools.javac.main.RecognizedOptions duke@1: * jjg@581: *

This is NOT part of any supported API. duke@1: * If you write code that depends on this, you do so at your own duke@1: * risk. This code and its internal interfaces are subject to change duke@1: * or deletion without notice.

duke@1: */ duke@1: public class RecognizedOptions { duke@1: duke@1: private RecognizedOptions() {} duke@1: duke@1: public interface OptionHelper { duke@1: duke@1: void setOut(PrintWriter out); duke@1: duke@1: void error(String key, Object... args); duke@1: duke@1: void printVersion(); duke@1: duke@1: void printFullVersion(); duke@1: duke@1: void printHelp(); duke@1: duke@1: void printXhelp(); duke@1: duke@1: void addFile(File f); duke@1: duke@1: void addClassName(String s); duke@1: duke@1: } duke@1: duke@1: public static class GrumpyHelper implements OptionHelper { duke@1: duke@1: public void setOut(PrintWriter out) { duke@1: throw new IllegalArgumentException(); duke@1: } duke@1: duke@1: public void error(String key, Object... args) { duke@1: throw new IllegalArgumentException(Main.getLocalizedString(key, args)); duke@1: } duke@1: duke@1: public void printVersion() { duke@1: throw new IllegalArgumentException(); duke@1: } duke@1: duke@1: public void printFullVersion() { duke@1: throw new IllegalArgumentException(); duke@1: } duke@1: duke@1: public void printHelp() { duke@1: throw new IllegalArgumentException(); duke@1: } duke@1: duke@1: public void printXhelp() { duke@1: throw new IllegalArgumentException(); duke@1: } duke@1: duke@1: public void addFile(File f) { duke@1: throw new IllegalArgumentException(f.getPath()); duke@1: } duke@1: duke@1: public void addClassName(String s) { duke@1: throw new IllegalArgumentException(s); duke@1: } duke@1: duke@1: } duke@1: duke@1: static Set javacOptions = EnumSet.of( duke@1: G, duke@1: G_NONE, duke@1: G_CUSTOM, duke@1: XLINT, duke@1: XLINT_CUSTOM, duke@1: NOWARN, duke@1: VERBOSE, duke@1: DEPRECATION, duke@1: CLASSPATH, duke@1: CP, duke@1: SOURCEPATH, duke@1: BOOTCLASSPATH, duke@1: XBOOTCLASSPATH_PREPEND, duke@1: XBOOTCLASSPATH_APPEND, duke@1: XBOOTCLASSPATH, duke@1: EXTDIRS, duke@1: DJAVA_EXT_DIRS, duke@1: ENDORSEDDIRS, duke@1: DJAVA_ENDORSED_DIRS, jjg@11: PROC, duke@1: PROCESSOR, duke@1: PROCESSORPATH, duke@1: D, duke@1: S, duke@1: IMPLICIT, duke@1: ENCODING, duke@1: SOURCE, duke@1: TARGET, duke@1: VERSION, duke@1: FULLVERSION, mcimadamore@221: DIAGS, duke@1: HELP, duke@1: A, duke@1: X, duke@1: J, duke@1: MOREINFO, duke@1: WERROR, duke@1: // COMPLEXINFERENCE, duke@1: PROMPT, duke@1: DOE, duke@1: PRINTSOURCE, duke@1: WARNUNCHECKED, duke@1: XMAXERRS, duke@1: XMAXWARNS, duke@1: XSTDOUT, jjg@657: XPKGINFO, duke@1: XPRINT, duke@1: XPRINTROUNDS, duke@1: XPRINTPROCESSORINFO, duke@1: XPREFER, duke@1: O, duke@1: XJCOV, duke@1: XD, duke@1: SOURCEFILE); duke@1: duke@1: static Set javacFileManagerOptions = EnumSet.of( duke@1: CLASSPATH, duke@1: CP, duke@1: SOURCEPATH, duke@1: BOOTCLASSPATH, duke@1: XBOOTCLASSPATH_PREPEND, duke@1: XBOOTCLASSPATH_APPEND, duke@1: XBOOTCLASSPATH, duke@1: EXTDIRS, duke@1: DJAVA_EXT_DIRS, duke@1: ENDORSEDDIRS, duke@1: DJAVA_ENDORSED_DIRS, duke@1: PROCESSORPATH, duke@1: D, duke@1: S, duke@1: ENCODING, duke@1: SOURCE); duke@1: duke@1: static Set javacToolOptions = EnumSet.of( duke@1: G, duke@1: G_NONE, duke@1: G_CUSTOM, duke@1: XLINT, duke@1: XLINT_CUSTOM, duke@1: NOWARN, duke@1: VERBOSE, duke@1: DEPRECATION, jjg@11: PROC, duke@1: PROCESSOR, duke@1: IMPLICIT, duke@1: SOURCE, duke@1: TARGET, duke@1: // VERSION, duke@1: // FULLVERSION, duke@1: // HELP, duke@1: A, duke@1: // X, duke@1: // J, duke@1: MOREINFO, duke@1: WERROR, duke@1: // COMPLEXINFERENCE, duke@1: PROMPT, duke@1: DOE, duke@1: PRINTSOURCE, duke@1: WARNUNCHECKED, duke@1: XMAXERRS, duke@1: XMAXWARNS, duke@1: // XSTDOUT, jjg@657: XPKGINFO, duke@1: XPRINT, duke@1: XPRINTROUNDS, duke@1: XPRINTPROCESSORINFO, duke@1: XPREFER, duke@1: O, duke@1: XJCOV, duke@1: XD); duke@1: duke@1: static Option[] getJavaCompilerOptions(OptionHelper helper) { duke@1: return getOptions(helper, javacOptions); duke@1: } duke@1: duke@1: public static Option[] getJavacFileManagerOptions(OptionHelper helper) { duke@1: return getOptions(helper, javacFileManagerOptions); duke@1: } duke@1: duke@1: public static Option[] getJavacToolOptions(OptionHelper helper) { duke@1: return getOptions(helper, javacToolOptions); duke@1: } duke@1: duke@1: static Option[] getOptions(OptionHelper helper, Set desired) { duke@1: ListBuffer