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 } |