src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/taglets/Taglet.java

Print this page


   1 /*
   2  * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package com.sun.tools.doclets.internal.toolkit.taglets;
  27 
  28 import com.sun.javadoc.*;
  29 import com.sun.tools.doclets.internal.toolkit.Content;
  30 



  31 /**
  32  * The interface for a custom tag used by Doclets. A custom
  33  * tag must implement this interface.  To be loaded and used by
  34  * doclets at run-time, the taglet must have a static method called
  35  * <code>register</code> that accepts a {@link java.util.Map} as an
  36  * argument with the following signature:
  37  * <pre>
  38  *   public void register(Map map)
  39  * </pre>
  40  * This method should add an instance of the custom taglet to the map
  41  * with the name of the taglet as the key.  If overriding a taglet,
  42  * to avoid a name conflict, the overridden taglet must be deleted from
  43  * the map before an instance of the new taglet is added to the map.
  44  * <p>
  45  * It is recommended that the taglet throw an exception when it fails
  46  * to register itself.  The exception that it throws is up to the user.
  47  * <p>
  48  * Here are two sample taglets: <br>
  49  * <ul>
  50  *     <li><a href="{@docRoot}/ToDoTaglet.java">ToDoTaglet.java</a>
  51  *         - Standalone taglet</li>
  52  *     <li><a href="{@docRoot}/UnderlineTaglet.java">UnderlineTaglet.java</a>
  53  *         - Inline taglet</li>
  54  * </ul>
  55  * <p>
  56  * For more information on how to create your own Taglets, please see the
  57  * <a href="{@docRoot}/overview.html">Taglet Overview</a>.
  58  *
  59  * @since 1.4
  60  * @author Jamie Ho
  61  */
  62 
  63 public interface Taglet {
  64 
  65     /**
  66      * Return true if this <code>Taglet</code>
  67      * is used in field documentation.
  68      * @return true if this <code>Taglet</code>
  69      * is used in field documentation and false
  70      * otherwise.
  71      */
  72     public abstract boolean inField();
  73 
  74     /**
  75      * Return true if this <code>Taglet</code>
  76      * is used in constructor documentation.
  77      * @return true if this <code>Taglet</code>


 118     public abstract boolean inType();
 119 
 120     /**
 121      * Return true if this <code>Taglet</code>
 122      * is an inline tag. Return false otherwise.
 123      * @return true if this <code>Taglet</code>
 124      * is an inline tag and false otherwise.
 125      */
 126     public abstract boolean isInlineTag();
 127 
 128     /**
 129      * Return the name of this custom tag.
 130      * @return the name of this custom tag.
 131      */
 132     public abstract String getName();
 133 
 134     /**
 135      * Given the <code>Tag</code> representation of this custom
 136      * tag, return its Content representation, which is output
 137      * to the generated page.

 138      * @param tag the <code>Tag</code> representation of this custom tag.
 139      * @param writer a {@link TagletWriter} Taglet writer.
 140      * @throws IllegalArgumentException thrown when the method is not supported by the taglet.
 141      * @return the Content representation of this <code>Tag</code>.
 142      */
 143     public abstract Content getTagletOutput(Tag tag, TagletWriter writer) throws IllegalArgumentException;

 144 
 145     /**
 146      * Given a <code>Doc</code> object, check if it holds any tags of
 147      * this type.  If it does, return the string representing the output.
 148      * If it does not, return null.
 149      * @param holder a {@link Doc} object holding the custom tag.
 150      * @param writer a {@link TagletWriter} Taglet writer.
 151      * @throws IllegalArgumentException thrown when the method is not supported by the taglet.

 152      * @return the TagletOutput representation of this <code>Tag</code>.
 153      */
 154     public abstract Content getTagletOutput(Doc holder, TagletWriter writer) throws IllegalArgumentException;

 155 
 156     @Override
 157     public abstract String toString();







 158 }
   1 /*
   2  * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package jdk.javadoc.internal.doclets.toolkit.taglets;
  27 
  28 import javax.lang.model.element.Element;

  29 
  30 import com.sun.source.doctree.DocTree;
  31 import jdk.javadoc.internal.doclets.toolkit.Content;
  32 
  33 /**
  34  * This is the Taglet interface used internally within the doclet.

























  35  *
  36  * @since 1.4
  37  * @author Jamie Ho
  38  */
  39 
  40 public interface Taglet {
  41 
  42     /**
  43      * Return true if this <code>Taglet</code>
  44      * is used in field documentation.
  45      * @return true if this <code>Taglet</code>
  46      * is used in field documentation and false
  47      * otherwise.
  48      */
  49     public abstract boolean inField();
  50 
  51     /**
  52      * Return true if this <code>Taglet</code>
  53      * is used in constructor documentation.
  54      * @return true if this <code>Taglet</code>


  95     public abstract boolean inType();
  96 
  97     /**
  98      * Return true if this <code>Taglet</code>
  99      * is an inline tag. Return false otherwise.
 100      * @return true if this <code>Taglet</code>
 101      * is an inline tag and false otherwise.
 102      */
 103     public abstract boolean isInlineTag();
 104 
 105     /**
 106      * Return the name of this custom tag.
 107      * @return the name of this custom tag.
 108      */
 109     public abstract String getName();
 110 
 111     /**
 112      * Given the <code>Tag</code> representation of this custom
 113      * tag, return its Content representation, which is output
 114      * to the generated page.
 115      * @param holder the element holding the tag
 116      * @param tag the <code>Tag</code> representation of this custom tag.
 117      * @param writer a {@link TagletWriter} Taglet writer.
 118      * @throws UnsupportedOperationException thrown when the method is not supported by the taglet.
 119      * @return the Content representation of this <code>Tag</code>.
 120      */
 121     public abstract Content getTagletOutput(Element holder, DocTree tag, TagletWriter writer) throws
 122             UnsupportedOperationException;
 123 
 124     /**
 125      * Given a <code>Doc</code> object, check if it holds any tags of
 126      * this type.  If it does, return the string representing the output.
 127      * If it does not, return null.
 128      * @param holder a {@link Doc} object holding the custom tag.
 129      * @param writer a {@link TagletWriter} Taglet writer.
 130      * @throws UnsupportedTagletOperationException thrown when the method is not
 131      *         supported by the taglet.
 132      * @return the TagletOutput representation of this <code>Tag</code>.
 133      */
 134     public abstract Content getTagletOutput(Element holder, TagletWriter writer) throws
 135             UnsupportedTagletOperationException;
 136 
 137     @Override
 138     public abstract String toString();
 139 
 140     static class UnsupportedTagletOperationException extends UnsupportedOperationException {
 141         private static final long serialVersionUID = -3530273193380250271L;
 142         public UnsupportedTagletOperationException(String message) {
 143             super(message);
 144         }
 145     };
 146 }