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();
|