src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/taglets/TagletManager.java
author pmuthuswamy
Mon, 12 Nov 2018 13:31:41 +0530
changeset 52487 5d1d07b72f15
parent 50240 b9c483223a91
child 54198 6ba98ff89499
permissions -rw-r--r--
5076751: System properties documentation needed in javadocs Reviewed-by: jjg
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10
06bc494ca11e Initial load
duke
parents:
diff changeset
     1
/*
49879
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48029
diff changeset
     2
 * Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
10
06bc494ca11e Initial load
duke
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
06bc494ca11e Initial load
duke
parents:
diff changeset
     4
 *
06bc494ca11e Initial load
duke
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
06bc494ca11e Initial load
duke
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
5520
86e4b9a9da40 6943119: Rebrand source copyright notices
ohair
parents: 1789
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
10
06bc494ca11e Initial load
duke
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
5520
86e4b9a9da40 6943119: Rebrand source copyright notices
ohair
parents: 1789
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
10
06bc494ca11e Initial load
duke
parents:
diff changeset
    10
 *
06bc494ca11e Initial load
duke
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
06bc494ca11e Initial load
duke
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
06bc494ca11e Initial load
duke
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
06bc494ca11e Initial load
duke
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
06bc494ca11e Initial load
duke
parents:
diff changeset
    15
 * accompanied this code).
06bc494ca11e Initial load
duke
parents:
diff changeset
    16
 *
06bc494ca11e Initial load
duke
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
06bc494ca11e Initial load
duke
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
06bc494ca11e Initial load
duke
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
06bc494ca11e Initial load
duke
parents:
diff changeset
    20
 *
5520
86e4b9a9da40 6943119: Rebrand source copyright notices
ohair
parents: 1789
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
86e4b9a9da40 6943119: Rebrand source copyright notices
ohair
parents: 1789
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
86e4b9a9da40 6943119: Rebrand source copyright notices
ohair
parents: 1789
diff changeset
    23
 * questions.
10
06bc494ca11e Initial load
duke
parents:
diff changeset
    24
 */
06bc494ca11e Initial load
duke
parents:
diff changeset
    25
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
    26
package jdk.javadoc.internal.doclets.toolkit.taglets;
10
06bc494ca11e Initial load
duke
parents:
diff changeset
    27
06bc494ca11e Initial load
duke
parents:
diff changeset
    28
import java.io.*;
06bc494ca11e Initial load
duke
parents:
diff changeset
    29
import java.util.*;
06bc494ca11e Initial load
duke
parents:
diff changeset
    30
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
    31
import javax.lang.model.element.Element;
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
    32
import javax.lang.model.element.ExecutableElement;
38911
48a00b5ee366 8156077: Support javadoc tags in module documentation
bpatel
parents: 37759
diff changeset
    33
import javax.lang.model.element.ModuleElement;
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
    34
import javax.lang.model.element.PackageElement;
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
    35
import javax.lang.model.element.TypeElement;
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
    36
import javax.lang.model.element.VariableElement;
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
    37
import javax.lang.model.util.SimpleElementVisitor9;
14545
2e7bab0639b8 6493690: javadoc should have a javax.tools.Tool service provider installed in tools.jar
jjg
parents: 14368
diff changeset
    38
import javax.tools.JavaFileManager;
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
    39
import javax.tools.StandardJavaFileManager;
14545
2e7bab0639b8 6493690: javadoc should have a javax.tools.Tool service provider installed in tools.jar
jjg
parents: 14368
diff changeset
    40
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
    41
import com.sun.source.doctree.DocTree;
44388
4d0903f1f311 8176836: Provide Taglet with context
jjg
parents: 44189
diff changeset
    42
import jdk.javadoc.doclet.Doclet;
4d0903f1f311 8176836: Provide Taglet with context
jjg
parents: 44189
diff changeset
    43
import jdk.javadoc.doclet.DocletEnvironment;
45417
f7479ee8de69 8177848: Rename Configuration(Impl) classes
ksrini
parents: 44388
diff changeset
    44
import jdk.javadoc.internal.doclets.toolkit.BaseConfiguration;
48029
e9dab2492924 8185985: Html files in doc-files directories should be wrapped with standard header and footer
ksrini
parents: 47216
diff changeset
    45
import jdk.javadoc.internal.doclets.toolkit.DocletElement;
40303
96a1226aca18 8160697: HTMLWriter needs perf cleanup
jjg
parents: 38918
diff changeset
    46
import jdk.javadoc.internal.doclets.toolkit.Messages;
96a1226aca18 8160697: HTMLWriter needs perf cleanup
jjg
parents: 38918
diff changeset
    47
import jdk.javadoc.internal.doclets.toolkit.Resources;
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
    48
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
    49
import jdk.javadoc.internal.doclets.toolkit.taglets.BaseTaglet.Site;
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
    50
import jdk.javadoc.internal.doclets.toolkit.util.CommentHelper;
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
    51
import jdk.javadoc.internal.doclets.toolkit.util.Utils;
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
    52
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
    53
import static javax.tools.DocumentationTool.Location.*;
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
    54
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
    55
import static com.sun.source.doctree.DocTree.Kind.*;
14258
8d2148961366 8000663: clean up langtools imports
jjg
parents: 14049
diff changeset
    56
10
06bc494ca11e Initial load
duke
parents:
diff changeset
    57
/**
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
    58
 * Manages the {@code Taglet}s used by doclets.
10
06bc494ca11e Initial load
duke
parents:
diff changeset
    59
 *
14260
727a84636f12 8000665: fix "internal API" comments on javadoc files
jjg
parents: 14258
diff changeset
    60
 *  <p><b>This is NOT part of any supported API.
727a84636f12 8000665: fix "internal API" comments on javadoc files
jjg
parents: 14258
diff changeset
    61
 *  If you write code that depends on this, you do so at your own risk.
727a84636f12 8000665: fix "internal API" comments on javadoc files
jjg
parents: 14258
diff changeset
    62
 *  This code and its internal interfaces are subject to change or
727a84636f12 8000665: fix "internal API" comments on javadoc files
jjg
parents: 14258
diff changeset
    63
 *  deletion without notice.</b>
10
06bc494ca11e Initial load
duke
parents:
diff changeset
    64
 *
06bc494ca11e Initial load
duke
parents:
diff changeset
    65
 * @author Jamie Ho
06bc494ca11e Initial load
duke
parents:
diff changeset
    66
 */
06bc494ca11e Initial load
duke
parents:
diff changeset
    67
06bc494ca11e Initial load
duke
parents:
diff changeset
    68
public class TagletManager {
06bc494ca11e Initial load
duke
parents:
diff changeset
    69
06bc494ca11e Initial load
duke
parents:
diff changeset
    70
    /**
14545
2e7bab0639b8 6493690: javadoc should have a javax.tools.Tool service provider installed in tools.jar
jjg
parents: 14368
diff changeset
    71
     * The default separator for the simple tag option.
10
06bc494ca11e Initial load
duke
parents:
diff changeset
    72
     */
14545
2e7bab0639b8 6493690: javadoc should have a javax.tools.Tool service provider installed in tools.jar
jjg
parents: 14368
diff changeset
    73
    public static final char SIMPLE_TAGLET_OPT_SEPARATOR = ':';
10
06bc494ca11e Initial load
duke
parents:
diff changeset
    74
06bc494ca11e Initial load
duke
parents:
diff changeset
    75
    /**
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
    76
     * The map of all taglets.
10
06bc494ca11e Initial load
duke
parents:
diff changeset
    77
     */
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
    78
    private final LinkedHashMap<String,Taglet> allTaglets;
10
06bc494ca11e Initial load
duke
parents:
diff changeset
    79
06bc494ca11e Initial load
duke
parents:
diff changeset
    80
    /**
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
    81
     * Block (non-line) taglets, grouped by Site
10
06bc494ca11e Initial load
duke
parents:
diff changeset
    82
     */
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
    83
    private Map<Site, List<Taglet>> blockTagletsBySite;
10
06bc494ca11e Initial load
duke
parents:
diff changeset
    84
06bc494ca11e Initial load
duke
parents:
diff changeset
    85
    /**
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
    86
     * The taglets that can appear inline in descriptive text.
10
06bc494ca11e Initial load
duke
parents:
diff changeset
    87
     */
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
    88
    private List<Taglet> inlineTags;
10
06bc494ca11e Initial load
duke
parents:
diff changeset
    89
06bc494ca11e Initial load
duke
parents:
diff changeset
    90
    /**
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
    91
     * The taglets that can appear in the serialized form.
10
06bc494ca11e Initial load
duke
parents:
diff changeset
    92
     */
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
    93
    private List<Taglet> serializedFormTags;
10
06bc494ca11e Initial load
duke
parents:
diff changeset
    94
44388
4d0903f1f311 8176836: Provide Taglet with context
jjg
parents: 44189
diff changeset
    95
    private final DocletEnvironment docEnv;
4d0903f1f311 8176836: Provide Taglet with context
jjg
parents: 44189
diff changeset
    96
    private final Doclet doclet;
4d0903f1f311 8176836: Provide Taglet with context
jjg
parents: 44189
diff changeset
    97
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
    98
    private final Utils utils;
40303
96a1226aca18 8160697: HTMLWriter needs perf cleanup
jjg
parents: 38918
diff changeset
    99
    private final Messages messages;
96a1226aca18 8160697: HTMLWriter needs perf cleanup
jjg
parents: 38918
diff changeset
   100
    private final Resources resources;
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   101
06bc494ca11e Initial load
duke
parents:
diff changeset
   102
    /**
06bc494ca11e Initial load
duke
parents:
diff changeset
   103
     * Keep track of standard tags.
06bc494ca11e Initial load
duke
parents:
diff changeset
   104
     */
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   105
    private final Set<String> standardTags;
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   106
06bc494ca11e Initial load
duke
parents:
diff changeset
   107
    /**
06bc494ca11e Initial load
duke
parents:
diff changeset
   108
     * Keep track of standard tags in lowercase to compare for better
06bc494ca11e Initial load
duke
parents:
diff changeset
   109
     * error messages when a tag like @docRoot is mistakenly spelled
06bc494ca11e Initial load
duke
parents:
diff changeset
   110
     * lowercase @docroot.
06bc494ca11e Initial load
duke
parents:
diff changeset
   111
     */
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   112
    private final Set<String> standardTagsLowercase;
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   113
06bc494ca11e Initial load
duke
parents:
diff changeset
   114
    /**
06bc494ca11e Initial load
duke
parents:
diff changeset
   115
     * Keep track of overriden standard tags.
06bc494ca11e Initial load
duke
parents:
diff changeset
   116
     */
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   117
    private final Set<String> overridenStandardTags;
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   118
06bc494ca11e Initial load
duke
parents:
diff changeset
   119
    /**
06bc494ca11e Initial load
duke
parents:
diff changeset
   120
     * Keep track of the tags that may conflict
06bc494ca11e Initial load
duke
parents:
diff changeset
   121
     * with standard tags in the future (any custom tag without
06bc494ca11e Initial load
duke
parents:
diff changeset
   122
     * a period in its name).
06bc494ca11e Initial load
duke
parents:
diff changeset
   123
     */
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   124
    private final Set<String> potentiallyConflictingTags;
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   125
06bc494ca11e Initial load
duke
parents:
diff changeset
   126
    /**
06bc494ca11e Initial load
duke
parents:
diff changeset
   127
     * The set of unseen custom tags.
06bc494ca11e Initial load
duke
parents:
diff changeset
   128
     */
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   129
    private final Set<String> unseenCustomTags;
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   130
06bc494ca11e Initial load
duke
parents:
diff changeset
   131
    /**
06bc494ca11e Initial load
duke
parents:
diff changeset
   132
     * True if we do not want to use @since tags.
06bc494ca11e Initial load
duke
parents:
diff changeset
   133
     */
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   134
    private final boolean nosince;
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   135
06bc494ca11e Initial load
duke
parents:
diff changeset
   136
    /**
06bc494ca11e Initial load
duke
parents:
diff changeset
   137
     * True if we want to use @version tags.
06bc494ca11e Initial load
duke
parents:
diff changeset
   138
     */
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   139
    private final boolean showversion;
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   140
06bc494ca11e Initial load
duke
parents:
diff changeset
   141
    /**
06bc494ca11e Initial load
duke
parents:
diff changeset
   142
     * True if we want to use @author tags.
06bc494ca11e Initial load
duke
parents:
diff changeset
   143
     */
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   144
    private final boolean showauthor;
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   145
06bc494ca11e Initial load
duke
parents:
diff changeset
   146
    /**
49879
601277b1d582 8025091: VisibleMemberMap.java possible performance improvements
ksrini
parents: 48029
diff changeset
   147
     * True if we want to use JavaFX-related tags (@defaultValue, @treatAsPrivate).
16319
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14545
diff changeset
   148
     */
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   149
    private final boolean javafx;
16319
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14545
diff changeset
   150
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14545
diff changeset
   151
    /**
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   152
     * Show the taglets table when it has been initialized.
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   153
     */
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   154
    private final boolean showTaglets;
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   155
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   156
    /**
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   157
     * Construct a new {@code TagletManager}.
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   158
     * @param nosince true if we do not want to use @since tags.
06bc494ca11e Initial load
duke
parents:
diff changeset
   159
     * @param showversion true if we want to use @version tags.
06bc494ca11e Initial load
duke
parents:
diff changeset
   160
     * @param showauthor true if we want to use @author tags.
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   161
     * @param javafx indicates whether javafx is active.
44388
4d0903f1f311 8176836: Provide Taglet with context
jjg
parents: 44189
diff changeset
   162
     * @param configuration the configuration for this taglet manager
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   163
     */
06bc494ca11e Initial load
duke
parents:
diff changeset
   164
    public TagletManager(boolean nosince, boolean showversion,
16319
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14545
diff changeset
   165
                         boolean showauthor, boolean javafx,
45417
f7479ee8de69 8177848: Rename Configuration(Impl) classes
ksrini
parents: 44388
diff changeset
   166
                         BaseConfiguration configuration) {
22163
3651128c74eb 8030244: Update langtools to use Diamond
briangoetz
parents: 22159
diff changeset
   167
        overridenStandardTags = new HashSet<>();
3651128c74eb 8030244: Update langtools to use Diamond
briangoetz
parents: 22159
diff changeset
   168
        potentiallyConflictingTags = new HashSet<>();
3651128c74eb 8030244: Update langtools to use Diamond
briangoetz
parents: 22159
diff changeset
   169
        standardTags = new HashSet<>();
3651128c74eb 8030244: Update langtools to use Diamond
briangoetz
parents: 22159
diff changeset
   170
        standardTagsLowercase = new HashSet<>();
3651128c74eb 8030244: Update langtools to use Diamond
briangoetz
parents: 22159
diff changeset
   171
        unseenCustomTags = new HashSet<>();
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   172
        allTaglets = new LinkedHashMap<>();
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   173
        this.nosince = nosince;
06bc494ca11e Initial load
duke
parents:
diff changeset
   174
        this.showversion = showversion;
06bc494ca11e Initial load
duke
parents:
diff changeset
   175
        this.showauthor = showauthor;
16319
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14545
diff changeset
   176
        this.javafx = javafx;
44388
4d0903f1f311 8176836: Provide Taglet with context
jjg
parents: 44189
diff changeset
   177
        this.docEnv = configuration.docEnv;
4d0903f1f311 8176836: Provide Taglet with context
jjg
parents: 44189
diff changeset
   178
        this.doclet = configuration.doclet;
40303
96a1226aca18 8160697: HTMLWriter needs perf cleanup
jjg
parents: 38918
diff changeset
   179
        this.messages = configuration.getMessages();
96a1226aca18 8160697: HTMLWriter needs perf cleanup
jjg
parents: 38918
diff changeset
   180
        this.resources = configuration.getResources();
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   181
        this.showTaglets = configuration.showTaglets;
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   182
        this.utils = configuration.utils;
17573
0e20dec17c87 8012311: Cleanup names and duplicatre code in TagletManager
jjg
parents: 17572
diff changeset
   183
        initStandardTaglets();
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   184
    }
06bc494ca11e Initial load
duke
parents:
diff changeset
   185
06bc494ca11e Initial load
duke
parents:
diff changeset
   186
    /**
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   187
     * Add a new {@code Taglet}.  This is used to add a Taglet from within
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   188
     * a Doclet.  No message is printed to indicate that the Taglet is properly
06bc494ca11e Initial load
duke
parents:
diff changeset
   189
     * registered because these Taglets are typically added for every execution of the
06bc494ca11e Initial load
duke
parents:
diff changeset
   190
     * Doclet.  We don't want to see this type of error message every time.
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   191
     * @param customTag the new {@code Taglet} to add.
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   192
     */
06bc494ca11e Initial load
duke
parents:
diff changeset
   193
    public void addCustomTag(Taglet customTag) {
06bc494ca11e Initial load
duke
parents:
diff changeset
   194
        if (customTag != null) {
06bc494ca11e Initial load
duke
parents:
diff changeset
   195
            String name = customTag.getName();
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   196
            allTaglets.remove(name);
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   197
            allTaglets.put(name, customTag);
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   198
            checkTagName(name);
06bc494ca11e Initial load
duke
parents:
diff changeset
   199
        }
06bc494ca11e Initial load
duke
parents:
diff changeset
   200
    }
06bc494ca11e Initial load
duke
parents:
diff changeset
   201
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   202
    public Set<String> getAllTagletNames() {
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   203
        return allTaglets.keySet();
21500
475e59d3b40c 8006248: Since addition of -Xdoclint, javadoc ignores unknown tags
bpatel
parents: 18659
diff changeset
   204
    }
475e59d3b40c 8006248: Since addition of -Xdoclint, javadoc ignores unknown tags
bpatel
parents: 18659
diff changeset
   205
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   206
    /**
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   207
     * Add a new {@code Taglet}.  Print a message to indicate whether or not
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   208
     * the Taglet was registered properly.
06bc494ca11e Initial load
duke
parents:
diff changeset
   209
     * @param classname  the name of the class representing the custom tag.
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   210
     * @param fileManager the filemanager to load classes and resources.
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   211
     * @param tagletPath  the path to the class representing the custom tag.
06bc494ca11e Initial load
duke
parents:
diff changeset
   212
     */
14545
2e7bab0639b8 6493690: javadoc should have a javax.tools.Tool service provider installed in tools.jar
jjg
parents: 14368
diff changeset
   213
    public void addCustomTag(String classname, JavaFileManager fileManager, String tagletPath) {
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   214
        try {
44388
4d0903f1f311 8176836: Provide Taglet with context
jjg
parents: 44189
diff changeset
   215
            ClassLoader tagClassLoader;
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   216
            if (!fileManager.hasLocation(TAGLET_PATH)) {
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   217
                List<File> paths = new ArrayList<>();
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   218
                if (tagletPath != null) {
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   219
                    for (String pathname : tagletPath.split(File.pathSeparator)) {
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   220
                        paths.add(new File(pathname));
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   221
                    }
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   222
                }
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   223
                if (fileManager instanceof StandardJavaFileManager) {
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   224
                    ((StandardJavaFileManager) fileManager).setLocation(TAGLET_PATH, paths);
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   225
                }
06bc494ca11e Initial load
duke
parents:
diff changeset
   226
            }
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   227
            tagClassLoader = fileManager.getClassLoader(TAGLET_PATH);
44388
4d0903f1f311 8176836: Provide Taglet with context
jjg
parents: 44189
diff changeset
   228
            Class<? extends jdk.javadoc.doclet.Taglet> customTagClass =
4d0903f1f311 8176836: Provide Taglet with context
jjg
parents: 44189
diff changeset
   229
                    tagClassLoader.loadClass(classname).asSubclass(jdk.javadoc.doclet.Taglet.class);
4d0903f1f311 8176836: Provide Taglet with context
jjg
parents: 44189
diff changeset
   230
            jdk.javadoc.doclet.Taglet instance = customTagClass.getConstructor().newInstance();
4d0903f1f311 8176836: Provide Taglet with context
jjg
parents: 44189
diff changeset
   231
            instance.init(docEnv, doclet);
4d0903f1f311 8176836: Provide Taglet with context
jjg
parents: 44189
diff changeset
   232
            Taglet newLegacy = new UserTaglet(instance);
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   233
            String tname = newLegacy.getName();
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   234
            Taglet t = allTaglets.get(tname);
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   235
            if (t != null) {
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   236
                allTaglets.remove(tname);
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   237
            }
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   238
            allTaglets.put(tname, newLegacy);
40303
96a1226aca18 8160697: HTMLWriter needs perf cleanup
jjg
parents: 38918
diff changeset
   239
            messages.notice("doclet.Notice_taglet_registered", classname);
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   240
        } catch (Exception exc) {
40303
96a1226aca18 8160697: HTMLWriter needs perf cleanup
jjg
parents: 38918
diff changeset
   241
            messages.error("doclet.Error_taglet_not_registered", exc.getClass().getName(), classname);
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   242
        }
06bc494ca11e Initial load
duke
parents:
diff changeset
   243
    }
06bc494ca11e Initial load
duke
parents:
diff changeset
   244
06bc494ca11e Initial load
duke
parents:
diff changeset
   245
    /**
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   246
     * Add a new {@code SimpleTaglet}.  If this tag already exists
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   247
     * and the header passed as an argument is null, move tag to the back of the
06bc494ca11e Initial load
duke
parents:
diff changeset
   248
     * list. If this tag already exists and the header passed as an argument is
06bc494ca11e Initial load
duke
parents:
diff changeset
   249
     * not null, overwrite previous tag with new one.  Otherwise, add new
06bc494ca11e Initial load
duke
parents:
diff changeset
   250
     * SimpleTaglet to list.
06bc494ca11e Initial load
duke
parents:
diff changeset
   251
     * @param tagName the name of this tag
06bc494ca11e Initial load
duke
parents:
diff changeset
   252
     * @param header the header to output.
06bc494ca11e Initial load
duke
parents:
diff changeset
   253
     * @param locations the possible locations that this tag
06bc494ca11e Initial load
duke
parents:
diff changeset
   254
     * can appear in.
06bc494ca11e Initial load
duke
parents:
diff changeset
   255
     */
06bc494ca11e Initial load
duke
parents:
diff changeset
   256
    public void addNewSimpleCustomTag(String tagName, String header, String locations) {
06bc494ca11e Initial load
duke
parents:
diff changeset
   257
        if (tagName == null || locations == null) {
06bc494ca11e Initial load
duke
parents:
diff changeset
   258
            return;
06bc494ca11e Initial load
duke
parents:
diff changeset
   259
        }
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   260
        Taglet tag = allTaglets.get(tagName);
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   261
        if (tag == null || header != null) {
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   262
            allTaglets.remove(tagName);
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   263
            allTaglets.put(tagName, new SimpleTaglet(tagName, header, locations));
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   264
            if (Utils.toLowerCase(locations).indexOf('x') == -1) {
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   265
                checkTagName(tagName);
06bc494ca11e Initial load
duke
parents:
diff changeset
   266
            }
06bc494ca11e Initial load
duke
parents:
diff changeset
   267
        } else {
06bc494ca11e Initial load
duke
parents:
diff changeset
   268
            //Move to back
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   269
            allTaglets.remove(tagName);
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   270
            allTaglets.put(tagName, tag);
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   271
        }
06bc494ca11e Initial load
duke
parents:
diff changeset
   272
    }
06bc494ca11e Initial load
duke
parents:
diff changeset
   273
06bc494ca11e Initial load
duke
parents:
diff changeset
   274
    /**
06bc494ca11e Initial load
duke
parents:
diff changeset
   275
     * Given a tag name, add it to the set of tags it belongs to.
06bc494ca11e Initial load
duke
parents:
diff changeset
   276
     */
06bc494ca11e Initial load
duke
parents:
diff changeset
   277
    private void checkTagName(String name) {
06bc494ca11e Initial load
duke
parents:
diff changeset
   278
        if (standardTags.contains(name)) {
06bc494ca11e Initial load
duke
parents:
diff changeset
   279
            overridenStandardTags.add(name);
06bc494ca11e Initial load
duke
parents:
diff changeset
   280
        } else {
06bc494ca11e Initial load
duke
parents:
diff changeset
   281
            if (name.indexOf('.') == -1) {
06bc494ca11e Initial load
duke
parents:
diff changeset
   282
                potentiallyConflictingTags.add(name);
06bc494ca11e Initial load
duke
parents:
diff changeset
   283
            }
06bc494ca11e Initial load
duke
parents:
diff changeset
   284
            unseenCustomTags.add(name);
06bc494ca11e Initial load
duke
parents:
diff changeset
   285
        }
06bc494ca11e Initial load
duke
parents:
diff changeset
   286
    }
06bc494ca11e Initial load
duke
parents:
diff changeset
   287
06bc494ca11e Initial load
duke
parents:
diff changeset
   288
    /**
06bc494ca11e Initial load
duke
parents:
diff changeset
   289
     * Given a name of a seen custom tag, remove it from the set of unseen
06bc494ca11e Initial load
duke
parents:
diff changeset
   290
     * custom tags.
06bc494ca11e Initial load
duke
parents:
diff changeset
   291
     * @param name the name of the seen custom tag.
06bc494ca11e Initial load
duke
parents:
diff changeset
   292
     */
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   293
    void seenCustomTag(String name) {
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   294
        unseenCustomTags.remove(name);
06bc494ca11e Initial load
duke
parents:
diff changeset
   295
    }
06bc494ca11e Initial load
duke
parents:
diff changeset
   296
06bc494ca11e Initial load
duke
parents:
diff changeset
   297
    /**
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   298
     * Given a series of {@code DocTree}s, check for spelling mistakes.
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   299
     * @param element the tags holder
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   300
     * @param trees the trees containing the comments
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   301
     * @param areInlineTags true if the array of tags are inline and false otherwise.
06bc494ca11e Initial load
duke
parents:
diff changeset
   302
     */
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   303
    public void checkTags(Element element, Iterable<? extends DocTree> trees, boolean areInlineTags) {
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   304
        if (trees == null) {
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   305
            return;
06bc494ca11e Initial load
duke
parents:
diff changeset
   306
        }
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   307
        CommentHelper ch = utils.getCommentHelper(element);
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   308
        for (DocTree tag : trees) {
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   309
            String name = tag.getKind().tagName;
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   310
            if (name == null) {
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   311
                continue;
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   312
            }
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   313
            if (name.length() > 0 && name.charAt(0) == '@') {
06bc494ca11e Initial load
duke
parents:
diff changeset
   314
                name = name.substring(1, name.length());
06bc494ca11e Initial load
duke
parents:
diff changeset
   315
            }
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   316
            if (! (standardTags.contains(name) || allTaglets.containsKey(name))) {
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   317
                if (standardTagsLowercase.contains(Utils.toLowerCase(name))) {
40303
96a1226aca18 8160697: HTMLWriter needs perf cleanup
jjg
parents: 38918
diff changeset
   318
                    messages.warning(ch.getDocTreePath(tag), "doclet.UnknownTagLowercase", ch.getTagName(tag));
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   319
                    continue;
06bc494ca11e Initial load
duke
parents:
diff changeset
   320
                } else {
40303
96a1226aca18 8160697: HTMLWriter needs perf cleanup
jjg
parents: 38918
diff changeset
   321
                    messages.warning(ch.getDocTreePath(tag), "doclet.UnknownTag", ch.getTagName(tag));
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   322
                    continue;
06bc494ca11e Initial load
duke
parents:
diff changeset
   323
                }
06bc494ca11e Initial load
duke
parents:
diff changeset
   324
            }
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   325
            final Taglet taglet = allTaglets.get(name);
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   326
            // Check and verify tag usage
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   327
            if (taglet != null) {
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   328
                if (areInlineTags && !taglet.isInlineTag()) {
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   329
                    printTagMisuseWarn(ch, taglet, tag, "inline");
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   330
                }
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   331
                // nothing more to do
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   332
                if (element == null) {
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   333
                    return;
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   334
                }
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   335
                new SimpleElementVisitor9<Void, Void>() {
40606
eb2c81860c86 8164836: TEST_BUG: adjust scope of the DefinedByAnalyzer in tools/all/RunCodingRules.java
jlahoda
parents: 40303
diff changeset
   336
                    @Override
38911
48a00b5ee366 8156077: Support javadoc tags in module documentation
bpatel
parents: 37759
diff changeset
   337
                    public Void visitModule(ModuleElement e, Void p) {
48a00b5ee366 8156077: Support javadoc tags in module documentation
bpatel
parents: 37759
diff changeset
   338
                        if (!taglet.inModule()) {
48a00b5ee366 8156077: Support javadoc tags in module documentation
bpatel
parents: 37759
diff changeset
   339
                            printTagMisuseWarn(utils.getCommentHelper(e), taglet, tag, "module");
48a00b5ee366 8156077: Support javadoc tags in module documentation
bpatel
parents: 37759
diff changeset
   340
                        }
48a00b5ee366 8156077: Support javadoc tags in module documentation
bpatel
parents: 37759
diff changeset
   341
                        return null;
48a00b5ee366 8156077: Support javadoc tags in module documentation
bpatel
parents: 37759
diff changeset
   342
                    }
48a00b5ee366 8156077: Support javadoc tags in module documentation
bpatel
parents: 37759
diff changeset
   343
40606
eb2c81860c86 8164836: TEST_BUG: adjust scope of the DefinedByAnalyzer in tools/all/RunCodingRules.java
jlahoda
parents: 40303
diff changeset
   344
                    @Override
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   345
                    public Void visitPackage(PackageElement e, Void p) {
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   346
                        if (!taglet.inPackage()) {
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   347
                            printTagMisuseWarn(utils.getCommentHelper(e), taglet, tag, "package");
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   348
                        }
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   349
                        return null;
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   350
                    }
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   351
40606
eb2c81860c86 8164836: TEST_BUG: adjust scope of the DefinedByAnalyzer in tools/all/RunCodingRules.java
jlahoda
parents: 40303
diff changeset
   352
                    @Override
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   353
                    public Void visitType(TypeElement e, Void p) {
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   354
                        if (!taglet.inType()) {
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   355
                            printTagMisuseWarn(utils.getCommentHelper(e), taglet, tag, "class");
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   356
                        }
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   357
                        return null;
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   358
                    }
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   359
40606
eb2c81860c86 8164836: TEST_BUG: adjust scope of the DefinedByAnalyzer in tools/all/RunCodingRules.java
jlahoda
parents: 40303
diff changeset
   360
                    @Override
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   361
                    public Void visitExecutable(ExecutableElement e, Void p) {
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   362
                        if (utils.isConstructor(e) && !taglet.inConstructor()) {
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   363
                            printTagMisuseWarn(utils.getCommentHelper(e), taglet, tag, "constructor");
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   364
                        } else if (!taglet.inMethod()) {
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   365
                            printTagMisuseWarn(utils.getCommentHelper(e), taglet, tag, "method");
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   366
                        }
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   367
                        return null;
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   368
                    }
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   369
40606
eb2c81860c86 8164836: TEST_BUG: adjust scope of the DefinedByAnalyzer in tools/all/RunCodingRules.java
jlahoda
parents: 40303
diff changeset
   370
                    @Override
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   371
                    public Void visitVariable(VariableElement e, Void p) {
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   372
                        if (utils.isField(e) && !taglet.inField()) {
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   373
                            printTagMisuseWarn(utils.getCommentHelper(e), taglet, tag, "field");
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   374
                        }
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   375
                        return null;
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   376
                    }
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   377
40606
eb2c81860c86 8164836: TEST_BUG: adjust scope of the DefinedByAnalyzer in tools/all/RunCodingRules.java
jlahoda
parents: 40303
diff changeset
   378
                    @Override
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   379
                    public Void visitUnknown(Element e, Void p) {
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   380
                        if (utils.isOverviewElement(e) && !taglet.inOverview()) {
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   381
                            printTagMisuseWarn(utils.getCommentHelper(e), taglet, tag, "overview");
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   382
                        }
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   383
                        return null;
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   384
                    }
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   385
40606
eb2c81860c86 8164836: TEST_BUG: adjust scope of the DefinedByAnalyzer in tools/all/RunCodingRules.java
jlahoda
parents: 40303
diff changeset
   386
                    @Override
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   387
                    protected Void defaultAction(Element e, Void p) {
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   388
                        return null;
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   389
                    }
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   390
                }.visit(element);
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   391
            }
06bc494ca11e Initial load
duke
parents:
diff changeset
   392
        }
06bc494ca11e Initial load
duke
parents:
diff changeset
   393
    }
06bc494ca11e Initial load
duke
parents:
diff changeset
   394
06bc494ca11e Initial load
duke
parents:
diff changeset
   395
    /**
06bc494ca11e Initial load
duke
parents:
diff changeset
   396
     * Given the taglet, the tag and the type of documentation that the tag
06bc494ca11e Initial load
duke
parents:
diff changeset
   397
     * was found in, print a tag misuse warning.
06bc494ca11e Initial load
duke
parents:
diff changeset
   398
     * @param taglet the taglet representing the misused tag.
06bc494ca11e Initial load
duke
parents:
diff changeset
   399
     * @param tag the misused tag.
06bc494ca11e Initial load
duke
parents:
diff changeset
   400
     * @param holderType the type of documentation that the misused tag was found in.
06bc494ca11e Initial load
duke
parents:
diff changeset
   401
     */
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   402
    private void printTagMisuseWarn(CommentHelper ch, Taglet taglet, DocTree tag, String holderType) {
22163
3651128c74eb 8030244: Update langtools to use Diamond
briangoetz
parents: 22159
diff changeset
   403
        Set<String> locationsSet = new LinkedHashSet<>();
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   404
        // The following names should be localized
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   405
        if (taglet.inOverview()) {
06bc494ca11e Initial load
duke
parents:
diff changeset
   406
            locationsSet.add("overview");
06bc494ca11e Initial load
duke
parents:
diff changeset
   407
        }
38911
48a00b5ee366 8156077: Support javadoc tags in module documentation
bpatel
parents: 37759
diff changeset
   408
        if (taglet.inModule()) {
48a00b5ee366 8156077: Support javadoc tags in module documentation
bpatel
parents: 37759
diff changeset
   409
            locationsSet.add("module");
48a00b5ee366 8156077: Support javadoc tags in module documentation
bpatel
parents: 37759
diff changeset
   410
        }
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   411
        if (taglet.inPackage()) {
06bc494ca11e Initial load
duke
parents:
diff changeset
   412
            locationsSet.add("package");
06bc494ca11e Initial load
duke
parents:
diff changeset
   413
        }
06bc494ca11e Initial load
duke
parents:
diff changeset
   414
        if (taglet.inType()) {
06bc494ca11e Initial load
duke
parents:
diff changeset
   415
            locationsSet.add("class/interface");
06bc494ca11e Initial load
duke
parents:
diff changeset
   416
        }
06bc494ca11e Initial load
duke
parents:
diff changeset
   417
        if (taglet.inConstructor())  {
06bc494ca11e Initial load
duke
parents:
diff changeset
   418
            locationsSet.add("constructor");
06bc494ca11e Initial load
duke
parents:
diff changeset
   419
        }
06bc494ca11e Initial load
duke
parents:
diff changeset
   420
        if (taglet.inField()) {
06bc494ca11e Initial load
duke
parents:
diff changeset
   421
            locationsSet.add("field");
06bc494ca11e Initial load
duke
parents:
diff changeset
   422
        }
06bc494ca11e Initial load
duke
parents:
diff changeset
   423
        if (taglet.inMethod()) {
06bc494ca11e Initial load
duke
parents:
diff changeset
   424
            locationsSet.add("method");
06bc494ca11e Initial load
duke
parents:
diff changeset
   425
        }
06bc494ca11e Initial load
duke
parents:
diff changeset
   426
        if (taglet.isInlineTag()) {
06bc494ca11e Initial load
duke
parents:
diff changeset
   427
            locationsSet.add("inline text");
06bc494ca11e Initial load
duke
parents:
diff changeset
   428
        }
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   429
        if (locationsSet.isEmpty()) {
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   430
            //This known tag is excluded.
06bc494ca11e Initial load
duke
parents:
diff changeset
   431
            return;
06bc494ca11e Initial load
duke
parents:
diff changeset
   432
        }
14263
473b1eaede64 8000310: Clean up use of StringBuffer in langtools
jjg
parents: 14260
diff changeset
   433
        StringBuilder combined_locations = new StringBuilder();
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   434
        for (String location: locationsSet) {
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   435
            if (combined_locations.length() > 0) {
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   436
                combined_locations.append(", ");
06bc494ca11e Initial load
duke
parents:
diff changeset
   437
            }
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   438
            combined_locations.append(location);
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   439
        }
40303
96a1226aca18 8160697: HTMLWriter needs perf cleanup
jjg
parents: 38918
diff changeset
   440
        messages.warning(ch.getDocTreePath(tag), "doclet.tag_misuse",
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   441
            "@" + taglet.getName(), holderType, combined_locations.toString());
06bc494ca11e Initial load
duke
parents:
diff changeset
   442
    }
06bc494ca11e Initial load
duke
parents:
diff changeset
   443
06bc494ca11e Initial load
duke
parents:
diff changeset
   444
    /**
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   445
     * Returns the taglets that can appear inline, in descriptive text.
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   446
     * @return the taglets that can appear inline
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   447
     */
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   448
    List<Taglet> getInlineTaglets() {
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   449
        if (inlineTags == null) {
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   450
            initBlockTaglets();
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   451
        }
06bc494ca11e Initial load
duke
parents:
diff changeset
   452
        return inlineTags;
06bc494ca11e Initial load
duke
parents:
diff changeset
   453
    }
06bc494ca11e Initial load
duke
parents:
diff changeset
   454
06bc494ca11e Initial load
duke
parents:
diff changeset
   455
    /**
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   456
     * Returns the taglets that can appear in the serialized form.
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   457
     * @return the taglet that can appear in the serialized form
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   458
     */
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   459
    public List<Taglet> getSerializedFormTaglets() {
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   460
        if (serializedFormTags == null) {
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   461
            initBlockTaglets();
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   462
        }
06bc494ca11e Initial load
duke
parents:
diff changeset
   463
        return serializedFormTags;
06bc494ca11e Initial load
duke
parents:
diff changeset
   464
    }
06bc494ca11e Initial load
duke
parents:
diff changeset
   465
06bc494ca11e Initial load
duke
parents:
diff changeset
   466
    /**
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   467
     * Returns the custom tags for a given element.
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   468
     *
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   469
     * @param e the element to get custom tags for
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   470
     * @return the array of {@code Taglet}s that can
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   471
     * appear in the given element.
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   472
     */
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   473
    @SuppressWarnings("fallthrough")
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   474
    public List<Taglet> getBlockTaglets(Element e) {
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   475
        if (blockTagletsBySite == null) {
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   476
            initBlockTaglets();
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   477
        }
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   478
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   479
        switch (e.getKind()) {
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   480
            case CONSTRUCTOR:
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   481
                return blockTagletsBySite.get(Site.CONSTRUCTOR);
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   482
            case METHOD:
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   483
                return blockTagletsBySite.get(Site.METHOD);
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   484
            case ENUM_CONSTANT:
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   485
            case FIELD:
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   486
                return blockTagletsBySite.get(Site.FIELD);
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   487
            case ANNOTATION_TYPE:
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   488
            case INTERFACE:
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   489
            case CLASS:
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   490
            case ENUM:
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   491
                return blockTagletsBySite.get(Site.TYPE);
38911
48a00b5ee366 8156077: Support javadoc tags in module documentation
bpatel
parents: 37759
diff changeset
   492
            case MODULE:
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   493
                return blockTagletsBySite.get(Site.MODULE);
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   494
            case PACKAGE:
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   495
                return blockTagletsBySite.get(Site.PACKAGE);
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   496
            case OTHER:
48029
e9dab2492924 8185985: Html files in doc-files directories should be wrapped with standard header and footer
ksrini
parents: 47216
diff changeset
   497
                if (e instanceof DocletElement) {
e9dab2492924 8185985: Html files in doc-files directories should be wrapped with standard header and footer
ksrini
parents: 47216
diff changeset
   498
                    DocletElement de = (DocletElement)e;
e9dab2492924 8185985: Html files in doc-files directories should be wrapped with standard header and footer
ksrini
parents: 47216
diff changeset
   499
                    switch (de.getSubKind()) {
e9dab2492924 8185985: Html files in doc-files directories should be wrapped with standard header and footer
ksrini
parents: 47216
diff changeset
   500
                        case DOCFILE:
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   501
                            return blockTagletsBySite.get(Site.PACKAGE);
48029
e9dab2492924 8185985: Html files in doc-files directories should be wrapped with standard header and footer
ksrini
parents: 47216
diff changeset
   502
                        case OVERVIEW:
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   503
                            return blockTagletsBySite.get(Site.OVERVIEW);
48029
e9dab2492924 8185985: Html files in doc-files directories should be wrapped with standard header and footer
ksrini
parents: 47216
diff changeset
   504
                        default:
e9dab2492924 8185985: Html files in doc-files directories should be wrapped with standard header and footer
ksrini
parents: 47216
diff changeset
   505
                            // fall through
e9dab2492924 8185985: Html files in doc-files directories should be wrapped with standard header and footer
ksrini
parents: 47216
diff changeset
   506
                    }
e9dab2492924 8185985: Html files in doc-files directories should be wrapped with standard header and footer
ksrini
parents: 47216
diff changeset
   507
                }
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   508
                // fall through
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   509
            default:
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   510
                throw new AssertionError("unknown element: " + e + " ,kind: " + e.getKind());
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   511
        }
06bc494ca11e Initial load
duke
parents:
diff changeset
   512
    }
06bc494ca11e Initial load
duke
parents:
diff changeset
   513
06bc494ca11e Initial load
duke
parents:
diff changeset
   514
    /**
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   515
     * Initialize the custom tag Lists.
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   516
     */
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   517
    private void initBlockTaglets() {
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   518
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   519
        blockTagletsBySite = new EnumMap<>(Site.class);
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   520
        for (Site site : Site.values()) {
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   521
            blockTagletsBySite.put(site, new ArrayList<>());
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   522
        }
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   523
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   524
        inlineTags = new ArrayList<>();
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   525
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   526
        for (Taglet current : allTaglets.values()) {
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   527
            if (current.isInlineTag()) {
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   528
                inlineTags.add(current);
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   529
            } else {
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   530
                if (current.inOverview()) {
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   531
                    blockTagletsBySite.get(Site.OVERVIEW).add(current);
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   532
                }
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   533
                if (current.inModule()) {
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   534
                    blockTagletsBySite.get(Site.MODULE).add(current);
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   535
                }
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   536
                if (current.inPackage()) {
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   537
                    blockTagletsBySite.get(Site.PACKAGE).add(current);
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   538
                }
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   539
                if (current.inType()) {
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   540
                    blockTagletsBySite.get(Site.TYPE).add(current);
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   541
                }
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   542
                if (current.inConstructor()) {
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   543
                    blockTagletsBySite.get(Site.CONSTRUCTOR).add(current);
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   544
                }
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   545
                if (current.inMethod()) {
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   546
                    blockTagletsBySite.get(Site.METHOD).add(current);
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   547
                }
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   548
                if (current.inField()) {
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   549
                    blockTagletsBySite.get(Site.FIELD).add(current);
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   550
                }
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   551
            }
06bc494ca11e Initial load
duke
parents:
diff changeset
   552
        }
06bc494ca11e Initial load
duke
parents:
diff changeset
   553
06bc494ca11e Initial load
duke
parents:
diff changeset
   554
        //Init the serialized form tags
35426
374342e56a56 8035473: [javadoc] Revamp the existing Doclet APIs
ksrini
parents: 33920
diff changeset
   555
        serializedFormTags = new ArrayList<>();
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   556
        serializedFormTags.add(allTaglets.get(SERIAL_DATA.tagName));
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   557
        serializedFormTags.add(allTaglets.get(THROWS.tagName));
13842
6908f6badce4 7180906: Javadoc tool does not apply parameter -nosince
bpatel
parents: 5520
diff changeset
   558
        if (!nosince)
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   559
            serializedFormTags.add(allTaglets.get(SINCE.tagName));
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   560
        serializedFormTags.add(allTaglets.get(SEE.tagName));
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   561
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   562
        if (showTaglets) {
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   563
            showTaglets(System.out);
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   564
        }
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   565
    }
06bc494ca11e Initial load
duke
parents:
diff changeset
   566
06bc494ca11e Initial load
duke
parents:
diff changeset
   567
    /**
06bc494ca11e Initial load
duke
parents:
diff changeset
   568
     * Initialize standard Javadoc tags for ordering purposes.
06bc494ca11e Initial load
duke
parents:
diff changeset
   569
     */
17573
0e20dec17c87 8012311: Cleanup names and duplicatre code in TagletManager
jjg
parents: 17572
diff changeset
   570
    private void initStandardTaglets() {
18659
5fe5650da7f9 8015720: since tag isn't copied while generating JavaFX documentation
janvalenta
parents: 17573
diff changeset
   571
        if (javafx) {
5fe5650da7f9 8015720: since tag isn't copied while generating JavaFX documentation
janvalenta
parents: 17573
diff changeset
   572
            initJavaFXTaglets();
5fe5650da7f9 8015720: since tag isn't copied while generating JavaFX documentation
janvalenta
parents: 17573
diff changeset
   573
        }
5fe5650da7f9 8015720: since tag isn't copied while generating JavaFX documentation
janvalenta
parents: 17573
diff changeset
   574
17573
0e20dec17c87 8012311: Cleanup names and duplicatre code in TagletManager
jjg
parents: 17572
diff changeset
   575
        addStandardTaglet(new ParamTaglet());
0e20dec17c87 8012311: Cleanup names and duplicatre code in TagletManager
jjg
parents: 17572
diff changeset
   576
        addStandardTaglet(new ReturnTaglet());
0e20dec17c87 8012311: Cleanup names and duplicatre code in TagletManager
jjg
parents: 17572
diff changeset
   577
        addStandardTaglet(new ThrowsTaglet());
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   578
        addStandardTaglet(
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   579
                new SimpleTaglet(EXCEPTION.tagName, null,
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   580
                    EnumSet.of(Site.METHOD, Site.CONSTRUCTOR)));
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   581
        addStandardTaglet(
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   582
                new SimpleTaglet(SINCE.tagName, resources.getText("doclet.Since"),
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   583
                    EnumSet.allOf(Site.class), !nosince));
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   584
        addStandardTaglet(
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   585
                new SimpleTaglet(VERSION.tagName, resources.getText("doclet.Version"),
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   586
                    EnumSet.of(Site.OVERVIEW, Site.MODULE, Site.PACKAGE, Site.TYPE), showversion));
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   587
        addStandardTaglet(
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   588
                new SimpleTaglet(AUTHOR.tagName, resources.getText("doclet.Author"),
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   589
                    EnumSet.of(Site.OVERVIEW, Site.MODULE, Site.PACKAGE, Site.TYPE), showauthor));
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   590
        addStandardTaglet(
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   591
                new SimpleTaglet(SERIAL_DATA.tagName, resources.getText("doclet.SerialData"),
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   592
                    EnumSet.noneOf(Site.class)));
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   593
        addStandardTaglet(
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   594
                new SimpleTaglet(HIDDEN.tagName, null,
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   595
                    EnumSet.of(Site.TYPE, Site.METHOD, Site.FIELD)));
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   596
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   597
        // This appears to be a default custom (non-standard) taglet
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   598
        Taglet factoryTaglet = new SimpleTaglet("factory", resources.getText("doclet.Factory"),
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   599
                EnumSet.of(Site.METHOD));
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   600
        allTaglets.put(factoryTaglet.getName(), factoryTaglet);
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   601
17573
0e20dec17c87 8012311: Cleanup names and duplicatre code in TagletManager
jjg
parents: 17572
diff changeset
   602
        addStandardTaglet(new SeeTaglet());
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   603
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   604
        // Standard inline tags
17573
0e20dec17c87 8012311: Cleanup names and duplicatre code in TagletManager
jjg
parents: 17572
diff changeset
   605
        addStandardTaglet(new DocRootTaglet());
0e20dec17c87 8012311: Cleanup names and duplicatre code in TagletManager
jjg
parents: 17572
diff changeset
   606
        addStandardTaglet(new InheritDocTaglet());
0e20dec17c87 8012311: Cleanup names and duplicatre code in TagletManager
jjg
parents: 17572
diff changeset
   607
        addStandardTaglet(new ValueTaglet());
0e20dec17c87 8012311: Cleanup names and duplicatre code in TagletManager
jjg
parents: 17572
diff changeset
   608
        addStandardTaglet(new LiteralTaglet());
0e20dec17c87 8012311: Cleanup names and duplicatre code in TagletManager
jjg
parents: 17572
diff changeset
   609
        addStandardTaglet(new CodeTaglet());
33920
bd731341c405 8141492: Implement search feature in javadoc
bpatel
parents: 25874
diff changeset
   610
        addStandardTaglet(new IndexTaglet());
46184
f1325703ea85 8173425: Javadoc needs a new tag to specify the summary.
ksrini
parents: 45417
diff changeset
   611
        addStandardTaglet(new SummaryTaglet());
52487
5d1d07b72f15 5076751: System properties documentation needed in javadocs
pmuthuswamy
parents: 50240
diff changeset
   612
        addStandardTaglet(new SystemPropertyTaglet());
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   613
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   614
        // Keep track of the names of standard tags for error checking purposes.
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   615
        // The following are not handled above.
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   616
        addStandardTaglet(new DeprecatedTaglet());
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   617
        addStandardTaglet(new BaseTaglet(LINK.tagName, true, EnumSet.allOf(Site.class)));
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   618
        addStandardTaglet(new BaseTaglet(LINK_PLAIN.tagName, true, EnumSet.allOf(Site.class)));
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   619
        addStandardTaglet(new BaseTaglet(USES.tagName, false, EnumSet.of(Site.MODULE)));
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   620
        addStandardTaglet(new BaseTaglet(PROVIDES.tagName, false, EnumSet.of(Site.MODULE)));
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   621
        addStandardTaglet(
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   622
                new SimpleTaglet(SERIAL.tagName, null,
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   623
                    EnumSet.of(Site.PACKAGE, Site.TYPE, Site.FIELD)));
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   624
        addStandardTaglet(
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   625
                new SimpleTaglet(SERIAL_FIELD.tagName, null, EnumSet.of(Site.FIELD)));
16319
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14545
diff changeset
   626
    }
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14545
diff changeset
   627
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14545
diff changeset
   628
    /**
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14545
diff changeset
   629
     * Initialize JavaFX-related tags.
e586bfeb39c5 7112427: The doclet needs to be able to generate JavaFX documentation.
jjg
parents: 14545
diff changeset
   630
     */
17573
0e20dec17c87 8012311: Cleanup names and duplicatre code in TagletManager
jjg
parents: 17572
diff changeset
   631
    private void initJavaFXTaglets() {
0e20dec17c87 8012311: Cleanup names and duplicatre code in TagletManager
jjg
parents: 17572
diff changeset
   632
        addStandardTaglet(new PropertyGetterTaglet());
0e20dec17c87 8012311: Cleanup names and duplicatre code in TagletManager
jjg
parents: 17572
diff changeset
   633
        addStandardTaglet(new PropertySetterTaglet());
0e20dec17c87 8012311: Cleanup names and duplicatre code in TagletManager
jjg
parents: 17572
diff changeset
   634
        addStandardTaglet(new SimpleTaglet("propertyDescription",
40303
96a1226aca18 8160697: HTMLWriter needs perf cleanup
jjg
parents: 38918
diff changeset
   635
                resources.getText("doclet.PropertyDescription"),
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   636
                EnumSet.of(Site.METHOD, Site.FIELD)));
40303
96a1226aca18 8160697: HTMLWriter needs perf cleanup
jjg
parents: 38918
diff changeset
   637
        addStandardTaglet(new SimpleTaglet("defaultValue", resources.getText("doclet.DefaultValue"),
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   638
                EnumSet.of(Site.METHOD, Site.FIELD)));
17573
0e20dec17c87 8012311: Cleanup names and duplicatre code in TagletManager
jjg
parents: 17572
diff changeset
   639
        addStandardTaglet(new SimpleTaglet("treatAsPrivate", null,
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   640
                EnumSet.of(Site.TYPE, Site.METHOD, Site.FIELD)));
17573
0e20dec17c87 8012311: Cleanup names and duplicatre code in TagletManager
jjg
parents: 17572
diff changeset
   641
    }
0e20dec17c87 8012311: Cleanup names and duplicatre code in TagletManager
jjg
parents: 17572
diff changeset
   642
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   643
    private void addStandardTaglet(Taglet taglet) {
17573
0e20dec17c87 8012311: Cleanup names and duplicatre code in TagletManager
jjg
parents: 17572
diff changeset
   644
        String name = taglet.getName();
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   645
        allTaglets.put(name, taglet);
17573
0e20dec17c87 8012311: Cleanup names and duplicatre code in TagletManager
jjg
parents: 17572
diff changeset
   646
        standardTags.add(name);
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   647
        standardTagsLowercase.add(Utils.toLowerCase(name));
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   648
    }
06bc494ca11e Initial load
duke
parents:
diff changeset
   649
06bc494ca11e Initial load
duke
parents:
diff changeset
   650
    public boolean isKnownCustomTag(String tagName) {
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   651
        return allTaglets.containsKey(tagName);
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   652
    }
06bc494ca11e Initial load
duke
parents:
diff changeset
   653
06bc494ca11e Initial load
duke
parents:
diff changeset
   654
    /**
06bc494ca11e Initial load
duke
parents:
diff changeset
   655
     * Print a list of {@link Taglet}s that might conflict with
06bc494ca11e Initial load
duke
parents:
diff changeset
   656
     * standard tags in the future and a list of standard tags
06bc494ca11e Initial load
duke
parents:
diff changeset
   657
     * that have been overriden.
06bc494ca11e Initial load
duke
parents:
diff changeset
   658
     */
06bc494ca11e Initial load
duke
parents:
diff changeset
   659
    public void printReport() {
06bc494ca11e Initial load
duke
parents:
diff changeset
   660
        printReportHelper("doclet.Notice_taglet_conflict_warn", potentiallyConflictingTags);
06bc494ca11e Initial load
duke
parents:
diff changeset
   661
        printReportHelper("doclet.Notice_taglet_overriden", overridenStandardTags);
06bc494ca11e Initial load
duke
parents:
diff changeset
   662
        printReportHelper("doclet.Notice_taglet_unseen", unseenCustomTags);
06bc494ca11e Initial load
duke
parents:
diff changeset
   663
    }
06bc494ca11e Initial load
duke
parents:
diff changeset
   664
868
d0f233085cbb 6657907: javadoc has unchecked warnings
jjg
parents: 10
diff changeset
   665
    private void printReportHelper(String noticeKey, Set<String> names) {
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   666
        if (names.size() > 0) {
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   667
            StringBuilder result = new StringBuilder();
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   668
            for (String name : names) {
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   669
                result.append(result.length() == 0 ? " " : ", ");
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   670
                result.append("@").append(name);
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   671
            }
40303
96a1226aca18 8160697: HTMLWriter needs perf cleanup
jjg
parents: 38918
diff changeset
   672
            messages.notice(noticeKey, result);
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   673
        }
06bc494ca11e Initial load
duke
parents:
diff changeset
   674
    }
06bc494ca11e Initial load
duke
parents:
diff changeset
   675
06bc494ca11e Initial load
duke
parents:
diff changeset
   676
    /**
06bc494ca11e Initial load
duke
parents:
diff changeset
   677
     * Given the name of a tag, return the corresponding taglet.
06bc494ca11e Initial load
duke
parents:
diff changeset
   678
     * Return null if the tag is unknown.
06bc494ca11e Initial load
duke
parents:
diff changeset
   679
     *
06bc494ca11e Initial load
duke
parents:
diff changeset
   680
     * @param name the name of the taglet to retrieve.
06bc494ca11e Initial load
duke
parents:
diff changeset
   681
     * @return return the corresponding taglet. Return null if the tag is
06bc494ca11e Initial load
duke
parents:
diff changeset
   682
     *         unknown.
06bc494ca11e Initial load
duke
parents:
diff changeset
   683
     */
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   684
    Taglet getTaglet(String name) {
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   685
        if (name.indexOf("@") == 0) {
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   686
            return allTaglets.get(name.substring(1));
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   687
        } else {
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   688
            return allTaglets.get(name);
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   689
        }
06bc494ca11e Initial load
duke
parents:
diff changeset
   690
06bc494ca11e Initial load
duke
parents:
diff changeset
   691
    }
50240
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   692
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   693
    /*
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   694
     * The output of this method is the basis for a table at the end of the
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   695
     * doc comment specification, so any changes in the output may indicate
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   696
     * a need for a corresponding update to the spec.
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   697
     */
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   698
    private void showTaglets(PrintStream out) {
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   699
        Set<Taglet> taglets = new TreeSet<>((o1, o2) -> o1.getName().compareTo(o2.getName()));
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   700
        taglets.addAll(allTaglets.values());
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   701
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   702
        for (Taglet t : taglets) {
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   703
            String name = t.isInlineTag() ? "{@" + t.getName() + "}" : "@" + t.getName();
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   704
            out.println(String.format("%20s", name) + ": "
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   705
                    + format(t.inOverview(), "overview") + " "
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   706
                    + format(t.inModule(), "module") + " "
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   707
                    + format(t.inPackage(), "package") + " "
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   708
                    + format(t.inType(), "type") + " "
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   709
                    + format(t.inConstructor(),"constructor") + " "
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   710
                    + format(t.inMethod(), "method") + " "
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   711
                    + format(t.inField(), "field") + " "
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   712
                    + format(t.isInlineTag(), "inline")+ " "
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   713
                    + format((t instanceof SimpleTaglet) && !((SimpleTaglet)t).enabled, "disabled"));
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   714
        }
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   715
    }
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   716
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   717
    private String format(boolean b, String s) {
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   718
        return b ? s : s.replaceAll(".", "."); // replace all with "."
b9c483223a91 8202947: Fix minor issues with taglets
jjg
parents: 49879
diff changeset
   719
    }
10
06bc494ca11e Initial load
duke
parents:
diff changeset
   720
}