ToolOption.java revision 3573:c4a18ee691c4
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    MODULESOURCEPATH("-modulesourcepath", true) {
108        @Override
109        public void process(Helper helper, String arg) {
110            helper.setFileManagerOpt(Option.MODULE_SOURCE_PATH, arg);
111        }
112    },
113
114    MODULE_SOURCE_PATH("--module-source-path", true) {
115        @Override
116        public void process(Helper helper, String arg) {
117            helper.setFileManagerOpt(Option.MODULE_SOURCE_PATH, arg);
118        }
119    },
120
121    UPGRADEMODULEPATH("-upgrademodulepath", true) {
122        @Override
123        public void process(Helper helper, String arg) {
124            helper.setFileManagerOpt(Option.UPGRADE_MODULE_PATH, arg);
125        }
126    },
127
128    UPGRADE_MODULE_PATH("--upgrade-module-path", true) {
129        @Override
130        public void process(Helper helper, String arg) {
131            helper.setFileManagerOpt(Option.UPGRADE_MODULE_PATH, arg);
132        }
133    },
134
135    SYSTEM("-system", true) {
136        @Override
137        public void process(Helper helper, String arg) {
138            helper.setFileManagerOpt(Option.SYSTEM, arg);
139        }
140    },
141
142    SYSTEM_("--system", true) {
143        @Override
144        public void process(Helper helper, String arg) {
145            helper.setFileManagerOpt(Option.SYSTEM, arg);
146        }
147    },
148
149    MODULEPATH("-modulepath", true) {
150        @Override
151        public void process(Helper helper, String arg) {
152            helper.setFileManagerOpt(Option.MODULE_PATH, arg);
153        }
154    },
155
156    MODULE_PATH("--module-path", true) {
157        @Override
158        public void process(Helper helper, String arg) {
159            helper.setFileManagerOpt(Option.MODULE_PATH, arg);
160        }
161    },
162
163    P("-p", true) {
164        @Override
165        public void process(Helper helper, String arg) {
166            helper.setFileManagerOpt(Option.MODULE_PATH, arg);
167        }
168    },
169
170    ADDMODS("-addmods", true) {
171        @Override
172        public void process(Helper helper, String arg) {
173            helper.setCompilerOpt(opt, arg);
174        }
175    },
176
177    ADD_MODULES("--add-modules", true) {
178        @Override
179        public void process(Helper helper, String arg) {
180            Option.ADD_MODULES.process(helper.getOptionHelper(), opt, arg);
181        }
182    },
183
184    LIMITMODS("-limitmods", true) {
185        @Override
186        public void process(Helper helper, String arg) {
187            helper.setCompilerOpt(opt, arg);
188        }
189    },
190
191    LIMIT_MODULES("--limit-modules", true) {
192        @Override
193        public void process(Helper helper, String arg) {
194            Option.LIMIT_MODULES.process(helper.getOptionHelper(), opt, arg);
195        }
196    },
197
198    ENCODING("-encoding", true) {
199        @Override
200        public void process(Helper helper, String arg) {
201            helper.encoding = arg;
202            helper.setCompilerOpt(opt, arg);
203        }
204    },
205
206    RELEASE("--release", true) {
207        @Override
208        public void process(Helper helper, String arg) {
209            helper.setCompilerOpt(opt, arg);
210        }
211    },
212
213    RELEASE_OLD("-release", true) {
214        @Override
215        public void process(Helper helper, String arg) {
216            helper.setCompilerOpt("--release", arg);
217        }
218    },
219
220    SOURCE("-source", true) {
221        @Override
222        public void process(Helper helper, String arg) {
223            helper.setCompilerOpt(opt, arg);
224        }
225    },
226
227    XMAXERRS("-Xmaxerrs", true) {
228        @Override
229        public void process(Helper helper, String arg) {
230            helper.setCompilerOpt(opt, arg);
231        }
232    },
233
234    XMAXWARNS("-Xmaxwarns", true) {
235        @Override
236        public void process(Helper helper, String arg) {
237            helper.setCompilerOpt(opt, arg);
238        }
239    },
240
241    XADDREADS("-XaddReads:", false) {
242        @Override
243        public void process(Helper helper, String arg) {
244            Option.ADD_READS.process(helper.getOptionHelper(), arg);
245        }
246    },
247
248    ADD_READS("--add-reads", true) {
249        @Override
250        public void process(Helper helper, String arg) {
251            Option.ADD_READS.process(helper.getOptionHelper(), opt, arg);
252        }
253    },
254
255    ADDEXPORTS("-XaddExports:", false) {
256        @Override
257        public void process(Helper helper, String arg) {
258            Option.ADD_EXPORTS.process(helper.getOptionHelper(), arg);
259        }
260    },
261
262    ADD_EXPORTS("--add-exports", true) {
263        @Override
264        public void process(Helper helper, String arg) {
265            Option.ADD_EXPORTS.process(helper.getOptionHelper(), opt, arg);
266        }
267    },
268
269    XMODULE("-Xmodule:", false) {
270        @Override
271        public void process(Helper helper, String arg) {
272            Option.XMODULE.process(helper.getOptionHelper(), arg);
273        }
274    },
275
276    XPATCH("-Xpatch:", false) {
277        @Override
278        public void process(Helper helper, String arg) {
279            Option.XMODULE.process(helper.getOptionHelper(), arg);
280        }
281    },
282
283    PATCH_MODULE("--patch-module", true) {
284        @Override
285        public void process(Helper helper, String arg) {
286            Option.PATCH_MODULE.process(helper.getOptionHelper(), opt, arg);
287        }
288    },
289
290    // ----- doclet options -----
291
292    DOCLET("-doclet", true), // handled in setDocletInvoker
293
294    DOCLETPATH("-docletpath", true), // handled in setDocletInvoker
295
296    // ----- selection options -----
297
298    SUBPACKAGES("-subpackages", true) {
299        @Override
300        public void process(Helper helper, String arg) {
301            helper.addToList(helper.subPackages, arg);
302        }
303    },
304
305    EXCLUDE("-exclude", true) {
306        @Override
307        public void process(Helper helper, String arg) {
308            helper.addToList(helper.excludedPackages, arg);
309        }
310    },
311
312    // ----- filtering options -----
313
314    PACKAGE("-package") {
315        @Override
316        public void process(Helper helper) {
317            helper.setFilter(
318                    Flags.PUBLIC | Flags.PROTECTED | ModifierFilter.PACKAGE);
319        }
320    },
321
322    PRIVATE("-private") {
323        @Override
324        public void process(Helper helper) {
325            helper.setFilter(ModifierFilter.ALL_ACCESS);
326        }
327    },
328
329    PROTECTED("-protected") {
330        @Override
331        public void process(Helper helper) {
332            helper.setFilter(Flags.PUBLIC | Flags.PROTECTED);
333        }
334    },
335
336    PUBLIC("-public") {
337        @Override
338        public void process(Helper helper) {
339            helper.setFilter(Flags.PUBLIC);
340        }
341    },
342
343    // ----- output control options -----
344
345    PROMPT("-prompt") {
346        @Override
347        public void process(Helper helper) {
348            helper.compOpts.put("-prompt", "-prompt");
349            helper.promptOnError = true;
350        }
351    },
352
353    QUIET("-quiet") {
354        @Override
355        public void process(Helper helper) {
356            helper.quiet = true;
357        }
358    },
359
360    VERBOSE("-verbose") {
361        @Override
362        public void process(Helper helper) {
363            helper.compOpts.put("-verbose", "");
364        }
365    },
366
367    XWERROR("-Xwerror") {
368        @Override
369        public void process(Helper helper) {
370            helper.rejectWarnings = true;
371
372        }
373    },
374
375    // ----- other options -----
376
377    BREAKITERATOR("-breakiterator") {
378        @Override
379        public void process(Helper helper) {
380            helper.breakiterator = true;
381        }
382    },
383
384    LOCALE("-locale", true) {
385        @Override
386        public void process(Helper helper, String arg) {
387            helper.docLocale = arg;
388        }
389    },
390
391    OVERVIEW("-overview", true),
392
393    XCLASSES("-Xclasses") {
394        @Override
395        public void process(Helper helper) {
396            helper.docClasses = true;
397
398        }
399    },
400
401    // ----- help options -----
402
403    HELP("-help") {
404        @Override
405        public void process(Helper helper) {
406            helper.usage();
407        }
408    },
409
410    X("-X") {
411        @Override
412        public void process(Helper helper) {
413            helper.Xusage();
414        }
415    };
416
417    public final String opt;
418    public final boolean hasArg;
419
420    ToolOption(String opt) {
421        this(opt, false);
422    }
423
424    ToolOption(String opt, boolean hasArg) {
425        this.opt = opt;
426        this.hasArg = hasArg;
427    }
428
429    void process(Helper helper, String arg) { }
430
431    void process(Helper helper) { }
432
433    static ToolOption get(String name) {
434        for (ToolOption o: values()) {
435            if (name.equals(o.opt))
436                return o;
437        }
438        return null;
439    }
440
441    static abstract class Helper {
442        /** List of decoded options. */
443        final ListBuffer<String[]> options = new ListBuffer<>();
444
445        /** Selected packages, from -subpackages. */
446        final ListBuffer<String> subPackages = new ListBuffer<>();
447
448        /** Excluded packages, from -exclude. */
449        final ListBuffer<String> excludedPackages = new ListBuffer<>();
450
451        // File manager options
452        final Map<Option, String> fileManagerOpts = new LinkedHashMap<>();
453
454        /** javac options, set by various options. */
455        Options compOpts; // = Options.instance(context)
456
457        /* Encoding for javac, and files written? set by -encoding. */
458        String encoding = null;
459
460        /** Set by -breakiterator. */
461        boolean breakiterator = false;
462
463        /** Set by -quiet. */
464        boolean quiet = false;
465
466        /** Set by -Xclasses. */
467        boolean docClasses = false;
468
469        /** Set by -Xwerror. */
470        boolean rejectWarnings = false;
471
472        /** Set by -prompt. */
473        boolean promptOnError;
474
475        /** Set by -locale. */
476        String docLocale = "";
477
478        /** Set by -public, private, -protected, -package. */
479        ModifierFilter showAccess = null;
480
481        abstract void usage();
482        abstract void Xusage();
483
484        abstract void usageError(String msg, Object... args);
485        abstract OptionHelper getOptionHelper();
486
487        void addToList(ListBuffer<String> list, String str){
488            StringTokenizer st = new StringTokenizer(str, ":");
489            String current;
490            while(st.hasMoreTokens()){
491                current = st.nextToken();
492                list.append(current);
493            }
494        }
495
496        void setFilter(long filterBits) {
497            if (showAccess != null) {
498                usageError("main.incompatible.access.flags");
499            }
500            showAccess = new ModifierFilter(filterBits);
501        }
502
503        void setCompilerOpt(String opt, String arg) {
504            if (compOpts.get(opt) != null) {
505                usageError("main.option.already.seen", opt);
506            }
507            compOpts.put(opt, arg);
508        }
509
510        void setFileManagerOpt(Option opt, String arg) {
511            fileManagerOpts.put(opt, arg);
512        }
513    }
514}
515