langtools/test/jdk/javadoc/tool/example/Example.java
author ksrini
Thu, 24 Nov 2016 20:48:52 -0800
changeset 42277 2668b0bc7ad7
permissions -rw-r--r--
8164316: Refine the Doclet APIs Reviewed-by: jjg
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
42277
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
     1
/*
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
     2
 * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
     4
 *
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
     7
 * published by the Free Software Foundation.
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
     8
 *
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    13
 * accompanied this code).
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    14
 *
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    18
 *
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    21
 * questions.
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    22
 */
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    23
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    24
/*
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    25
 * NOTE: this class is an almost a replica of the example used in the
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    26
 * package-info.java.
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    27
 */
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    28
import java.io.IOException;
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    29
import java.util.Arrays;
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    30
import java.util.HashSet;
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    31
import java.util.List;
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    32
import java.util.Locale;
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    33
import java.util.Set;
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    34
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    35
import javax.lang.model.SourceVersion;
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    36
import javax.lang.model.element.Element;
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    37
import javax.lang.model.element.TypeElement;
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    38
import javax.lang.model.util.ElementFilter;
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    39
import javax.tools.Diagnostic.Kind;
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    40
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    41
import com.sun.source.doctree.DocCommentTree;
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    42
import com.sun.source.util.DocTrees;
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    43
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    44
import jdk.javadoc.doclet.*;
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    45
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    46
/**
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    47
 * An Example class implementing the Doclet.
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    48
 */
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    49
public class Example implements Doclet {
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    50
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    51
    Reporter reporter;
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    52
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    53
    @Override
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    54
    public void init(Locale locale, Reporter reporter) {
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    55
        reporter.print(Kind.NOTE, "Doclet using locale: " + locale);
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    56
        this.reporter = reporter;
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    57
    }
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    58
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    59
    /**
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    60
     * Prints an element.
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    61
     *
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    62
     * @param trees the utility class
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    63
     * @param e the element to be printed
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    64
     */
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    65
    public void printElement(DocTrees trees, Element e) {
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    66
        DocCommentTree docCommentTree = trees.getDocCommentTree(e);
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    67
        if (docCommentTree != null) {
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    68
            System.out.println("Element (" + e.getKind() + ": "
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    69
                    + e + ") has the following comments:");
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    70
            System.out.println("Entire body: " + docCommentTree.getFullBody());
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    71
            System.out.println("Block tags: " + docCommentTree.getBlockTags());
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    72
        }
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    73
    }
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    74
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    75
    @Override
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    76
    public boolean run(DocletEnvironment docEnv) {
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    77
        reporter.print(Kind.NOTE, "overviewfile: " + overviewfile);
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    78
        // get the DocTrees utility class to access DocComments
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    79
        DocTrees docTrees = docEnv.getDocTrees();
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    80
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    81
        // location of an element in the same directory as overview.html
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    82
        try {
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    83
            Element e = ElementFilter.typesIn(docEnv.getSpecifiedElements()).iterator().next();
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    84
            DocCommentTree docCommentTree
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    85
                    = docTrees.getDocCommentTree(e, overviewfile);
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    86
            if (docCommentTree != null) {
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    87
                System.out.println("Overview html: " + docCommentTree.getFullBody());
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    88
            }
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    89
        } catch (IOException missing) {
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    90
            reporter.print(Kind.ERROR, "No overview.html found.");
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    91
        }
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    92
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    93
        for (TypeElement t : ElementFilter.typesIn(docEnv.getIncludedElements())) {
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    94
            System.out.println(t.getKind() + ":" + t);
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    95
            for (Element e : t.getEnclosedElements()) {
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    96
                printElement(docTrees, e);
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    97
            }
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    98
        }
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
    99
        return true;
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   100
    }
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   101
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   102
    @Override
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   103
    public String getName() {
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   104
        return "Example";
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   105
    }
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   106
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   107
    private String overviewfile;
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   108
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   109
    @Override
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   110
    public Set<? extends Option> getSupportedOptions() {
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   111
        Option[] options = {
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   112
            new Option() {
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   113
                private final List<String> someOption = Arrays.asList(
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   114
                        "-overviewfile",
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   115
                        "-overview-file",
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   116
                        "--over-view-file"
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   117
                );
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   118
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   119
                @Override
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   120
                public int getArgumentCount() {
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   121
                    return 1;
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   122
                }
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   123
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   124
                @Override
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   125
                public String getDescription() {
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   126
                    return "an option with aliases";
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   127
                }
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   128
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   129
                @Override
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   130
                public Option.Kind getKind() {
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   131
                    return Option.Kind.STANDARD;
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   132
                }
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   133
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   134
                @Override
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   135
                public List<String> getNames() {
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   136
                    return someOption;
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   137
                }
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   138
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   139
                @Override
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   140
                public String getParameters() {
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   141
                    return "file";
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   142
                }
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   143
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   144
                @Override
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   145
                public boolean process(String opt, List<String> arguments) {
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   146
                    overviewfile = arguments.get(0);
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   147
                    return true;
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   148
                }
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   149
            }
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   150
        };
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   151
        return new HashSet<>(Arrays.asList(options));
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   152
    }
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   153
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   154
    @Override
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   155
    public SourceVersion getSupportedSourceVersion() {
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   156
        // support the latest release
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   157
        return SourceVersion.latest();
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   158
    }
2668b0bc7ad7 8164316: Refine the Doclet APIs
ksrini
parents:
diff changeset
   159
}