langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/taglets/TagletManager.java
changeset 38911 48a00b5ee366
parent 37759 f0b5daef41b6
child 38918 bf1ed1a40f5b
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/taglets/TagletManager.java	Thu Jun 09 19:06:36 2016 +0000
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/taglets/TagletManager.java	Thu Jun 09 23:24:05 2016 -0700
@@ -31,6 +31,7 @@
 
 import javax.lang.model.element.Element;
 import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.ModuleElement;
 import javax.lang.model.element.PackageElement;
 import javax.lang.model.element.TypeElement;
 import javax.lang.model.element.VariableElement;
@@ -81,6 +82,11 @@
     private final LinkedHashMap<String,Taglet> customTags;
 
     /**
+     * The array of custom tags that can appear in modules.
+     */
+    private List<Taglet> moduleTags;
+
+    /**
      * The array of custom tags that can appear in packages.
      */
     private List<Taglet> packageTags;
@@ -373,6 +379,14 @@
                 }
                 new SimpleElementVisitor9<Void, Void>() {
                     @Override @DefinedBy(Api.LANGUAGE_MODEL)
+                    public Void visitModule(ModuleElement e, Void p) {
+                        if (!taglet.inModule()) {
+                            printTagMisuseWarn(utils.getCommentHelper(e), taglet, tag, "module");
+                        }
+                        return null;
+                    }
+
+                    @Override @DefinedBy(Api.LANGUAGE_MODEL)
                     public Void visitPackage(PackageElement e, Void p) {
                         if (!taglet.inPackage()) {
                             printTagMisuseWarn(utils.getCommentHelper(e), taglet, tag, "package");
@@ -435,6 +449,9 @@
         if (taglet.inOverview()) {
             locationsSet.add("overview");
         }
+        if (taglet.inModule()) {
+            locationsSet.add("module");
+        }
         if (taglet.inPackage()) {
             locationsSet.add("package");
         }
@@ -471,6 +488,19 @@
 
     /**
      * Return the array of <code>Taglet</code>s that can
+     * appear in modules.
+     * @return the array of <code>Taglet</code>s that can
+     * appear in modules.
+     */
+    public List<Taglet> getModuleCustomTaglets() {
+        if (moduleTags == null) {
+            initCustomTaglets();
+        }
+        return moduleTags;
+    }
+
+    /**
+     * Return the array of <code>Taglet</code>s that can
      * appear in packages.
      * @return the array of <code>Taglet</code>s that can
      * appear in packages.
@@ -555,6 +585,8 @@
             case CLASS:
             case ENUM:
                 return getTypeCustomTaglets();
+            case MODULE:
+                return getModuleCustomTaglets();
             case PACKAGE:
                 return getPackageCustomTaglets();
             case OTHER:
@@ -608,6 +640,7 @@
      */
     private void initCustomTaglets() {
 
+        moduleTags = new ArrayList<>();
         packageTags = new ArrayList<>();
         typeTags = new ArrayList<>();
         fieldTags = new ArrayList<>();
@@ -617,6 +650,9 @@
         overviewTags = new ArrayList<>();
 
         for (Taglet current : customTags.values()) {
+            if (current.inModule() && !current.isInlineTag()) {
+                moduleTags.add(current);
+            }
             if (current.inPackage() && !current.isInlineTag()) {
                 packageTags.add(current);
             }
@@ -666,9 +702,9 @@
         addStandardTaglet(!nosince, new SimpleTaglet(SINCE.tagName, message.getText("doclet.Since"),
                 SimpleTaglet.ALL));
         addStandardTaglet(showversion, new SimpleTaglet(VERSION.tagName, message.getText("doclet.Version"),
-                SimpleTaglet.PACKAGE + SimpleTaglet.TYPE + SimpleTaglet.OVERVIEW));
+                SimpleTaglet.MODULE + SimpleTaglet.PACKAGE + SimpleTaglet.TYPE + SimpleTaglet.OVERVIEW));
         addStandardTaglet(showauthor, new SimpleTaglet(AUTHOR.tagName, message.getText("doclet.Author"),
-                SimpleTaglet.PACKAGE + SimpleTaglet.TYPE + SimpleTaglet.OVERVIEW));
+                SimpleTaglet.MODULE + SimpleTaglet.PACKAGE + SimpleTaglet.TYPE + SimpleTaglet.OVERVIEW));
         addStandardTaglet(new SimpleTaglet(SERIAL_DATA.tagName, message.getText("doclet.SerialData"),
                 SimpleTaglet.EXCLUDED));
         addStandardTaglet(new SimpleTaglet(HIDDEN.tagName, message.getText("doclet.Hidden"),