ToolOption.java revision 3628:047d4d42b466
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
26package com.sun.tools.javadoc.main;
27
28import java.util.LinkedHashMap;
29import java.util.Map;
30import java.util.StringTokenizer;
31
32import com.sun.tools.javac.code.Flags;
33import com.sun.tools.javac.main.Option;
34import com.sun.tools.javac.main.OptionHelper;
35import com.sun.tools.javac.util.ListBuffer;
36import 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
48public 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}
445