src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/TagletWriterImpl.java
changeset 52487 5d1d07b72f15
parent 51862 c319db69099c
child 52644 43efb4ca6d6c
equal deleted inserted replaced
52486:6f5948597697 52487:5d1d07b72f15
    35 import javax.lang.model.type.TypeMirror;
    35 import javax.lang.model.type.TypeMirror;
    36 import javax.lang.model.util.SimpleElementVisitor9;
    36 import javax.lang.model.util.SimpleElementVisitor9;
    37 
    37 
    38 import com.sun.source.doctree.DocTree;
    38 import com.sun.source.doctree.DocTree;
    39 import com.sun.source.doctree.IndexTree;
    39 import com.sun.source.doctree.IndexTree;
       
    40 import com.sun.source.doctree.SystemPropertyTree;
    40 import jdk.javadoc.internal.doclets.formats.html.markup.ContentBuilder;
    41 import jdk.javadoc.internal.doclets.formats.html.markup.ContentBuilder;
    41 import jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle;
    42 import jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle;
    42 import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
    43 import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
    43 import jdk.javadoc.internal.doclets.formats.html.markup.Links;
    44 import jdk.javadoc.internal.doclets.formats.html.markup.Links;
    44 import jdk.javadoc.internal.doclets.formats.html.markup.RawHtml;
    45 import jdk.javadoc.internal.doclets.formats.html.markup.RawHtml;
    45 import jdk.javadoc.internal.doclets.formats.html.markup.StringContent;
    46 import jdk.javadoc.internal.doclets.formats.html.markup.StringContent;
    46 import jdk.javadoc.internal.doclets.toolkit.BaseConfiguration;
    47 import jdk.javadoc.internal.doclets.toolkit.BaseConfiguration;
    47 import jdk.javadoc.internal.doclets.toolkit.Content;
    48 import jdk.javadoc.internal.doclets.toolkit.Content;
       
    49 import jdk.javadoc.internal.doclets.toolkit.Resources;
    48 import jdk.javadoc.internal.doclets.toolkit.builders.SerializedFormBuilder;
    50 import jdk.javadoc.internal.doclets.toolkit.builders.SerializedFormBuilder;
    49 import jdk.javadoc.internal.doclets.toolkit.taglets.TagletWriter;
    51 import jdk.javadoc.internal.doclets.toolkit.taglets.TagletWriter;
    50 import jdk.javadoc.internal.doclets.toolkit.util.CommentHelper;
    52 import jdk.javadoc.internal.doclets.toolkit.util.CommentHelper;
    51 import jdk.javadoc.internal.doclets.toolkit.util.DocLink;
    53 import jdk.javadoc.internal.doclets.toolkit.util.DocLink;
    52 import jdk.javadoc.internal.doclets.toolkit.util.DocPath;
    54 import jdk.javadoc.internal.doclets.toolkit.util.DocPath;
    70 
    72 
    71     private final HtmlDocletWriter htmlWriter;
    73     private final HtmlDocletWriter htmlWriter;
    72     private final HtmlConfiguration configuration;
    74     private final HtmlConfiguration configuration;
    73     private final Utils utils;
    75     private final Utils utils;
    74     private final boolean inSummary;
    76     private final boolean inSummary;
       
    77     private final Resources resources;
    75 
    78 
    76     public TagletWriterImpl(HtmlDocletWriter htmlWriter, boolean isFirstSentence) {
    79     public TagletWriterImpl(HtmlDocletWriter htmlWriter, boolean isFirstSentence) {
    77         this(htmlWriter, isFirstSentence, false);
    80         this(htmlWriter, isFirstSentence, false);
    78     }
    81     }
    79 
    82 
    81         super(isFirstSentence);
    84         super(isFirstSentence);
    82         this.htmlWriter = htmlWriter;
    85         this.htmlWriter = htmlWriter;
    83         configuration = htmlWriter.configuration;
    86         configuration = htmlWriter.configuration;
    84         this.utils = configuration.utils;
    87         this.utils = configuration.utils;
    85         this.inSummary = inSummary;
    88         this.inSummary = inSummary;
       
    89         resources = configuration.getResources();
    86     }
    90     }
    87 
    91 
    88     /**
    92     /**
    89      * {@inheritDoc}
    93      * {@inheritDoc}
    90      */
    94      */
   110         if (tagText.charAt(0) == '"' && tagText.charAt(tagText.length() - 1) == '"') {
   114         if (tagText.charAt(0) == '"' && tagText.charAt(tagText.length() - 1) == '"') {
   111             tagText = tagText.substring(1, tagText.length() - 1);
   115             tagText = tagText.substring(1, tagText.length() - 1);
   112         }
   116         }
   113         String desc = ch.getText(itt.getDescription());
   117         String desc = ch.getText(itt.getDescription());
   114 
   118 
   115         String anchorName = htmlWriter.links.getName(tagText);
   119         return createAnchorAndSearchIndex(element, tagText,desc);
   116         Content result = null;
       
   117         if (isFirstSentence && inSummary) {
       
   118             result = new StringContent(tagText);
       
   119         } else {
       
   120             result = HtmlTree.A_ID(HtmlStyle.searchTagResult, anchorName, new StringContent(tagText));
       
   121             if (configuration.createindex && !tagText.isEmpty()) {
       
   122                 SearchIndexItem si = new SearchIndexItem();
       
   123                 si.setLabel(tagText);
       
   124                 si.setDescription(desc);
       
   125                 DocPaths docPaths = configuration.docPaths;
       
   126                 new SimpleElementVisitor9<Void, Void>() {
       
   127                     @Override
       
   128                     public Void visitModule(ModuleElement e, Void p) {
       
   129                         si.setUrl(docPaths.moduleSummary(e).getPath() + "#" + anchorName);
       
   130                         si.setHolder(utils.getFullyQualifiedName(element));
       
   131                         return null;
       
   132                     }
       
   133 
       
   134                     @Override
       
   135                     public Void visitPackage(PackageElement e, Void p) {
       
   136                         si.setUrl(docPaths.forPackage(e).getPath()
       
   137                                 + "/" + DocPaths.PACKAGE_SUMMARY.getPath() + "#" + anchorName);
       
   138                         si.setHolder(utils.getSimpleName(element));
       
   139                         return null;
       
   140                     }
       
   141 
       
   142                     @Override
       
   143                     public Void visitType(TypeElement e, Void p) {
       
   144                         si.setUrl(docPaths.forClass(e).getPath() + "#" + anchorName);
       
   145                         si.setHolder(utils.getFullyQualifiedName(e));
       
   146                         return null;
       
   147                     }
       
   148 
       
   149                     @Override
       
   150                     public Void visitVariable(VariableElement e, Void p) {
       
   151                         TypeElement te = utils.getEnclosingTypeElement(e);
       
   152                         si.setUrl(docPaths.forClass(te).getPath() + "#" + anchorName);
       
   153                         si.setHolder(utils.getFullyQualifiedName(e) + "." + utils.getSimpleName(e));
       
   154                         return null;
       
   155                     }
       
   156 
       
   157                     @Override
       
   158                     protected Void defaultAction(Element e, Void p) {
       
   159                         TypeElement te = utils.getEnclosingTypeElement(e);
       
   160                         si.setUrl(docPaths.forClass(te).getPath() + "#" + anchorName);
       
   161                         si.setHolder(utils.getFullyQualifiedName(e));
       
   162                         return null;
       
   163                     }
       
   164                 }.visit(element);
       
   165                 si.setCategory(configuration.getContent("doclet.SearchTags").toString());
       
   166                 configuration.tagSearchIndex.add(si);
       
   167             }
       
   168         }
       
   169         return result;
       
   170     }
   120     }
   171 
   121 
   172     /**
   122     /**
   173      * {@inheritDoc}
   123      * {@inheritDoc}
   174      */
   124      */
   365     }
   315     }
   366 
   316 
   367     /**
   317     /**
   368      * {@inheritDoc}
   318      * {@inheritDoc}
   369      */
   319      */
       
   320     protected Content systemPropertyTagOutput(Element element, DocTree tag) {
       
   321         SystemPropertyTree itt = (SystemPropertyTree)tag;
       
   322         String tagText = itt.getPropertyName().toString();
       
   323         return HtmlTree.CODE(createAnchorAndSearchIndex(element, tagText,
       
   324                 resources.getText("doclet.System_Property")));
       
   325     }
       
   326 
       
   327     /**
       
   328      * {@inheritDoc}
       
   329      */
   370     public Content getThrowsHeader() {
   330     public Content getThrowsHeader() {
   371         HtmlTree result = HtmlTree.DT(HtmlTree.SPAN(HtmlStyle.throwsLabel,
   331         HtmlTree result = HtmlTree.DT(HtmlTree.SPAN(HtmlStyle.throwsLabel,
   372                 new StringContent(configuration.getText("doclet.Throws"))));
   332                 new StringContent(configuration.getText("doclet.Throws"))));
   373         return result;
   333         return result;
   374     }
   334     }
   447      * {@inheritDoc}
   407      * {@inheritDoc}
   448      */
   408      */
   449     public BaseConfiguration configuration() {
   409     public BaseConfiguration configuration() {
   450         return configuration;
   410         return configuration;
   451     }
   411     }
       
   412 
       
   413     private Content createAnchorAndSearchIndex(Element element, String tagText, String desc){
       
   414         String anchorName = htmlWriter.links.getName(tagText);
       
   415         Content result = null;
       
   416         if (isFirstSentence && inSummary) {
       
   417             result = new StringContent(tagText);
       
   418         } else {
       
   419             result = HtmlTree.A_ID(HtmlStyle.searchTagResult, anchorName, new StringContent(tagText));
       
   420             if (configuration.createindex && !tagText.isEmpty()) {
       
   421                 SearchIndexItem si = new SearchIndexItem();
       
   422                 si.setLabel(tagText);
       
   423                 si.setDescription(desc);
       
   424                 DocPaths docPaths = configuration.docPaths;
       
   425                 new SimpleElementVisitor9<Void, Void>() {
       
   426                     @Override
       
   427                     public Void visitModule(ModuleElement e, Void p) {
       
   428                         si.setUrl(docPaths.moduleSummary(e).getPath() + "#" + anchorName);
       
   429                         si.setHolder(utils.getFullyQualifiedName(element));
       
   430                         return null;
       
   431                     }
       
   432 
       
   433                     @Override
       
   434                     public Void visitPackage(PackageElement e, Void p) {
       
   435                         si.setUrl(docPaths.forPackage(e).getPath()
       
   436                                 + "/" + DocPaths.PACKAGE_SUMMARY.getPath() + "#" + anchorName);
       
   437                         si.setHolder(utils.getSimpleName(element));
       
   438                         return null;
       
   439                     }
       
   440 
       
   441                     @Override
       
   442                     public Void visitType(TypeElement e, Void p) {
       
   443                         si.setUrl(docPaths.forClass(e).getPath() + "#" + anchorName);
       
   444                         si.setHolder(utils.getFullyQualifiedName(e));
       
   445                         return null;
       
   446                     }
       
   447 
       
   448                     @Override
       
   449                     public Void visitVariable(VariableElement e, Void p) {
       
   450                         TypeElement te = utils.getEnclosingTypeElement(e);
       
   451                         si.setUrl(docPaths.forClass(te).getPath() + "#" + anchorName);
       
   452                         si.setHolder(utils.getFullyQualifiedName(e) + "." + utils.getSimpleName(e));
       
   453                         return null;
       
   454                     }
       
   455 
       
   456                     @Override
       
   457                     protected Void defaultAction(Element e, Void p) {
       
   458                         TypeElement te = utils.getEnclosingTypeElement(e);
       
   459                         si.setUrl(docPaths.forClass(te).getPath() + "#" + anchorName);
       
   460                         si.setHolder(utils.getFullyQualifiedName(e));
       
   461                         return null;
       
   462                     }
       
   463                 }.visit(element);
       
   464                 si.setCategory(configuration.getContent("doclet.SearchTags").toString());
       
   465                 configuration.tagSearchIndex.add(si);
       
   466             }
       
   467         }
       
   468         return result;
       
   469     }
   452 }
   470 }