< prev index next >

src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/TagletWriterImpl.java

Print this page
rev 58565 : records: mark record related model API as preview


  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.formats.html;
  27 
  28 import java.util.List;
  29 
  30 import javax.lang.model.element.Element;





  31 import javax.lang.model.element.TypeElement;
  32 import javax.lang.model.element.VariableElement;
  33 import javax.lang.model.type.TypeMirror;
  34 import javax.lang.model.util.SimpleElementVisitor9;
  35 
  36 import com.sun.source.doctree.DocTree;

  37 import com.sun.source.doctree.IndexTree;

  38 import com.sun.source.doctree.SystemPropertyTree;
  39 import jdk.javadoc.internal.doclets.formats.html.markup.ContentBuilder;
  40 import jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle;
  41 import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
  42 import jdk.javadoc.internal.doclets.formats.html.markup.RawHtml;
  43 import jdk.javadoc.internal.doclets.formats.html.markup.StringContent;
  44 import jdk.javadoc.internal.doclets.toolkit.BaseConfiguration;
  45 import jdk.javadoc.internal.doclets.toolkit.Content;
  46 import jdk.javadoc.internal.doclets.toolkit.DocletElement;
  47 import jdk.javadoc.internal.doclets.toolkit.Resources;
  48 import jdk.javadoc.internal.doclets.toolkit.builders.SerializedFormBuilder;
  49 import jdk.javadoc.internal.doclets.toolkit.taglets.TagletWriter;
  50 import jdk.javadoc.internal.doclets.toolkit.util.CommentHelper;
  51 import jdk.javadoc.internal.doclets.toolkit.util.DocLink;
  52 import jdk.javadoc.internal.doclets.toolkit.util.DocPath;
  53 import jdk.javadoc.internal.doclets.toolkit.util.DocPaths;
  54 import jdk.javadoc.internal.doclets.toolkit.util.DocletConstants;
  55 import jdk.javadoc.internal.doclets.toolkit.util.Utils;
  56 
  57 /**


 173      * {@inheritDoc}
 174      */
 175     protected Content literalTagOutput(Element element, DocTree tag) {
 176         CommentHelper ch = utils.getCommentHelper(element);
 177         Content result = new StringContent(utils.normalizeNewlines(ch.getText(tag)));
 178         return result;
 179     }
 180 
 181     /**
 182      * {@inheritDoc}
 183      */
 184     public Content getParamHeader(String header) {
 185         HtmlTree result = HtmlTree.DT(HtmlTree.SPAN(HtmlStyle.paramLabel,
 186                 new StringContent(header)));
 187         return result;
 188     }
 189 
 190     /**
 191      * {@inheritDoc}
 192      */

 193     public Content paramTagOutput(Element element, DocTree paramTag, String paramName) {
 194         ContentBuilder body = new ContentBuilder();
 195         CommentHelper ch = utils.getCommentHelper(element);
 196         body.add(HtmlTree.CODE(new RawHtml(paramName)));




 197         body.add(" - ");
 198         List<? extends DocTree> description = ch.getDescription(configuration, paramTag);
 199         body.add(htmlWriter.commentTagsToContent(paramTag, element, description, false, inSummary));
 200         HtmlTree result = HtmlTree.DD(body);
 201         return result;
 202     }
 203 
 204     /**
 205      * {@inheritDoc}
 206      */
 207     public Content propertyTagOutput(Element element, DocTree tag, String prefix) {
 208         Content body = new ContentBuilder();
 209         CommentHelper ch = utils.getCommentHelper(element);
 210         body.add(new RawHtml(prefix));
 211         body.add(" ");
 212         body.add(HtmlTree.CODE(new RawHtml(ch.getText(tag))));
 213         body.add(".");
 214         Content result = HtmlTree.P(body);
 215         return result;
 216     }
 217 
 218     /**
 219      * {@inheritDoc}
 220      */
 221     public Content returnTagOutput(Element element, DocTree returnTag) {


 392     public Content commentTagsToOutput(Element holder, List<? extends DocTree> tags) {
 393         return commentTagsToOutput(null, holder, tags, false);
 394     }
 395 
 396     /**
 397      * {@inheritDoc}
 398      */
 399     public Content commentTagsToOutput(DocTree holderTag,
 400         Element holder, List<? extends DocTree> tags, boolean isFirstSentence) {
 401         return htmlWriter.commentTagsToContent(holderTag, holder,
 402                 tags, isFirstSentence, inSummary);
 403     }
 404 
 405     /**
 406      * {@inheritDoc}
 407      */
 408     public BaseConfiguration configuration() {
 409         return configuration;
 410     }
 411 

 412     private Content createAnchorAndSearchIndex(Element element, String tagText, String desc){
 413         Content result = null;
 414         if (isFirstSentence && inSummary) {
 415             result = new StringContent(tagText);
 416         } else {
 417             String anchorName = htmlWriter.links.getName(tagText);
 418             int count = htmlWriter.indexAnchorTable.computeIfAbsent(anchorName, s -> 0);
 419             htmlWriter.indexAnchorTable.put(anchorName, count + 1);
 420             if (count > 0) {
 421                 anchorName += "-" + count;
 422             }
 423             result = HtmlTree.A_ID(HtmlStyle.searchTagResult, anchorName, new StringContent(tagText));
 424             if (configuration.createindex && !tagText.isEmpty()) {
 425                 SearchIndexItem si = new SearchIndexItem();
 426                 si.setLabel(tagText);
 427                 si.setDescription(desc);
 428                 si.setUrl(htmlWriter.path.getPath() + "#" + anchorName);
 429                 DocPaths docPaths = configuration.docPaths;
 430                 new SimpleElementVisitor9<Void, Void>() {
 431                     @Override
 432                     public Void visitVariable(VariableElement e, Void p) {
 433                         TypeElement te = utils.getEnclosingTypeElement(e);
 434                         si.setHolder(utils.getFullyQualifiedName(e) + "." + utils.getSimpleName(e));
 435                         return null;
 436                     }
 437 
 438                     @Override
 439                     public Void visitUnknown(Element e, Void p) {
 440                         if (e instanceof DocletElement) {
 441                             DocletElement de = (DocletElement) e;
 442                             switch (de.getSubKind()) {
 443                                 case OVERVIEW:
 444                                     si.setHolder(resources.getText("doclet.Overview"));
 445                                     break;
 446                                 case DOCFILE:
 447                                     si.setHolder(de.getPackageElement().toString());
 448                                     break;
 449                                 default:
 450                                     throw new IllegalStateException();


  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.formats.html;
  27 
  28 import java.util.List;
  29 
  30 import javax.lang.model.element.Element;
  31 import javax.lang.model.element.ElementKind;
  32 import javax.lang.model.element.ExecutableElement;
  33 import javax.lang.model.element.ModuleElement;
  34 import javax.lang.model.element.Name;
  35 import javax.lang.model.element.PackageElement;
  36 import javax.lang.model.element.TypeElement;
  37 import javax.lang.model.element.VariableElement;
  38 import javax.lang.model.type.TypeMirror;
  39 import javax.lang.model.util.SimpleElementVisitor14;
  40 
  41 import com.sun.source.doctree.DocTree;
  42 import com.sun.source.doctree.DocTree.Kind;
  43 import com.sun.source.doctree.IndexTree;
  44 import com.sun.source.doctree.ParamTree;
  45 import com.sun.source.doctree.SystemPropertyTree;
  46 import jdk.javadoc.internal.doclets.formats.html.markup.ContentBuilder;
  47 import jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle;
  48 import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
  49 import jdk.javadoc.internal.doclets.formats.html.markup.RawHtml;
  50 import jdk.javadoc.internal.doclets.formats.html.markup.StringContent;
  51 import jdk.javadoc.internal.doclets.toolkit.BaseConfiguration;
  52 import jdk.javadoc.internal.doclets.toolkit.Content;
  53 import jdk.javadoc.internal.doclets.toolkit.DocletElement;
  54 import jdk.javadoc.internal.doclets.toolkit.Resources;
  55 import jdk.javadoc.internal.doclets.toolkit.builders.SerializedFormBuilder;
  56 import jdk.javadoc.internal.doclets.toolkit.taglets.TagletWriter;
  57 import jdk.javadoc.internal.doclets.toolkit.util.CommentHelper;
  58 import jdk.javadoc.internal.doclets.toolkit.util.DocLink;
  59 import jdk.javadoc.internal.doclets.toolkit.util.DocPath;
  60 import jdk.javadoc.internal.doclets.toolkit.util.DocPaths;
  61 import jdk.javadoc.internal.doclets.toolkit.util.DocletConstants;
  62 import jdk.javadoc.internal.doclets.toolkit.util.Utils;
  63 
  64 /**


 180      * {@inheritDoc}
 181      */
 182     protected Content literalTagOutput(Element element, DocTree tag) {
 183         CommentHelper ch = utils.getCommentHelper(element);
 184         Content result = new StringContent(utils.normalizeNewlines(ch.getText(tag)));
 185         return result;
 186     }
 187 
 188     /**
 189      * {@inheritDoc}
 190      */
 191     public Content getParamHeader(String header) {
 192         HtmlTree result = HtmlTree.DT(HtmlTree.SPAN(HtmlStyle.paramLabel,
 193                 new StringContent(header)));
 194         return result;
 195     }
 196 
 197     /**
 198      * {@inheritDoc}
 199      */
 200     @SuppressWarnings("preview")
 201     public Content paramTagOutput(Element element, DocTree paramTag, String paramName) {
 202         ContentBuilder body = new ContentBuilder();
 203         CommentHelper ch = utils.getCommentHelper(element);
 204         // define id attributes for state components so that generated descriptions may refer to them
 205         boolean defineID = (element.getKind() == ElementKind.RECORD)
 206                 && (paramTag instanceof ParamTree) && !((ParamTree) paramTag).isTypeParameter();
 207         Content nameTree = new StringContent(paramName);
 208         body.add(HtmlTree.CODE(defineID ? HtmlTree.A_ID("param-" + paramName, nameTree) : nameTree));
 209         body.add(" - ");
 210         List<? extends DocTree> description = ch.getDescription(configuration, paramTag);
 211         body.add(htmlWriter.commentTagsToContent(paramTag, element, description, false, inSummary));
 212         return HtmlTree.DD(body);

 213     }
 214 
 215     /**
 216      * {@inheritDoc}
 217      */
 218     public Content propertyTagOutput(Element element, DocTree tag, String prefix) {
 219         Content body = new ContentBuilder();
 220         CommentHelper ch = utils.getCommentHelper(element);
 221         body.add(new RawHtml(prefix));
 222         body.add(" ");
 223         body.add(HtmlTree.CODE(new RawHtml(ch.getText(tag))));
 224         body.add(".");
 225         Content result = HtmlTree.P(body);
 226         return result;
 227     }
 228 
 229     /**
 230      * {@inheritDoc}
 231      */
 232     public Content returnTagOutput(Element element, DocTree returnTag) {


 403     public Content commentTagsToOutput(Element holder, List<? extends DocTree> tags) {
 404         return commentTagsToOutput(null, holder, tags, false);
 405     }
 406 
 407     /**
 408      * {@inheritDoc}
 409      */
 410     public Content commentTagsToOutput(DocTree holderTag,
 411         Element holder, List<? extends DocTree> tags, boolean isFirstSentence) {
 412         return htmlWriter.commentTagsToContent(holderTag, holder,
 413                 tags, isFirstSentence, inSummary);
 414     }
 415 
 416     /**
 417      * {@inheritDoc}
 418      */
 419     public BaseConfiguration configuration() {
 420         return configuration;
 421     }
 422 
 423     @SuppressWarnings("preview")
 424     private Content createAnchorAndSearchIndex(Element element, String tagText, String desc){
 425         Content result = null;
 426         if (isFirstSentence && inSummary) {
 427             result = new StringContent(tagText);
 428         } else {
 429             String anchorName = htmlWriter.links.getName(tagText);
 430             int count = htmlWriter.indexAnchorTable.computeIfAbsent(anchorName, s -> 0);
 431             htmlWriter.indexAnchorTable.put(anchorName, count + 1);
 432             if (count > 0) {
 433                 anchorName += "-" + count;
 434             }
 435             result = HtmlTree.A_ID(HtmlStyle.searchTagResult, anchorName, new StringContent(tagText));
 436             if (configuration.createindex && !tagText.isEmpty()) {
 437                 SearchIndexItem si = new SearchIndexItem();
 438                 si.setLabel(tagText);
 439                 si.setDescription(desc);
 440                 si.setUrl(htmlWriter.path.getPath() + "#" + anchorName);
 441                 DocPaths docPaths = configuration.docPaths;
 442                 new SimpleElementVisitor14<Void, Void>() {
 443                     @Override
 444                     public Void visitVariable(VariableElement e, Void p) {
 445                         TypeElement te = utils.getEnclosingTypeElement(e);
 446                         si.setHolder(utils.getFullyQualifiedName(e) + "." + utils.getSimpleName(e));
 447                         return null;
 448                     }
 449 
 450                     @Override
 451                     public Void visitUnknown(Element e, Void p) {
 452                         if (e instanceof DocletElement) {
 453                             DocletElement de = (DocletElement) e;
 454                             switch (de.getSubKind()) {
 455                                 case OVERVIEW:
 456                                     si.setHolder(resources.getText("doclet.Overview"));
 457                                     break;
 458                                 case DOCFILE:
 459                                     si.setHolder(de.getPackageElement().toString());
 460                                     break;
 461                                 default:
 462                                     throw new IllegalStateException();
< prev index next >