8245058: improve presentation of annotations for modules and packages

Reviewed-by: jjg
This commit is contained in:
Hannes Wallnöfer 2020-11-27 19:12:31 +00:00
parent d51e2ab219
commit 5be4de8583
53 changed files with 1094 additions and 930 deletions

View File

@ -160,7 +160,7 @@ public abstract class AbstractExecutableMemberWriter extends AbstractMemberWrite
*/
protected void addReceiverAnnotations(ExecutableElement member, TypeMirror rcvrType,
List<? extends AnnotationMirror> annotationMirrors, Content tree) {
writer.addReceiverAnnotationInfo(member, rcvrType, annotationMirrors, tree);
tree.add(writer.getAnnotationInfo(member.getReceiverType().getAnnotationMirrors(), false));
tree.add(Entity.NO_BREAK_SPACE);
tree.add(utils.getTypeName(rcvrType, false));
LinkInfoImpl linkInfo = new LinkInfoImpl(configuration, RECEIVER_TYPE, rcvrType);
@ -212,11 +212,11 @@ public abstract class AbstractExecutableMemberWriter extends AbstractMemberWrite
if (param.getKind() != ElementKind.INSTANCE_INIT) {
if (includeAnnotations) {
boolean foundAnnotations =
writer.addAnnotationInfo(param, paramTree);
if (foundAnnotations) {
paramTree.add(DocletConstants.NL);
paramTree.add(" ");
Content annotationInfo = writer.getAnnotationInfo(param, false);
if (!annotationInfo.isEmpty()) {
paramTree.add(annotationInfo)
.add(DocletConstants.NL)
.add(" ");
}
}
addParam(member, param, paramType,
@ -231,12 +231,11 @@ public abstract class AbstractExecutableMemberWriter extends AbstractMemberWrite
paramTree.add(" ");
if (includeAnnotations) {
boolean foundAnnotations =
writer.addAnnotationInfo(parameters.get(i),
paramTree);
if (foundAnnotations) {
paramTree.add(DocletConstants.NL);
paramTree.add(" ");
Content annotationInfo = writer.getAnnotationInfo(parameters.get(i), false);
if (!annotationInfo.isEmpty()) {
paramTree.add(annotationInfo)
.add(DocletConstants.NL)
.add(" ");
}
}
addParam(member, parameters.get(i), instMeth.getParameterTypes().get(i),

View File

@ -421,235 +421,4 @@ public abstract class AbstractMemberWriter implements MemberSummaryWriter, Membe
return writer.getMemberListItem(memberTree);
}
/**
* A content builder for member signatures.
*/
class MemberSignature {
private final Element element;
private Content typeParameters;
private Content returnType;
private Content parameters;
private Content exceptions;
// Threshold for length of type parameters before switching from inline to block representation.
private static final int TYPE_PARAMS_MAX_INLINE_LENGTH = 50;
// Threshold for combined length of modifiers, type params and return type before breaking
// it up with a line break before the return type.
private static final int RETURN_TYPE_MAX_LINE_LENGTH = 50;
/**
* Creates a new member signature builder.
*
* @param element the element for which to create a signature
*/
MemberSignature(Element element) {
this.element = element;
}
/**
* Adds the type parameters for an executable member.
*
* @param typeParameters the content tree containing the type parameters to add.
*
* @return this instance
*/
MemberSignature addTypeParameters(Content typeParameters) {
this.typeParameters = typeParameters;
return this;
}
/**
* Adds the return type for an executable member.
*
* @param returnType the content tree containing the return type to add.
*
* @return this instance
*/
MemberSignature addReturnType(Content returnType) {
this.returnType = returnType;
return this;
}
/**
* Adds the type information for a non-executable member.
*
* @param type the type of the member.
*
* @return this instance
*/
MemberSignature addType(TypeMirror type) {
this.returnType = writer.getLink(new LinkInfoImpl(configuration, LinkInfoImpl.Kind.MEMBER, type));
return this;
}
/**
* Adds the parameter information of an executable member.
*
* @param paramTree the content tree containing the parameter information.
*
* @return this instance
*/
MemberSignature addParameters(Content paramTree) {
this.parameters = paramTree;
return this;
}
/**
* Adds the exception information of an executable member.
*
* @param exceptionTree the content tree containing the exception information
*
* @return this instance
*/
MemberSignature addExceptions(Content exceptionTree) {
this.exceptions = exceptionTree;
return this;
}
/**
* Returns an HTML tree containing the member signature.
*
* @return an HTML tree containing the member signature
*/
Content toContent() {
Content content = new ContentBuilder();
// Position of last line separator.
int lastLineSeparator = 0;
// Annotations
Content annotationInfo = writer.getAnnotationInfo(element.getAnnotationMirrors(), true);
if (!annotationInfo.isEmpty()) {
content.add(HtmlTree.SPAN(HtmlStyle.annotations, annotationInfo));
lastLineSeparator = content.charCount();
}
// Modifiers
appendModifiers(content);
// Type parameters
if (typeParameters != null && !typeParameters.isEmpty()) {
lastLineSeparator = appendTypeParameters(content, lastLineSeparator);
}
// Return type
if (returnType != null) {
content.add(HtmlTree.SPAN(HtmlStyle.returnType, returnType));
content.add(Entity.NO_BREAK_SPACE);
}
// Name
HtmlTree nameSpan = new HtmlTree(TagName.SPAN);
nameSpan.setStyle(HtmlStyle.memberName);
if (options.linkSource()) {
Content name = new StringContent(name(element));
writer.addSrcLink(element, name, nameSpan);
} else {
nameSpan.add(name(element));
}
content.add(nameSpan);
// Parameters and exceptions
if (parameters != null) {
appendParametersAndExceptions(content, lastLineSeparator);
}
return HtmlTree.DIV(HtmlStyle.memberSignature, content);
}
/**
* Adds the modifier for the member. The modifiers are ordered as specified
* by <em>The Java Language Specification</em>.
*
* @param htmlTree the content tree to which the modifier information will be added
*/
private void appendModifiers(Content htmlTree) {
Set<Modifier> set = new TreeSet<>(element.getModifiers());
// remove the ones we really don't need
set.remove(NATIVE);
set.remove(SYNCHRONIZED);
set.remove(STRICTFP);
// According to JLS, we should not be showing public modifier for
// interface methods and fields.
if ((utils.isField(element) || utils.isMethod(element))) {
Element te = element.getEnclosingElement();
if (utils.isInterface(te) || utils.isAnnotationType(te)) {
// Remove the implicit abstract and public modifiers
if (utils.isMethod(element)) {
set.remove(ABSTRACT);
}
set.remove(PUBLIC);
}
}
if (!set.isEmpty()) {
String mods = set.stream().map(Modifier::toString).collect(Collectors.joining(" "));
htmlTree.add(HtmlTree.SPAN(HtmlStyle.modifiers, new StringContent(mods)))
.add(Entity.NO_BREAK_SPACE);
}
}
/**
* Appends the type parameter information to the HTML tree.
*
* @param htmlTree the HTML tree
* @param lastLineSeparator index of last line separator in the HTML tree
*
* @return the new index of the last line separator
*/
private int appendTypeParameters(Content htmlTree, int lastLineSeparator) {
// Apply different wrapping strategies for type parameters
// depending of combined length of type parameters and return type.
int typeParamLength = typeParameters.charCount();
if (typeParamLength >= TYPE_PARAMS_MAX_INLINE_LENGTH) {
htmlTree.add(HtmlTree.SPAN(HtmlStyle.typeParametersLong, typeParameters));
} else {
htmlTree.add(HtmlTree.SPAN(HtmlStyle.typeParameters, typeParameters));
}
int lineLength = htmlTree.charCount() - lastLineSeparator;
int newLastLineSeparator = lastLineSeparator;
// sum below includes length of modifiers plus type params added above
if (lineLength + returnType.charCount()> RETURN_TYPE_MAX_LINE_LENGTH) {
htmlTree.add(DocletConstants.NL);
newLastLineSeparator = htmlTree.charCount();
} else {
htmlTree.add(Entity.NO_BREAK_SPACE);
}
return newLastLineSeparator;
}
/**
* Appends the parameters and exceptions information to the HTML tree.
*
* @param htmlTree the HTML tree
* @param lastLineSeparator the index of the last line separator in the HTML tree
*/
private void appendParametersAndExceptions(Content htmlTree, int lastLineSeparator) {
// Record current position for indentation of exceptions
int indentSize = htmlTree.charCount() - lastLineSeparator;
if (parameters.charCount() == 2) {
// empty parameters are added without packing
htmlTree.add(parameters);
} else {
htmlTree.add(Entity.ZERO_WIDTH_SPACE)
.add(HtmlTree.SPAN(HtmlStyle.parameters, parameters));
}
// Exceptions
if (exceptions != null && !exceptions.isEmpty()) {
CharSequence indent = " ".repeat(Math.max(0, indentSize + 1 - 7));
htmlTree.add(DocletConstants.NL)
.add(indent)
.add("throws ")
.add(HtmlTree.SPAN(HtmlStyle.exceptions, exceptions));
}
}
}
}

View File

@ -114,8 +114,9 @@ public class AnnotationTypeRequiredMemberWriterImpl extends AbstractMemberWriter
@Override
public Content getSignature(Element member) {
return new MemberSignature(member)
.addType(getType(member))
return new Signatures.MemberSignature(member, this)
.setType(getType(member))
.setAnnotations(writer.getAnnotationInfo(member, true))
.toContent();
}

View File

@ -188,110 +188,12 @@ public class ClassWriterImpl extends SubWriterHolderWriter implements ClassWrite
@Override @SuppressWarnings("preview")
public void addClassSignature(String modifiers, Content classInfoTree) {
Content hr = new HtmlTree(TagName.HR);
classInfoTree.add(hr);
Content pre = new HtmlTree(TagName.PRE);
addAnnotationInfo(typeElement, pre);
pre.add(modifiers);
LinkInfoImpl linkInfo = new LinkInfoImpl(configuration,
LinkInfoImpl.Kind.CLASS_SIGNATURE, typeElement);
//Let's not link to ourselves in the signature.
linkInfo.linkToSelf = false;
Content className = new StringContent(utils.getSimpleName(typeElement));
Content parameterLinks = getTypeParameterLinks(linkInfo);
if (options.linkSource()) {
addSrcLink(typeElement, className, pre);
pre.add(parameterLinks);
} else {
Content span = HtmlTree.SPAN(HtmlStyle.typeNameLabel, className);
span.add(parameterLinks);
pre.add(span);
}
if (utils.isRecord(typeElement)) {
pre.add(getRecordComponents(typeElement));
}
if (!utils.isAnnotationType(typeElement)) {
if (!utils.isInterface(typeElement)) {
TypeMirror superclass = utils.getFirstVisibleSuperClass(typeElement);
if (superclass != null) {
pre.add(DocletConstants.NL);
pre.add("extends ");
Content link = getLink(new LinkInfoImpl(configuration,
LinkInfoImpl.Kind.CLASS_SIGNATURE_PARENT_NAME,
superclass));
pre.add(link);
}
}
List<? extends TypeMirror> interfaces = typeElement.getInterfaces();
if (!interfaces.isEmpty()) {
boolean isFirst = true;
for (TypeMirror type : interfaces) {
TypeElement tDoc = utils.asTypeElement(type);
if (!(utils.isPublic(tDoc) || utils.isLinkable(tDoc))) {
continue;
}
if (isFirst) {
pre.add(DocletConstants.NL);
pre.add(utils.isInterface(typeElement) ? "extends " : "implements ");
isFirst = false;
} else {
pre.add(", ");
}
Content link = getLink(new LinkInfoImpl(configuration,
LinkInfoImpl.Kind.CLASS_SIGNATURE_PARENT_NAME,
type));
pre.add(link);
}
}
}
List<? extends TypeMirror> permits = typeElement.getPermittedSubclasses();
List<? extends TypeMirror> linkablePermits = permits.stream()
.filter(t -> utils.isLinkable(utils.asTypeElement(t)))
.collect(Collectors.toList());
if (!linkablePermits.isEmpty()) {
boolean isFirst = true;
for (TypeMirror type : linkablePermits) {
TypeElement tDoc = utils.asTypeElement(type);
if (isFirst) {
pre.add(DocletConstants.NL);
pre.add("permits ");
isFirst = false;
} else {
pre.add(", ");
}
Content link = getLink(new LinkInfoImpl(configuration,
LinkInfoImpl.Kind.PERMITTED_SUBCLASSES,
type));
pre.add(link);
}
if (linkablePermits.size() < permits.size()) {
Content c = new StringContent(resources.getText("doclet.not.exhaustive"));
pre.add(" ");
pre.add(HtmlTree.SPAN(HtmlStyle.permitsNote, c));
}
}
classInfoTree.add(pre);
classInfoTree.add(new HtmlTree(TagName.HR));
classInfoTree.add(new Signatures.TypeSignature(typeElement, this)
.setModifiers(new StringContent(modifiers))
.toContent());
}
@SuppressWarnings("preview")
private Content getRecordComponents(TypeElement typeElem) {
Content content = new ContentBuilder();
content.add("(");
String sep = "";
for (RecordComponentElement e : typeElement.getRecordComponents()) {
content.add(sep);
getAnnotations(e.getAnnotationMirrors(), false)
.forEach(a -> { content.add(a); content.add(" "); });
Content link = getLink(new LinkInfoImpl(configuration, LinkInfoImpl.Kind.RECORD_COMPONENT,
e.asType()));
content.add(link);
content.add(Entity.NO_BREAK_SPACE);
content.add(e.getSimpleName());
sep = ", ";
}
content.add(")");
return content;
}
@Override
public void addClassDescription(Content classInfoTree) {

View File

@ -130,9 +130,10 @@ public class ConstructorWriterImpl extends AbstractExecutableMemberWriter
@Override
public Content getSignature(ExecutableElement constructor) {
return new MemberSignature(constructor)
.addParameters(getParameters(constructor, true))
.addExceptions(getExceptions(constructor))
return new Signatures.MemberSignature(constructor, this)
.setParameters(getParameters(constructor, true))
.setExceptions(getExceptions(constructor))
.setAnnotations(writer.getAnnotationInfo(constructor, true))
.toContent();
}

View File

@ -98,8 +98,9 @@ public class EnumConstantWriterImpl extends AbstractMemberWriter
@Override
public Content getSignature(VariableElement enumConstant) {
return new MemberSignature(enumConstant)
.addType(enumConstant.asType())
return new Signatures.MemberSignature(enumConstant, this)
.setType(enumConstant.asType())
.setAnnotations(writer.getAnnotationInfo(enumConstant, true))
.toContent();
}

View File

@ -98,8 +98,9 @@ public class FieldWriterImpl extends AbstractMemberWriter
@Override
public Content getSignature(VariableElement field) {
return new MemberSignature(field)
.addType(utils.asInstantiatedFieldType(typeElement, field))
return new Signatures.MemberSignature(field, this)
.setType(utils.asInstantiatedFieldType(typeElement, field))
.setAnnotations(writer.getAnnotationInfo(field, true))
.toContent();
}

View File

@ -1693,68 +1693,22 @@ public class HtmlDocletWriter {
}
/**
* Adds the annotation types for the given packageElement.
* Return a content tree containing the annotation types for the given element.
*
* @param packageElement the package to write annotations for.
* @param htmltree the documentation tree to which the annotation info will be
* added
* @param element an Element
* @param lineBreak if true add new line between each member value
* @return the documentation tree containing the annotation info
*/
public void addAnnotationInfo(PackageElement packageElement, Content htmltree) {
addAnnotationInfo(packageElement.getAnnotationMirrors(), htmltree);
}
/*
* this is a hack to delay dealing with Annotations in the writers, the assumption
* is that all necessary checks have been made to get here.
*/
public void addReceiverAnnotationInfo(ExecutableElement method, TypeMirror rcvrTypeMirror,
List<? extends AnnotationMirror> annotationMirrors, Content htmltree) {
TypeMirror rcvrType = method.getReceiverType();
List<? extends AnnotationMirror> annotationMirrors1 = rcvrType.getAnnotationMirrors();
htmltree.add(getAnnotationInfo(annotationMirrors1, false));
}
/**
* Adds the annotation types for the given element.
*
* @param element the package to write annotations for
* @param htmltree the content tree to which the annotation types will be added
*/
public void addAnnotationInfo(Element element, Content htmltree) {
addAnnotationInfo(element.getAnnotationMirrors(), htmltree);
}
/**
* Add the annotation types for the given element and parameter.
*
* @param param the parameter to write annotations for.
* @param tree the content tree to which the annotation types will be added
*/
public boolean addAnnotationInfo(VariableElement param, Content tree) {
Content annotationInfo = getAnnotationInfo(param.getAnnotationMirrors(), false);
if (annotationInfo.isEmpty()) {
return false;
}
tree.add(annotationInfo);
return true;
}
/**
* Adds the annotation types for the given Element.
*
* @param descList a list of annotation mirrors.
* @param htmltree the documentation tree to which the annotation info will be
* added
*/
private void addAnnotationInfo(List<? extends AnnotationMirror> descList, Content htmltree) {
htmltree.add(getAnnotationInfo(descList, true));
Content getAnnotationInfo(Element element, boolean lineBreak) {
return getAnnotationInfo(element.getAnnotationMirrors(), lineBreak);
}
/**
* Return a content tree containing the annotation types for the given element.
*
* @param descList a list of annotation mirrors.
* @return the documentation tree containing the annotation info.
* @param descList a list of annotation mirrors
* @param lineBreak if true add new line between each member value
* @return the documentation tree containing the annotation info
*/
Content getAnnotationInfo(List<? extends AnnotationMirror> descList, boolean lineBreak) {
List<Content> annotations = getAnnotations(descList, lineBreak);
@ -1775,11 +1729,11 @@ public class HtmlDocletWriter {
* the given doc.
*
* @param descList a list of annotation mirrors.
* @param linkBreak if true, add new line between each member value.
* @param lineBreak if true, add new line between each member value.
* @return a list of strings representing the annotations being
* documented.
*/
public List<Content> getAnnotations(List<? extends AnnotationMirror> descList, boolean linkBreak) {
public List<Content> getAnnotations(List<? extends AnnotationMirror> descList, boolean lineBreak) {
List<Content> results = new ArrayList<>();
ContentBuilder annotation;
for (AnnotationMirror aDesc : descList) {
@ -1854,9 +1808,9 @@ public class HtmlDocletWriter {
}
}
else {
addAnnotations(annotationElement, linkInfo, annotation, pairs, linkBreak);
addAnnotations(annotationElement, linkInfo, annotation, pairs, lineBreak);
}
annotation.add(linkBreak ? DocletConstants.NL : "");
annotation.add(lineBreak ? DocletConstants.NL : "");
results.add(annotation);
}
return results;

View File

@ -206,19 +206,11 @@ public class LinkFactoryImpl extends LinkFactory {
if (annotations.isEmpty())
return links;
List<Content> annos = m_writer.getAnnotations(annotations, false);
boolean isFirst = true;
for (Content anno : annos) {
if (!isFirst) {
links.add(" ");
}
links.add(anno);
isFirst = false;
}
if (!annos.isEmpty()) {
links.add(" ");
}
m_writer.getAnnotations(annotations, false)
.forEach(a -> {
links.add(a);
links.add(" ");
});
return links;
}

View File

@ -122,11 +122,12 @@ public class MethodWriterImpl extends AbstractExecutableMemberWriter
*/
@Override
public Content getSignature(ExecutableElement method) {
return new MemberSignature(method)
.addTypeParameters(getTypeParameters(method))
.addReturnType(getReturnType(method))
.addParameters(getParameters(method, true))
.addExceptions(getExceptions(method))
return new Signatures.MemberSignature(method, this)
.setTypeParameters(getTypeParameters(method))
.setReturnType(getReturnType(method))
.setParameters(getParameters(method, true))
.setExceptions(getExceptions(method))
.setAnnotations(writer.getAnnotationInfo(method, true))
.toContent();
}

View File

@ -185,9 +185,6 @@ public class ModuleWriterImpl extends HtmlDocletWriter implements ModuleSummaryW
HtmlTree bodyTree = getBody(getWindowTitle(mdle.getQualifiedName().toString()));
HtmlTree div = new HtmlTree(TagName.DIV);
div.setStyle(HtmlStyle.header);
Content annotationContent = new HtmlTree(TagName.P);
addAnnotationInfo(mdle, annotationContent);
div.add(annotationContent);
Content label = mdle.isOpen() && (configuration.docEnv.getModuleMode() == ModuleMode.ALL)
? contents.openModuleLabel : contents.moduleLabel;
Content tHeading = HtmlTree.HEADING_TITLE(Headings.PAGE_TITLE_HEADING,
@ -831,6 +828,12 @@ public class ModuleWriterImpl extends HtmlDocletWriter implements ModuleSummaryW
}
}
@Override
public void addModuleSignature(Content moduleContentTree) {
moduleContentTree.add(new HtmlTree(TagName.HR));
moduleContentTree.add(Signatures.getModuleSignature(mdle, this));
}
@Override
public void addModuleContent(Content moduleContentTree) {
bodyContents.addMainContent(moduleContentTree);

View File

@ -109,9 +109,6 @@ public class PackageWriterImpl extends HtmlDocletWriter
new StringContent(mdle.getQualifiedName().toString())));
div.add(moduleNameDiv);
}
Content annotationContent = new HtmlTree(TagName.P);
addAnnotationInfo(packageElement, annotationContent);
div.add(annotationContent);
Content tHeading = HtmlTree.HEADING_TITLE(Headings.PAGE_TITLE_HEADING,
HtmlStyle.title, contents.packageLabel);
tHeading.add(Entity.NO_BREAK_SPACE);
@ -253,6 +250,12 @@ public class PackageWriterImpl extends HtmlDocletWriter
packageContentTree.add(sectionTree);
}
@Override
public void addPackageSignature(Content packageContentTree) {
packageContentTree.add(new HtmlTree(TagName.HR));
packageContentTree.add(Signatures.getPackageSignature(packageElement, this));
}
@Override
public void addPackageContent(Content packageContentTree) {
bodyContents.addMainContent(packageContentTree);

View File

@ -91,8 +91,9 @@ public class PropertyWriterImpl extends AbstractMemberWriter
@Override
public Content getSignature(ExecutableElement property) {
return new MemberSignature(property)
.addType(utils.getReturnType(typeElement, property))
return new Signatures.MemberSignature(property, this)
.setType(utils.getReturnType(typeElement, property))
.setAnnotations(writer.getAnnotationInfo(property, true))
.toContent();
}

View File

@ -0,0 +1,441 @@
package jdk.javadoc.internal.doclets.formats.html;
import jdk.javadoc.doclet.DocletEnvironment;
import jdk.javadoc.internal.doclets.formats.html.markup.ContentBuilder;
import jdk.javadoc.internal.doclets.formats.html.markup.Entity;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
import jdk.javadoc.internal.doclets.formats.html.markup.StringContent;
import jdk.javadoc.internal.doclets.formats.html.markup.TagName;
import jdk.javadoc.internal.doclets.toolkit.Content;
import jdk.javadoc.internal.doclets.toolkit.util.DocletConstants;
import jdk.javadoc.internal.doclets.toolkit.util.Utils;
import javax.lang.model.element.Element;
import javax.lang.model.element.Modifier;
import javax.lang.model.element.ModuleElement;
import javax.lang.model.element.PackageElement;
import javax.lang.model.element.RecordComponentElement;
import javax.lang.model.element.TypeElement;
import javax.lang.model.type.TypeMirror;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import java.util.stream.Collectors;
import static javax.lang.model.element.Modifier.ABSTRACT;
import static javax.lang.model.element.Modifier.NATIVE;
import static javax.lang.model.element.Modifier.PUBLIC;
import static javax.lang.model.element.Modifier.STRICTFP;
import static javax.lang.model.element.Modifier.SYNCHRONIZED;
public class Signatures {
public static Content getModuleSignature(ModuleElement mdle, ModuleWriterImpl moduleWriter) {
Content signature = HtmlTree.DIV(HtmlStyle.moduleSignature);
Content annotations = moduleWriter.getAnnotationInfo(mdle, true);
if (!annotations.isEmpty()) {
signature.add(HtmlTree.SPAN(HtmlStyle.annotations, annotations));
}
DocletEnvironment docEnv = moduleWriter.configuration.docEnv;
String label = mdle.isOpen() && (docEnv.getModuleMode() == DocletEnvironment.ModuleMode.ALL)
? "open module" : "module";
signature.add(label);
signature.add(" ");
HtmlTree nameSpan = new HtmlTree(TagName.SPAN).setStyle(HtmlStyle.elementName);
nameSpan.add(mdle.getQualifiedName().toString());
signature.add(nameSpan);
return signature;
}
public static Content getPackageSignature(PackageElement pkg, PackageWriterImpl pkgWriter) {
Content signature = HtmlTree.DIV(HtmlStyle.packageSignature);
Content annotations = pkgWriter.getAnnotationInfo(pkg, true);
if (!annotations.isEmpty()) {
signature.add(HtmlTree.SPAN(HtmlStyle.annotations, annotations));
}
signature.add("package ");
HtmlTree nameSpan = new HtmlTree(TagName.SPAN).setStyle(HtmlStyle.elementName);
nameSpan.add(pkg.getQualifiedName().toString());
signature.add(nameSpan);
return signature;
}
static class TypeSignature {
private final TypeElement typeElement;
private final ClassWriterImpl classWriter;
private final Utils utils;
private final HtmlConfiguration configuration;
private Content modifiers;
TypeSignature(TypeElement typeElement, ClassWriterImpl classWriter) {
this.typeElement = typeElement;
this.classWriter = classWriter;
this.utils = classWriter.utils;
this.configuration = classWriter.configuration;
}
public TypeSignature setModifiers(Content modifiers) {
this.modifiers = modifiers;
return this;
}
@SuppressWarnings("preview")
public Content toContent() {
Content content = new ContentBuilder();
Content annotationInfo = classWriter.getAnnotationInfo(typeElement, true);
if (!annotationInfo.isEmpty()) {
content.add(HtmlTree.SPAN(HtmlStyle.annotations, annotationInfo));
}
content.add(HtmlTree.SPAN(HtmlStyle.modifiers, modifiers));
HtmlTree nameSpan = new HtmlTree(TagName.SPAN).setStyle(HtmlStyle.elementName);
Content className = new StringContent(utils.getSimpleName(typeElement));
if (classWriter.options.linkSource()) {
classWriter.addSrcLink(typeElement, className, nameSpan);
} else {
nameSpan.addStyle(HtmlStyle.typeNameLabel).add(className);
}
LinkInfoImpl linkInfo = new LinkInfoImpl(configuration,
LinkInfoImpl.Kind.CLASS_SIGNATURE, typeElement);
//Let's not link to ourselves in the signature.
linkInfo.linkToSelf = false;
nameSpan.add(classWriter.getTypeParameterLinks(linkInfo));
content.add(nameSpan);
if (utils.isRecord(typeElement)) {
content.add(getRecordComponents());
}
if (!utils.isAnnotationType(typeElement)) {
Content extendsImplements = new HtmlTree(TagName.SPAN)
.setStyle(HtmlStyle.extendsImplements);
if (!utils.isInterface(typeElement)) {
TypeMirror superclass = utils.getFirstVisibleSuperClass(typeElement);
if (superclass != null) {
content.add(DocletConstants.NL);
extendsImplements.add("extends ");
Content link = classWriter.getLink(new LinkInfoImpl(configuration,
LinkInfoImpl.Kind.CLASS_SIGNATURE_PARENT_NAME,
superclass));
extendsImplements.add(link);
}
}
List<? extends TypeMirror> interfaces = typeElement.getInterfaces();
if (!interfaces.isEmpty()) {
boolean isFirst = true;
for (TypeMirror type : interfaces) {
TypeElement tDoc = utils.asTypeElement(type);
if (!(utils.isPublic(tDoc) || utils.isLinkable(tDoc))) {
continue;
}
if (isFirst) {
extendsImplements.add(DocletConstants.NL);
extendsImplements.add(utils.isInterface(typeElement) ? "extends " : "implements ");
isFirst = false;
} else {
extendsImplements.add(", ");
}
Content link = classWriter.getLink(new LinkInfoImpl(configuration,
LinkInfoImpl.Kind.CLASS_SIGNATURE_PARENT_NAME,
type));
extendsImplements.add(link);
}
}
if (!extendsImplements.isEmpty()) {
content.add(extendsImplements);
}
}
List<? extends TypeMirror> permits = typeElement.getPermittedSubclasses();
List<? extends TypeMirror> linkablePermits = permits.stream()
.filter(t -> utils.isLinkable(utils.asTypeElement(t)))
.collect(Collectors.toList());
if (!linkablePermits.isEmpty()) {
Content permitsSpan = new HtmlTree(TagName.SPAN).setStyle(HtmlStyle.permits);
boolean isFirst = true;
for (TypeMirror type : linkablePermits) {
if (isFirst) {
content.add(DocletConstants.NL);
permitsSpan.add("permits ");
isFirst = false;
} else {
permitsSpan.add(", ");
}
Content link = classWriter.getLink(new LinkInfoImpl(configuration,
LinkInfoImpl.Kind.PERMITTED_SUBCLASSES,
type));
permitsSpan.add(link);
}
if (linkablePermits.size() < permits.size()) {
Content c = new StringContent(classWriter.resources.getText("doclet.not.exhaustive"));
permitsSpan.add(" ");
permitsSpan.add(HtmlTree.SPAN(HtmlStyle.permitsNote, c));
}
content.add(permitsSpan);
}
return HtmlTree.DIV(HtmlStyle.typeSignature, content);
}
@SuppressWarnings("preview")
private Content getRecordComponents() {
Content content = new ContentBuilder();
content.add("(");
String sep = "";
for (RecordComponentElement e : typeElement.getRecordComponents()) {
content.add(sep);
classWriter.getAnnotations(e.getAnnotationMirrors(), false)
.forEach(a -> { content.add(a).add(" "); });
Content link = classWriter.getLink(new LinkInfoImpl(configuration, LinkInfoImpl.Kind.RECORD_COMPONENT,
e.asType()));
content.add(link);
content.add(Entity.NO_BREAK_SPACE);
content.add(e.getSimpleName());
sep = ", ";
}
content.add(")");
return content;
}
}
/**
* A content builder for member signatures.
*/
static class MemberSignature {
private final AbstractMemberWriter memberWriter;
private final Utils utils;
private final Element element;
private Content annotations;
private Content typeParameters;
private Content returnType;
private Content parameters;
private Content exceptions;
// Threshold for length of type parameters before switching from inline to block representation.
private static final int TYPE_PARAMS_MAX_INLINE_LENGTH = 50;
// Threshold for combined length of modifiers, type params and return type before breaking
// it up with a line break before the return type.
private static final int RETURN_TYPE_MAX_LINE_LENGTH = 50;
/**
* Creates a new member signature builder.
*
* @param element the element for which to create a signature
* @param memberWriter the member writer
*/
MemberSignature(Element element, AbstractMemberWriter memberWriter) {
this.element = element;
this.memberWriter = memberWriter;
this.utils = memberWriter.utils;
}
/**
* Set the type parameters for an executable member.
*
* @param typeParameters the content tree containing the type parameters to add.
* @return this instance
*/
MemberSignature setTypeParameters(Content typeParameters) {
this.typeParameters = typeParameters;
return this;
}
/**
* Set the return type for an executable member.
*
* @param returnType the content tree containing the return type to add.
* @return this instance
*/
MemberSignature setReturnType(Content returnType) {
this.returnType = returnType;
return this;
}
/**
* Set the type information for a non-executable member.
*
* @param type the type of the member.
* @return this instance
*/
MemberSignature setType(TypeMirror type) {
this.returnType = memberWriter.writer.getLink(new LinkInfoImpl(memberWriter.configuration, LinkInfoImpl.Kind.MEMBER, type));
return this;
}
/**
* Set the parameter information of an executable member.
*
* @param paramTree the content tree containing the parameter information.
* @return this instance
*/
MemberSignature setParameters(Content paramTree) {
this.parameters = paramTree;
return this;
}
/**
* Set the exception information of an executable member.
*
* @param exceptionTree the content tree containing the exception information
* @return this instance
*/
MemberSignature setExceptions(Content exceptionTree) {
this.exceptions = exceptionTree;
return this;
}
/**
* Set the annotation information of a member.
*
* @param annotationTree the content tree containing the exception information
* @return this instance
*/
MemberSignature setAnnotations(Content annotationTree) {
this.annotations = annotationTree;
return this;
}
/**
* Returns an HTML tree containing the member signature.
*
* @return an HTML tree containing the member signature
*/
Content toContent() {
Content content = new ContentBuilder();
// Position of last line separator.
int lastLineSeparator = 0;
// Annotations
if (annotations != null && !annotations.isEmpty()) {
content.add(HtmlTree.SPAN(HtmlStyle.annotations, annotations));
lastLineSeparator = content.charCount();
}
// Modifiers
appendModifiers(content);
// Type parameters
if (typeParameters != null && !typeParameters.isEmpty()) {
lastLineSeparator = appendTypeParameters(content, lastLineSeparator);
}
// Return type
if (returnType != null) {
content.add(HtmlTree.SPAN(HtmlStyle.returnType, returnType));
content.add(Entity.NO_BREAK_SPACE);
}
// Name
HtmlTree nameSpan = new HtmlTree(TagName.SPAN).setStyle(HtmlStyle.elementName);
if (memberWriter.options.linkSource()) {
Content name = new StringContent(memberWriter.name(element));
memberWriter.writer.addSrcLink(element, name, nameSpan);
} else {
nameSpan.add(memberWriter.name(element));
}
content.add(nameSpan);
// Parameters and exceptions
if (parameters != null) {
appendParametersAndExceptions(content, lastLineSeparator);
}
return HtmlTree.DIV(HtmlStyle.memberSignature, content);
}
/**
* Adds the modifier for the member. The modifiers are ordered as specified
* by <em>The Java Language Specification</em>.
*
* @param htmlTree the content tree to which the modifier information will be added
*/
private void appendModifiers(Content htmlTree) {
Set<Modifier> set = new TreeSet<>(element.getModifiers());
// remove the ones we really don't need
set.remove(NATIVE);
set.remove(SYNCHRONIZED);
set.remove(STRICTFP);
// According to JLS, we should not be showing public modifier for
// interface methods and fields.
if ((utils.isField(element) || utils.isMethod(element))) {
Element te = element.getEnclosingElement();
if (utils.isInterface(te) || utils.isAnnotationType(te)) {
// Remove the implicit abstract and public modifiers
if (utils.isMethod(element)) {
set.remove(ABSTRACT);
}
set.remove(PUBLIC);
}
}
if (!set.isEmpty()) {
String mods = set.stream().map(Modifier::toString).collect(Collectors.joining(" "));
htmlTree.add(HtmlTree.SPAN(HtmlStyle.modifiers, new StringContent(mods)))
.add(Entity.NO_BREAK_SPACE);
}
}
/**
* Appends the type parameter information to the HTML tree.
*
* @param htmlTree the HTML tree
* @param lastLineSeparator index of last line separator in the HTML tree
* @return the new index of the last line separator
*/
private int appendTypeParameters(Content htmlTree, int lastLineSeparator) {
// Apply different wrapping strategies for type parameters
// depending of combined length of type parameters and return type.
int typeParamLength = typeParameters.charCount();
if (typeParamLength >= TYPE_PARAMS_MAX_INLINE_LENGTH) {
htmlTree.add(HtmlTree.SPAN(HtmlStyle.typeParametersLong, typeParameters));
} else {
htmlTree.add(HtmlTree.SPAN(HtmlStyle.typeParameters, typeParameters));
}
int lineLength = htmlTree.charCount() - lastLineSeparator;
int newLastLineSeparator = lastLineSeparator;
// sum below includes length of modifiers plus type params added above
if (lineLength + returnType.charCount() > RETURN_TYPE_MAX_LINE_LENGTH) {
htmlTree.add(DocletConstants.NL);
newLastLineSeparator = htmlTree.charCount();
} else {
htmlTree.add(Entity.NO_BREAK_SPACE);
}
return newLastLineSeparator;
}
/**
* Appends the parameters and exceptions information to the HTML tree.
*
* @param htmlTree the HTML tree
* @param lastLineSeparator the index of the last line separator in the HTML tree
*/
private void appendParametersAndExceptions(Content htmlTree, int lastLineSeparator) {
// Record current position for indentation of exceptions
int indentSize = htmlTree.charCount() - lastLineSeparator;
if (parameters.charCount() == 2) {
// empty parameters are added without packing
htmlTree.add(parameters);
} else {
htmlTree.add(Entity.ZERO_WIDTH_SPACE)
.add(HtmlTree.SPAN(HtmlStyle.parameters, parameters));
}
// Exceptions
if (exceptions != null && !exceptions.isEmpty()) {
CharSequence indent = " ".repeat(Math.max(0, indentSize + 1 - 7));
htmlTree.add(DocletConstants.NL)
.add(indent)
.add("throws ")
.add(HtmlTree.SPAN(HtmlStyle.exceptions, exceptions));
}
}
}
}

View File

@ -521,56 +521,82 @@ public enum HtmlStyle {
flexContent,
//</editor-fold>
//<editor-fold desc="member signature">
//<editor-fold desc="signatures">
//
// The following constants are used for the components of a signature of an element
/**
* The class of a {@code span} element for the signature of an element.
* The class of an element containing a module signature.
*/
moduleSignature,
/**
* The class of an element containing a package signature.
*/
packageSignature,
/**
* The class of an element containing a type signature.
*/
typeSignature,
/**
* The class of an element containing a member signature.
* The signature will contain a member name and, depending on the kind of element,
* it can contain any of the following:
* any of the following:
* annotations, type parameters, modifiers, return type, parameters, and exceptions.
*/
memberSignature,
/**
* The class of a {@code span} element for any annotations in the signature of an element.
* The class of a {@code span} element containing any annotations in the signature of an element.
*/
annotations,
/**
* The class of a {@code span} element for any exceptions in a signature of an executable element.
* The class of a {@code span} element containing any exceptions in a signature of an executable element.
*/
exceptions,
/**
* The class of a {@code span} for the member name in the signature of an element.
* The class of a {@code span} element containing the {@code extends} or {@code implements} section
* in a signature of a type element.
*/
memberName,
extendsImplements,
/**
* The class of a {@code span} for any modifiers in the signature of an element.
* The class of a {@code span} containing the element name in the element's signature.
*/
elementName,
/**
* The class of a {@code span} containing any modifiers in the signature of an element.
*/
modifiers,
/**
* The class of a {@code span} for any parameters in the signature of an executable element.
* The class of a {@code span} containing any parameters in the signature of an executable element.
*/
parameters,
/**
* The class of a {@code span} for the return type in the signature of an method element.
* The class of a {@code span} containing the {@code permits} section of a sealed class element.
*/
permits,
/**
* The class of a {@code span} containing the return type in the signature of a method element.
*/
returnType,
/**
* The class of a {@code span} for type parameters in the signature of an element,
* The class of a {@code span} containing type parameters in the signature of an element,
* used when the type parameters should reasonably be displayed inline.
*/
typeParameters,
/**
* The class of a {@code span} for type parameters in the signature of an element,
* The class of a {@code span} containing type parameters in the signature of an element,
* used when the type parameters are too long to be displayed inline.
* @implNote
* The threshold for choosing between {@code typeParameters} and {@code typeParametersLong}

View File

@ -76,6 +76,14 @@ public interface ModuleSummaryWriter {
*/
void addModuleDescription(Content moduleContentTree);
/**
* Adds the module signature.
*
* @param moduleContentTree the content tree to which the module signature
* will be added
*/
void addModuleSignature(Content moduleContentTree);
/**
* Adds the summary of modules to the list of summaries.
*

View File

@ -138,6 +138,14 @@ public interface PackageSummaryWriter {
*/
void addPackageTags(Content packageContentTree);
/**
* Adds the package signature.
*
* @param packageContentTree the content tree to which the package signature
* will be added
*/
void addPackageSignature(Content packageContentTree);
/**
* Adds the tag information from the "packages.html" or "package-info.java" file to the
* documentation tree.

View File

@ -121,6 +121,7 @@ public class ModuleSummaryBuilder extends AbstractBuilder {
protected void buildContent() throws DocletException {
Content moduleContentTree = moduleWriter.getContentHeader();
moduleWriter.addModuleSignature(moduleContentTree);
buildModuleDescription(moduleContentTree);
buildSummary(moduleContentTree);

View File

@ -128,6 +128,7 @@ public class PackageSummaryBuilder extends AbstractBuilder {
protected void buildContent() throws DocletException {
Content packageContentTree = packageWriter.getContentHeader();
packageWriter.addPackageSignature(packageContentTree);
buildPackageDescription(packageContentTree);
buildPackageTags(packageContentTree);
buildSummary(packageContentTree);

View File

@ -477,9 +477,6 @@ div.table-tabs > button.table-tab {
/*
* Styles for contents.
*/
.description pre {
margin-top:0;
}
.deprecated-content {
margin:0;
padding:10px 0;
@ -494,23 +491,28 @@ div.block {
.col-last a {
padding-bottom:3px;
}
div.member-signature {
.module-signature,
.package-signature,
.type-signature,
.member-signature {
font-family:'DejaVu Sans Mono', monospace;
font-size:14px;
margin:14px 0;
white-space: pre-wrap;
}
div.member-signature span.annotations {
white-space: pre-wrap;
.module-signature,
.package-signature,
.type-signature {
margin-top: 0;
}
div.member-signature span.type-parameters-long,
div.member-signature span.parameters,
div.member-signature span.exceptions {
.member-signature .type-parameters-long,
.member-signature .parameters,
.member-signature .exceptions {
display: inline-block;
vertical-align: top;
white-space: pre;
}
div.member-signature span.type-parameters {
.member-signature .type-parameters {
white-space: normal;
}
/*

View File

@ -67,8 +67,7 @@ public class TestAnnotationTypes extends JavadocTester {
<section class="detail" id="DEFAULT_NAME">
<h3>DEFAULT_NAME</h3>
<div class="member-signature"><span class="modifiers">static final</span>&nbsp;<\
span class="return-type">java.lang.String</span>&nbsp;<span class="member-name">\
DEFAULT_NAME</span></div>
span class="return-type">java.lang.String</span>&nbsp;<span class="element-name">DEFAULT_NAME</span></div>
""");
checkOutput("pkg/AnnotationType.html", true,
@ -94,7 +93,7 @@ public class TestAnnotationTypes extends JavadocTester {
<section class="detail" id="value()">""",
"<h3>value</h3>\n",
"""
<div class="member-signature"><span class="return-type">int</span>&nbsp;<span class="member-name">value</span></div>""");
<div class="member-signature"><span class="return-type">int</span>&nbsp;<span class="element-name">value</span></div>""");
checkOutput("pkg/AnnotationType.html", false,
"""
@ -124,10 +123,10 @@ public class TestAnnotationTypes extends JavadocTester {
checkOutput("pkg/AnnotationType.html", true,
"""
public @interface <a href="../src-html/pkg/AnnotationType.html#line.31">AnnotationType</a></pre>""");
<span class="modifiers">public @interface </span><span class="element-name"><a href="../src-html/pkg/AnnotationType.html#line.31">AnnotationType</a></span></div>""");
checkOutput("pkg/AnnotationTypeField.html", true,
"""
public @interface <a href="../src-html/pkg/AnnotationTypeField.html#line.31">AnnotationTypeField</a></pre>""");
<span class="modifiers">public @interface </span><span class="element-name"><a href="../src-html/pkg/AnnotationTypeField.html#line.31">AnnotationTypeField</a></span></div>""");
}
}

View File

@ -80,32 +80,33 @@ public class TestDeprecatedDocs extends JavadocTester {
checkOutput("pkg/DeprecatedClassByAnnotation.html", true,
"""
<pre>@Deprecated
public class <span class="type-name-label">DeprecatedClassByAnnotation</span>
extends java.lang.Object</pre>""",
<div class="type-signature"><span class="annotations">@Deprecated
</span><span class="modifiers">public class </span><span class="element-name type-name-label">DeprecatedClassByAnnotation</span>
<span class="extends-implements">extends java.lang.Object</span></div>""",
"""
<div class="member-signature"><span class="annotations">@Deprecated(forRemoval=true)
</span><span class="modifiers">public</span>&nbsp;<span class="return-type">int<\
/span>&nbsp;<span class="member-name">field</span></div>
/span>&nbsp;<span class="element-name">field</span></div>
<div class="deprecation-block"><span class="deprecated-label">Deprecated, for re\
moval: This API element is subject to removal in a future version.</span></div>""",
"""
<div class="member-signature"><span class="annotations">@Deprecated(forRemoval=true)
</span><span class="modifiers">public</span>&nbsp;<span class="member-name">DeprecatedClassByAnnotation</span>()</div>
</span><span class="modifiers">public</span>&nbsp;<span class="element-name">DeprecatedClassByAnnotation</span>()</div>
<div class="deprecation-block"><span class="deprecated-label">Deprecated, for re\
moval: This API element is subject to removal in a future version.</span></div>""",
"""
<div class="member-signature"><span class="annotations">@Deprecated
</span><span class="modifiers">public</span>&nbsp;<span class="return-type">void\
</span>&nbsp;<span class="member-name">method</span>()</div>
</span>&nbsp;<span class="element-name">method</span>()</div>
<div class="deprecation-block"><span class="deprecated-label">Deprecated.</span></div>""");
checkOutput("pkg/TestAnnotationType.html", true,
"""
<hr>
<pre>@Deprecated(forRemoval=true)
<div class="type-signature"><span class="annotations">@Deprecated(forRemoval=true)
@Documented
public @interface <span class="type-name-label">TestAnnotationType</span></pre>
</span><span class="modifiers">public @interface </span><span class="element-name type-n\
ame-label">TestAnnotationType</span></div>
<div class="deprecation-block"><span class="deprecated-label">Deprecated, for re\
moval: This API element is subject to removal in a future version.</span>
<div class="deprecation-comment">annotation_test1 passes.</div>
@ -113,21 +114,21 @@ public class TestDeprecatedDocs extends JavadocTester {
"""
<div class="member-signature"><span class="annotations">@Deprecated(forRemoval=true)
</span><span class="modifiers">static final</span>&nbsp;<span class="return-type\
">int</span>&nbsp;<span class="member-name">field</span></div>
">int</span>&nbsp;<span class="element-name">field</span></div>
<div class="deprecation-block"><span class="deprecated-label">Deprecated, for re\
moval: This API element is subject to removal in a future version.</span>
<div class="deprecation-comment">annotation_test4 passes.</div>
</div>""",
"""
<div class="member-signature"><span class="annotations">@Deprecated(forRemoval=true)
</span><span class="return-type">int</span>&nbsp;<span class="member-name">required</span></div>
</span><span class="return-type">int</span>&nbsp;<span class="element-name">required</span></div>
<div class="deprecation-block"><span class="deprecated-label">Deprecated, for re\
moval: This API element is subject to removal in a future version.</span>
<div class="deprecation-comment">annotation_test3 passes.</div>
</div>""",
"""
<div class="member-signature"><span class="return-type">java.lang.String</span>&\
nbsp;<span class="member-name">optional</span></div>
nbsp;<span class="element-name">optional</span></div>
<div class="deprecation-block"><span class="deprecated-label">Deprecated.</span>
<div class="deprecation-comment">annotation_test2 passes.</div>
</div>""");
@ -135,16 +136,16 @@ public class TestDeprecatedDocs extends JavadocTester {
checkOutput("pkg/TestClass.html", true,
"""
<hr>
<pre>@Deprecated(forRemoval=true)
public class <span class="type-name-label">TestClass</span>
extends java.lang.Object</pre>
<div class="type-signature"><span class="annotations">@Deprecated(forRemoval=true)
</span><span class="modifiers">public class </span><span class="element-name type-name-label">TestClass</span>
<span class="extends-implements">extends java.lang.Object</span></div>
<div class="deprecation-block"><span class="deprecated-label">Deprecated, for re\
moval: This API element is subject to removal in a future version.</span>
<div class="deprecation-comment">class_test1 passes.</div>
</div>""",
"""
<div class="member-signature"><span class="annotations">@Deprecated(forRemoval=true)
</span><span class="modifiers">public</span>&nbsp;<span class="member-name">TestClass</span>()</div>
</span><span class="modifiers">public</span>&nbsp;<span class="element-name">TestClass</span>()</div>
<div class="deprecation-block"><span class="deprecated-label">Deprecated, for re\
moval: This API element is subject to removal in a future version.</span>
<div class="deprecation-comment">class_test3 passes. This is the second sentence\
@ -212,9 +213,10 @@ public class TestDeprecatedDocs extends JavadocTester {
checkOutput("pkg/TestEnum.html", true,
"""
<hr>
<pre>@Deprecated(forRemoval=true)
public enum <span class="type-name-label">TestEnum</span>
extends java.lang.Enum&lt;<a href="TestEnum.html" title="enum in pkg">TestEnum</a>&gt;</pre>
<div class="type-signature"><span class="annotations">@Deprecated(forRemoval=true)
</span><span class="modifiers">public enum </span><span class="element-name type-name-label">TestEnum</span>
<span class="extends-implements">extends java.lang.Enum&lt;<a href="TestEnum.htm\
l" title="enum in pkg">TestEnum</a>&gt;</span></div>
<div class="deprecation-block"><span class="deprecated-label">Deprecated, for re\
moval: This API element is subject to removal in a future version.</span>
<div class="deprecation-comment">enum_test1 passes.</div>
@ -223,7 +225,7 @@ public class TestDeprecatedDocs extends JavadocTester {
<div class="member-signature"><span class="annotations">@Deprecated(forRemoval=true)
</span><span class="modifiers">public static final</span>&nbsp;<span class="retu\
rn-type"><a href="TestEnum.html" title="enum in pkg">TestEnum</a></span>&nbsp;<s\
pan class="member-name">FOR_REMOVAL</span></div>
pan class="element-name">FOR_REMOVAL</span></div>
<div class="deprecation-block"><span class="deprecated-label">Deprecated, for re\
moval: This API element is subject to removal in a future version.</span>
<div class="deprecation-comment">enum_test3 passes.</div>
@ -232,9 +234,9 @@ public class TestDeprecatedDocs extends JavadocTester {
checkOutput("pkg/TestError.html", true,
"""
<hr>
<pre>@Deprecated(forRemoval=true)
public class <span class="type-name-label">TestError</span>
extends java.lang.Error</pre>
<div class="type-signature"><span class="annotations">@Deprecated(forRemoval=true)
</span><span class="modifiers">public class </span><span class="element-name type-name-label">TestError</span>
<span class="extends-implements">extends java.lang.Error</span></div>
<div class="deprecation-block"><span class="deprecated-label">Deprecated, for re\
moval: This API element is subject to removal in a future version.</span>
<div class="deprecation-comment">error_test1 passes.</div>
@ -243,9 +245,9 @@ public class TestDeprecatedDocs extends JavadocTester {
checkOutput("pkg/TestException.html", true,
"""
<hr>
<pre>@Deprecated(forRemoval=true)
public class <span class="type-name-label">TestException</span>
extends java.lang.Exception</pre>
<div class="type-signature"><span class="annotations">@Deprecated(forRemoval=true)
</span><span class="modifiers">public class </span><span class="element-name type-name-label">TestException</span>
<span class="extends-implements">extends java.lang.Exception</span></div>
<div class="deprecation-block"><span class="deprecated-label">Deprecated, for re\
moval: This API element is subject to removal in a future version.</span>
<div class="deprecation-comment">exception_test1 passes.</div>
@ -254,9 +256,9 @@ public class TestDeprecatedDocs extends JavadocTester {
checkOutput("pkg/TestInterface.html", true,
"""
<hr>
<pre>@Deprecated(forRemoval=true)
public class <span class="type-name-label">TestInterface</span>
extends java.lang.Object</pre>
<div class="type-signature"><span class="annotations">@Deprecated(forRemoval=true)
</span><span class="modifiers">public class </span><span class="element-name type-name-label">TestInterface</span>
<span class="extends-implements">extends java.lang.Object</span></div>
<div class="deprecation-block"><span class="deprecated-label">Deprecated, for re\
moval: This API element is subject to removal in a future version.</span>
<div class="deprecation-comment">interface_test1 passes.</div>

View File

@ -87,8 +87,9 @@ public class TestHiddenTag extends JavadocTester {
checkOutput("pkg1/A.VisibleInnerExtendsInvisibleInner.html", true,
"""
<pre>public static class <span class="type-name-label">A.VisibleInnerExtendsInvisibleInner</span>
extends <a href="A.html" title="class in pkg1">A</a></pre>""",
<div class="type-signature"><span class="modifiers">public static class </span><\
span class="element-name type-name-label">A.VisibleInnerExtendsInvisibleInner</span>
<span class="extends-implements">extends <a href="A.html" title="class in pkg1">A</a></span></div>""",
"""
<code><a href="A.html#visibleField">visibleField</a></code>""",
"""

View File

@ -76,7 +76,8 @@ public class TestHref extends JavadocTester {
"Class C4&lt;E extends C4&lt;E&gt;&gt;</h1>",
//Signature does not link to the page itself.
"""
public abstract class <span class="type-name-label">C4&lt;E extends C4&lt;E&gt;&gt;</span>"""
<span class="modifiers">public abstract class </span><span class="element-name type-name\
-label">C4&lt;E extends C4&lt;E&gt;&gt;</span>"""
);
checkOutput(Output.OUT, false,

View File

@ -106,9 +106,9 @@ public class TestHtmlDefinitionListTag extends JavadocTester {
// for default value.
checkOutput("pkg1/C1.html", true,
"""
<pre>public class <span class="type-name-label">C1</span>
extends java.lang.Object
implements java.io.Serializable</pre>""");
<div class="type-signature"><span class="modifiers">public class </span><span class="element-name type-name-label">C1</span>
<span class="extends-implements">extends java.lang.Object
implements java.io.Serializable</span></div>""");
checkOutput("pkg1/C4.html", true,
"""
<dl class="notes">
@ -338,15 +338,14 @@ public class TestHtmlDefinitionListTag extends JavadocTester {
checkOutput("pkg1/C1.html", expectFound,
"""
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span c\
lass="return-type">void</span>&nbsp;<span class="member-name">readObject</span>(\
)
lass="return-type">void</span>&nbsp;<span class="element-name">readObject</span>()
throws <span class="exceptions">java.io.IOException</span></div>
</section>
</li>""");
checkOutput("pkg1/C2.html", expectFound,
"""
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="member-name">C2</span>()</div>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name">C2</span>()</div>
</section>
</li>""");
@ -354,8 +353,8 @@ public class TestHtmlDefinitionListTag extends JavadocTester {
"""
<div class="member-signature"><span class="modifiers">public static final</span>\
&nbsp;<span class="return-type"><a href="C1.ModalExclusionType.html" title="enum\
in pkg1">C1.ModalExclusionType</a></span>&nbsp;<span class="member-name">APPLIC\
ATION_EXCLUDE</span></div>
in pkg1">C1.ModalExclusionType</a></span>&nbsp;<span class="element-name">APPLICATION_E\
XCLUDE</span></div>
</section>
</li>""");

View File

@ -159,9 +159,10 @@ public class TestHtmlTag extends JavadocTester {
checkOutput("pkg3/A.ActivationDesc.html", true,
"""
<pre>public class <span class="type-name-label">A.ActivationDesc</span>
extends java.lang.Object
implements java.io.Serializable</pre>
<div class="type-signature"><span class="modifiers">public class </span><span cl\
ass="element-name type-name-label">A.ActivationDesc</span>
<span class="extends-implements">extends java.lang.Object
implements java.io.Serializable</span></div>
<div class="block">An activation descriptor contains the information necessary to activate
an object: <ul>
<li> the object's group identifier,
@ -181,9 +182,10 @@ public class TestHtmlTag extends JavadocTester {
checkOutput("pkg3/A.ActivationGroupID.html", true,
"""
<pre>public class <span class="type-name-label">A.ActivationGroupID</span>
extends java.lang.Object
implements java.io.Serializable</pre>
<div class="type-signature"><span class="modifiers">public class </span><span cl\
ass="element-name type-name-label">A.ActivationGroupID</span>
<span class="extends-implements">extends java.lang.Object
implements java.io.Serializable</span></div>
<div class="block">The identifier for a registered activation group serves several purposes:
<ul>
<li>identifies the group uniquely within the activation system, and

View File

@ -52,8 +52,7 @@ public class TestIndentation extends JavadocTester {
"""
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span c\
lass="type-parameters">&lt;T&gt;</span>&nbsp;<span class="return-type">void</spa\
n>&nbsp;<span class="member-name">m</span>&#8203;<span class="parameters">(T&nbs\
p;t1,
n>&nbsp;<span class="element-name">m</span>&#8203;<span class="parameters">(T&nbsp;t1,
T&nbsp;t2)</span>
throws <span class="exceptions">java.lang.Exception</span></div>""");

View File

@ -68,11 +68,10 @@ public class TestInterface extends JavadocTester {
checkOutput("pkg/Interface.html", true,
"""
<div class="member-signature"><span class="return-type">int</span>&nbsp;<span class="member-name">method</span>()</div>""",
<div class="member-signature"><span class="return-type">int</span>&nbsp;<span class="element-name">method</span>()</div>""",
"""
<div class="member-signature"><span class="modifiers">static final</span>&nbsp;<\
span class="return-type">int</span>&nbsp;<span class="member-name">field</span><\
/div>""",
span class="return-type">int</span>&nbsp;<span class="element-name">field</span></div>""",
// Make sure known implementing class list is correct and omits type parameters.
"""
<dl class="notes">
@ -130,8 +129,7 @@ public class TestInterface extends JavadocTester {
<section class="detail" id="f">
<h3>f</h3>
<div class="member-signature"><span class="modifiers">public static</span>&nbsp;\
<span class="return-type">int</span>&nbsp;<span class="member-name">f</span></di\
v>
<span class="return-type">int</span>&nbsp;<span class="element-name">f</span></div>
<div class="block">A hider field</div>""",
"""
@ -150,8 +148,8 @@ public class TestInterface extends JavadocTester {
<section class="detail" id="staticMethod()">
<h3>staticMethod</h3>
<div class="member-signature"><span class="modifiers">public static</span>&nbsp;\
<span class="return-type">void</span>&nbsp;<span class="member-name">staticMetho\
d</span>()</div>
<span class="return-type">void</span>&nbsp;<span class="element-name">staticMethod</span\
>()</div>
<div class="block"><span class="descfrm-type-label">Description copied from inte\
rface:&nbsp;<code><a href="InterfaceWithStaticMembers.html#staticMethod()">Inter\
faceWithStaticMembers</a></code></span></div>
@ -160,8 +158,9 @@ public class TestInterface extends JavadocTester {
checkOutput("pkg/ClassWithStaticMembers.InnerClass.html", true,
"""
<pre>public static class <span class="type-name-label">ClassWithStaticMembers.InnerClass</span>
extends java.lang.Object</pre>
<div class="type-signature"><span class="modifiers">public static class </span><\
span class="element-name type-name-label">ClassWithStaticMembers.InnerClass</span>
<span class="extends-implements">extends java.lang.Object</span></div>
<div class="block">A hider inner class</div>""");
}

View File

@ -61,15 +61,15 @@ public class TestJavaFX extends JavadocTester {
<a href="#setRate(double)"><code>setRate(double)</code></a></dd>""",
"""
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<\
span class="return-type">void</span>&nbsp;<span class="member-name">setRate</spa\
n>&#8203;<span class="parameters">(double&nbsp;value)</span></div>
span class="return-type">void</span>&nbsp;<span class="element-name">setRate</span>&#820\
3;<span class="parameters">(double&nbsp;value)</span></div>
<div class="block">Sets the value of the property rate.</div>
<dl class="notes">
<dt>Property description:</dt>""",
"""
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<\
span class="return-type">double</span>&nbsp;<span class="member-name">getRate</s\
pan>()</div>
span class="return-type">double</span>&nbsp;<span class="element-name">getRate</span>()<\
/div>
<div class="block">Gets the value of the property rate.</div>
<dl class="notes">
<dt>Property description:</dt>""",
@ -98,22 +98,21 @@ public class TestJavaFX extends JavadocTester {
<h3>paused</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<\
span class="return-type"><a href="C.BooleanProperty.html" title="class in pkg1">\
C.BooleanProperty</a></span>&nbsp;<span class="member-name">pausedProperty</span\
></div>
C.BooleanProperty</a></span>&nbsp;<span class="element-name">pausedProperty</span></div>
<div class="block">Defines if paused. The second line.</div>""",
"""
<section class="detail" id="isPaused()">
<h3>isPaused</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<\
span class="return-type">double</span>&nbsp;<span class="member-name">isPaused</\
span>()</div>
span class="return-type">double</span>&nbsp;<span class="element-name">isPaused</span>()\
</div>
<div class="block">Gets the value of the property paused.</div>""",
"""
<section class="detail" id="setPaused(boolean)">
<h3>setPaused</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<\
span class="return-type">void</span>&nbsp;<span class="member-name">setPaused</s\
pan>&#8203;<span class="parameters">(boolean&nbsp;value)</span></div>
span class="return-type">void</span>&nbsp;<span class="element-name">setPaused</span>&#8\
203;<span class="parameters">(boolean&nbsp;value)</span></div>
<div class="block">Sets the value of the property paused.</div>
<dl class="notes">
<dt>Property description:</dt>
@ -124,8 +123,8 @@ public class TestJavaFX extends JavadocTester {
<section class="detail" id="isPaused()">
<h3>isPaused</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<\
span class="return-type">double</span>&nbsp;<span class="member-name">isPaused</\
span>()</div>
span class="return-type">double</span>&nbsp;<span class="element-name">isPaused</span>()\
</div>
<div class="block">Gets the value of the property paused.</div>
<dl class="notes">
<dt>Property description:</dt>
@ -137,16 +136,15 @@ public class TestJavaFX extends JavadocTester {
<h3>rate</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<\
span class="return-type"><a href="C.DoubleProperty.html" title="class in pkg1">C\
.DoubleProperty</a></span>&nbsp;<span class="member-name">rateProperty</span></d\
iv>
.DoubleProperty</a></span>&nbsp;<span class="element-name">rateProperty</span></div>
<div class="block">Defines the direction/speed at which the <code>Timeline</code> is expected to
be played. This is the second line.</div>""",
"""
<section class="detail" id="setRate(double)">
<h3>setRate</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<\
span class="return-type">void</span>&nbsp;<span class="member-name">setRate</spa\
n>&#8203;<span class="parameters">(double&nbsp;value)</span></div>
span class="return-type">void</span>&nbsp;<span class="element-name">setRate</span>&#820\
3;<span class="parameters">(double&nbsp;value)</span></div>
<div class="block">Sets the value of the property rate.</div>
<dl class="notes">
<dt>Property description:</dt>
@ -160,8 +158,8 @@ public class TestJavaFX extends JavadocTester {
<section class="detail" id="getRate()">
<h3>getRate</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<\
span class="return-type">double</span>&nbsp;<span class="member-name">getRate</s\
pan>()</div>
span class="return-type">double</span>&nbsp;<span class="element-name">getRate</span>()<\
/div>
<div class="block">Gets the value of the property rate.</div>
<dl class="notes">
<dt>Property description:</dt>
@ -249,8 +247,8 @@ public class TestJavaFX extends JavadocTester {
<section class="detail" id="betaProperty">
<h3>beta</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span c\
lass="return-type">java.lang.Object</span>&nbsp;<span class="member-name">betaPr\
operty</span></div>
lass="return-type">java.lang.Object</span>&nbsp;<span class="element-name">betaProperty<\
/span></div>
</section>
</li>
<li>
@ -258,7 +256,7 @@ public class TestJavaFX extends JavadocTester {
<h3>gamma</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<\
span class="return-type">java.util.List&lt;java.lang.String&gt;</span>&nbsp;<spa\
n class="member-name">gammaProperty</span></div>
n class="element-name">gammaProperty</span></div>
</section>
</li>
<li>
@ -266,7 +264,7 @@ public class TestJavaFX extends JavadocTester {
<h3>delta</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<\
span class="return-type">java.util.List&lt;java.util.Set&lt;? super java.lang.Ob\
ject&gt;&gt;</span>&nbsp;<span class="member-name">deltaProperty</span></div>
ject&gt;&gt;</span>&nbsp;<span class="element-name">deltaProperty</span></div>
</section>
</li>
</ul>

View File

@ -60,8 +60,8 @@ public class TestLambdaFeature extends JavadocTester {
ble-tab5 method-summary-table"><code>default void</code></div>""",
"""
<div class="member-signature"><span class="modifiers">default</span>&nbsp;<span \
class="return-type">void</span>&nbsp;<span class="member-name">defaultMethod</sp\
an>()</div>
class="return-type">void</span>&nbsp;<span class="element-name">defaultMethod</span>()</\
div>
""",
"""
<div class="table-tabs" role="tablist" aria-orientation="horizontal">\

View File

@ -112,9 +112,11 @@ public class TestLinkOption extends JavadocTester {
checkOutput("mylib/lang/StringBuilderChild.html", true,
"""
<pre>public abstract class <span class="type-name-label">StringBuilderChild</span>
extends <a href=\"""" + url + """
java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></pre>"""
<div class="type-signature"><span class="modifiers">public abstract class </span\
><span class="element-name type-name-label">StringBuilderChild</span>
<span class="extends-implements">extends <a href=\"""" + url + """
java/lang/Object.html" title="class or interface in java.lang" class="external-l\
ink">Object</a></span></div>"""
);
// Generate the documentation using -linkoffline and a relative path as the first parameter.
@ -155,8 +157,9 @@ public class TestLinkOption extends JavadocTester {
checkExit(Exit.OK);
checkOutput("pkg3/A.html", true,
"""
<pre>public class <span class="type-name-label">A</span>
extends java.lang.Object</pre>
<div class="type-signature"><span class="modifiers">public class </span><span cl\
ass="element-name type-name-label">A</span>
<span class="extends-implements">extends java.lang.Object</span></div>
<div class="block">Test links.
<br>
<a href="../../out2/pkg2/C2.html" title="class or interface in pkg2" class="ext\
@ -179,8 +182,9 @@ public class TestLinkOption extends JavadocTester {
checkExit(Exit.OK);
checkOutput("pkg3/A.html", true,
"""
<pre>public class <span class="type-name-label">A</span>
extends java.lang.Object</pre>
<div class="type-signature"><span class="modifiers">public class </span><span cl\
ass="element-name type-name-label">A</span>
<span class="extends-implements">extends java.lang.Object</span></div>
<div class="block">Test links.
<br>
<a href="../../copy/out2/pkg2/C2.html" title="class or interface in pkg2" class\

View File

@ -103,8 +103,8 @@ public class TestLiteralCodeInPre extends JavadocTester {
</PRE></div>""",
"""
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span c\
lass="return-type">void</span>&nbsp;<span class="member-name">htmlAttrInPre1</sp\
an>()</div>
lass="return-type">void</span>&nbsp;<span class="element-name">htmlAttrInPre1</span>()</\
div>
<div class="block">More html tag outliers.
<pre>
@Override

View File

@ -121,8 +121,9 @@ public class TestMemberInheritance extends JavadocTester {
"""
<section class="description">
<hr>
<pre>public abstract class <span class="type-name-label">DocumentedNonGenericChild</span>
extends java.lang.Object</pre>
<div class="type-signature"><span class="modifiers">public abstract class </span\
><span class="element-name type-name-label">DocumentedNonGenericChild</span>
<span class="extends-implements">extends java.lang.Object</span></div>
</section>""");
checkOutput("pkg2/DocumentedNonGenericChild.html", true,
@ -142,8 +143,8 @@ public class TestMemberInheritance extends JavadocTester {
<section class="detail" id="parentMethod(T)">
<h3 id="parentMethod(java.lang.Object)">parentMethod</h3>
<div class="member-signature"><span class="modifiers">protected abstract</span>&\
nbsp;<span class="return-type">java.lang.String</span>&nbsp;<span class="member-\
name">parentMethod</span>&#8203;<span class="parameters">(java.lang.String&nbsp;\
nbsp;<span class="return-type">java.lang.String</span>&nbsp;<span class="element-name">p\
arentMethod</span>&#8203;<span class="parameters">(java.lang.String&nbsp;\
t)</span>
throws <span class="exceptions">java.lang.IllegalArgumentException,
java.lang.InterruptedException,
@ -169,8 +170,8 @@ public class TestMemberInheritance extends JavadocTester {
<section class="detail" id="parentField">
<h3>parentField</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span c\
lass="return-type">java.lang.String</span>&nbsp;<span class="member-name">parent\
Field</span></div>
lass="return-type">java.lang.String</span>&nbsp;<span class="element-name">parentField</\
span></div>
<div class="block">A field.</div>
</section>""");
@ -185,8 +186,8 @@ public class TestMemberInheritance extends JavadocTester {
<section class="detail" id="method(T)">
<h3 id="method(java.lang.Object)">method</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span c\
lass="return-type">java.lang.String</span>&nbsp;<span class="member-name">method\
</span>&#8203;<span class="parameters">(java.lang.String&nbsp;t)</span></div>
lass="return-type">java.lang.String</span>&nbsp;<span class="element-name">method</span>\
&#8203;<span class="parameters">(java.lang.String&nbsp;t)</span></div>
</section>""");
checkOutput("index-all.html", true,
@ -233,8 +234,8 @@ public class TestMemberInheritance extends JavadocTester {
<section class="detail" id="parentMethod(T)">
<h3 id="parentMethod(java.lang.Object)">parentMethod</h3>
<div class="member-signature"><span class="modifiers">protected abstract</span>&\
nbsp;<span class="return-type">java.lang.String</span>&nbsp;<span class="member-\
name">parentMethod</span>&#8203;<span class="parameters">(java.lang.String&nbsp;\
nbsp;<span class="return-type">java.lang.String</span>&nbsp;<span class="element-name">p\
arentMethod</span>&#8203;<span class="parameters">(java.lang.String&nbsp;\
t)</span>
throws <span class="exceptions">java.lang.IllegalArgumentException,
java.lang.InterruptedException,

View File

@ -61,7 +61,7 @@ public class TestMemberSummary extends JavadocTester {
"""
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span c\
lass="return-type"><a href="PublicChild.html" title="class in pkg">PublicChild</\
a></span>&nbsp;<span class="member-name">returnTypeTest</span>()</div>""",
a></span>&nbsp;<span class="element-name">returnTypeTest</span>()</div>""",
"""
<div class="col-constructor-name even-row-color"><code><span class="member-name-link"\
><a href="#%3Cinit%3E()">PublicChild</a></span>()</code></div>

View File

@ -51,11 +51,11 @@ public class TestMethodSignature extends JavadocTester {
checkOutput("pkg/C.html", true,
"""
<div class="member-signature"><span class="annotations">@Generated("GeneratedConstructor")
</span><span class="modifiers">public</span>&nbsp;<span class="member-name">C</span>()</div>""",
</span><span class="modifiers">public</span>&nbsp;<span class="element-name">C</span>()</div>""",
"""
<div class="member-signature"><span class="modifiers">public static</span>&nbsp;\
<span class="return-type">void</span>&nbsp;<span class="member-name">simpleMetho\
<span class="return-type">void</span>&nbsp;<span class="element-name">simpleMetho\
d</span>&#8203;<span class="parameters">(int&nbsp;i,
java.lang.String&nbsp;s,
boolean&nbsp;b)</span></div>""",
@ -65,8 +65,8 @@ public class TestMethodSignature extends JavadocTester {
date="a date",
comments="some comment about the method below")
</span><span class="modifiers">public static</span>&nbsp;<span class="return-typ\
e">void</span>&nbsp;<span class="member-name">annotatedMethod</span>&#8203;<span\
class="parameters">(int&nbsp;i,
e">void</span>&nbsp;<span class="element-name">annotatedMethod</span>&#8203;<span class=\
"parameters">(int&nbsp;i,
java.lang.String&nbsp;s,
boolean&nbsp;b)</span></div>""",
@ -83,9 +83,9 @@ public class TestMethodSignature extends JavadocTester {
T8 extends java.lang.AutoCloseable&gt;</span>
<span class="return-type"><a href="C.With8Types.html" title="class in pkg">C.Wit\
h8Types</a>&lt;T1,&#8203;T2,&#8203;T3,&#8203;T4,&#8203;T5,&#8203;T6,&#8203;T7,&#\
8203;T8&gt;</span>&nbsp;<span class="member-name">bigGenericMethod</span>&#8203;\
<span class="parameters">(<a href="C.F0.html" title="interface in pkg">C.F0</a>&\
lt;? extends T1&gt;&nbsp;t1,
8203;T8&gt;</span>&nbsp;<span class="element-name">bigGenericMethod</span>&#8203;<span c\
lass="parameters">(<a href="C.F0.html" title="interface in pkg">C.F0</a>&lt;? ex\
tends T1&gt;&nbsp;t1,
<a href="C.F0.html" title="interface in pkg">C.F0</a>&lt;? extends T2&gt;&nbsp;t2,
<a href="C.F0.html" title="interface in pkg">C.F0</a>&lt;? extends T3&gt;&nbsp;t3,
<a href="C.F0.html" title="interface in pkg">C.F0</a>&lt;? extends T4&gt;&nbsp;t4,
@ -111,9 +111,9 @@ public class TestMethodSignature extends JavadocTester {
T8 extends java.lang.AutoCloseable&gt;</span>
<span class="return-type"><a href="C.With8Types.html" title="class in pkg">C.Wit\
h8Types</a>&lt;T1,&#8203;T2,&#8203;T3,&#8203;T4,&#8203;T5,&#8203;T6,&#8203;T7,&#\
8203;T8&gt;</span>&nbsp;<span class="member-name">bigGenericAnnotatedMethod</spa\
n>&#8203;<span class="parameters">(<a href="C.F0.html" title="interface in pkg">\
C.F0</a>&lt;? extends T1&gt;&nbsp;t1,
8203;T8&gt;</span>&nbsp;<span class="element-name">bigGenericAnnotatedMethod</span>&#820\
3;<span class="parameters">(<a href="C.F0.html" title="interface in pkg">C.F0</a\
>&lt;? extends T1&gt;&nbsp;t1,
<a href="C.F0.html" title="interface in pkg">C.F0</a>&lt;? extends T2&gt;&nbsp;t2,
<a href="C.F0.html" title="interface in pkg">C.F0</a>&lt;? extends T3&gt;&nbsp;t3,
<a href="C.F0.html" title="interface in pkg">C.F0</a>&lt;? extends T4&gt;&nbsp;t4,

View File

@ -47,19 +47,24 @@ public class TestModifierEx extends JavadocTester {
checkExit(Exit.OK);
checkOutput("pkg1/Abstract.html", true,
"""
<pre>public abstract class <span class="type-name-label">Abstract</span>""");
<div class="type-signature"><span class="modifiers">public abstract class </span\
><span class="element-name type-name-label">Abstract</span>""");
checkOutput("pkg1/Interface.html", true,
"""
<pre>interface <span class="type-name-label">Interface</span></pre>""");
<div class="type-signature"><span class="modifiers">interface </span><span class\
="element-name type-name-label">Interface</span></div>""");
checkOutput("pkg1/Interface.Kind.html", true,
"""
<pre>public static interface <span class="type-name-label">Interface.Kind</span></pre>""");
<div class="type-signature"><span class="modifiers">public static interface </sp\
an><span class="element-name type-name-label">Interface.Kind</span></div>""");
checkOutput("pkg1/Enum.html", true,
"""
<pre>public enum <span class="type-name-label">Enum</span>""");
<div class="type-signature"><span class="modifiers">public enum </span><span cla\
ss="element-name type-name-label">Enum</span>""");
checkOutput("pkg1/Klass.StaticEnum.html", true,
"""
<pre>public static enum <span class="type-name-label">Klass.StaticEnum</span>""");
<div class="type-signature"><span class="modifiers">public static enum </span><s\
pan class="element-name type-name-label">Klass.StaticEnum</span>""");
}
}

View File

@ -27,7 +27,7 @@
* 8168766 8168688 8162674 8160196 8175799 8174974 8176778 8177562 8175218
* 8175823 8166306 8178043 8181622 8183511 8169819 8074407 8183037 8191464
* 8164407 8192007 8182765 8196200 8196201 8196202 8196202 8205593 8202462
* 8184205 8219060 8223378 8234746 8239804 8239816 8253117
* 8184205 8219060 8223378 8234746 8239804 8239816 8253117 8245058
* @summary Test modules support in javadoc.
* @library ../../lib
* @modules jdk.javadoc/jdk.javadoc.internal.tool
@ -497,27 +497,6 @@ public class TestModules extends JavadocTester {
<caption><span>Modules</span><span class="tab-end">&nbsp;</span></caption>""");
}
void checkNoDescription(boolean found) {
checkOutput("moduleA/module-summary.html", found,
"""
<div class="header">
<p>@Deprecated(forRemoval=true)
</p>
<h1 title="Module" class="title">Module&nbsp;moduleA</h1>
</div><ul class="block-list">
<li>
<ul class="block-list">
<li>
<!-- ============ PACKAGES SUMMARY =========== -->""");
checkOutput("moduleB/module-summary.html", found,
"""
<ul class="block-list">
<li>
<ul class="block-list">
<li>
<!-- ============ PACKAGES SUMMARY =========== -->""");
}
void checkHtml5Description(boolean found) {
checkOutput("moduleA/module-summary.html", found,
"""
@ -563,10 +542,11 @@ public class TestModules extends JavadocTester {
checkOutput("moduleA/module-summary.html", found,
"""
<div class="header">
<p>@Deprecated(forRemoval=true)
</p>
<h1 title="Module" class="title">Module&nbsp;moduleA</h1>
</div>
<hr>
<div class="module-signature"><span class="annotations">@Deprecated(forRemoval=true)
</span>module <span class="element-name">moduleA</span></div>
<section class="summary">
<ul class="summary-list">
<li>
@ -574,13 +554,15 @@ public class TestModules extends JavadocTester {
<!-- ============ PACKAGES SUMMARY =========== -->""");
checkOutput("moduleB/module-summary.html", found,
"""
<p><a href="testpkgmdlB/AnnotationType.html" title="annotation in testpkgmdlB">@\
AnnotationType</a>(<a href="testpkgmdlB/AnnotationType.html#optional()">optional\
</a>="Module Annotation",
<a href="testpkgmdlB/AnnotationType.html#required()">required</a>=2016)
</p>
<div class="header">
<h1 title="Module" class="title">Module&nbsp;moduleB</h1>
</div>
<hr>
<div class="module-signature"><span class="annotations"><a href="testpkgmdlB/Ann\
otationType.html" title="annotation in testpkgmdlB">@AnnotationType</a>(<a href=\
"testpkgmdlB/AnnotationType.html#optional()">optional</a>="Module Annotation",
<a href="testpkgmdlB/AnnotationType.html#required()">required</a>=2016)
</span>module <span class="element-name">moduleB</span></div>
<section class="summary">
<ul class="summary-list">
<li>
@ -1119,8 +1101,12 @@ public class TestModules extends JavadocTester {
""");
checkOutput("moduletags/module-summary.html", found,
"""
<p>@Deprecated
</p>""",
<div class="header">
<h1 title="Module" class="title">Module&nbsp;moduletags</h1>
</div>
<hr>
<div class="module-signature"><span class="annotations">@Deprecated
</span>module <span class="element-name">moduletags</span></div>""",
"""
<div class="deprecation-block"><span class="deprecated-label">Deprecated.</span></div>""");
}
@ -1128,11 +1114,16 @@ public class TestModules extends JavadocTester {
void checkModuleAnnotation() {
checkOutput("moduleB/module-summary.html", true,
"""
<p><a href="testpkgmdlB/AnnotationType.html" title="annotation in testpkgmdlB">@\
AnnotationType</a>(<a href="testpkgmdlB/AnnotationType.html#optional()">optional\
</a>="Module Annotation",
<div class="header">
<h1 title="Module" class="title">Module&nbsp;moduleB</h1>
</div>
<hr>
<div class="module-signature"><span class="annotations"><a href="testpkgmdlB/Ann\
otationType.html" title="annotation in testpkgmdlB">@AnnotationType</a>(<a href=\
"testpkgmdlB/AnnotationType.html#optional()">option\
al</a>="Module Annotation",
<a href="testpkgmdlB/AnnotationType.html#required()">required</a>=2016)
</p>""");
</span>module <span class="element-name">moduleB</span></div>""");
checkOutput("moduleB/module-summary.html", false,
"@AnnotationTypeUndocumented");
}
@ -1349,8 +1340,10 @@ public class TestModules extends JavadocTester {
"""
<section class="description">
<hr>
<pre>public class <a href="../../src-html/moduleA/testpkgmdlA/TestClassInModuleA.html#line.25">TestClassInModuleA</a>
extends java.lang.Object</pre>
<div class="type-signature"><span class="modifiers">public class </span><span cl\
ass="element-name"><a href="../../src-html/moduleA/testpkgmdlA/TestClassInModule\
A.html#line.25">TestClassInModuleA</a></span>
<span class="extends-implements">extends java.lang.Object</span></div>
</section>""");
checkOutput("src-html/moduleA/testpkgmdlA/TestClassInModuleA.html", true,
"""

View File

@ -67,9 +67,11 @@ public class TestNewLanguageFeatures extends JavadocTester {
// Make sure enum header is correct.
"Enum Coin</h1>",
// Make sure enum signature is correct.
"""
<pre>public enum <span class="type-name-label">Coin</span>
extends java.lang.Enum&lt;<a href="Coin.html" title="enum in pkg">Coin</a>&gt;</pre>""",
"""
<div class="type-signature"><span class="modifiers">public enum </span><span clas\
s="element-name type-name-label">Coin</span>
<span class="extends-implements">extends java.lang.Enum&lt;<a href="Coin.html" ti\
tle="enum in pkg">Coin</a>&gt;</span></div>""",
// Check for enum constant section
"<div class=\"caption\"><span>Enum Constants</span></div>",
// Detail for enum constant
@ -83,8 +85,8 @@ public class TestNewLanguageFeatures extends JavadocTester {
"""
<div class="member-signature"><span class="modifiers">public static</span>&nbsp;\
<span class="return-type"><a href="Coin.html" title="enum in pkg">Coin</a></span\
>&nbsp;<span class="member-name">valueOf</span>&#8203;<span class="parameters">(\
java.lang.String&nbsp;name)</span></div>
>&nbsp;<span class="element-name">valueOf</span>&#8203;<span class="parameters">(java.la\
ng.String&nbsp;name)</span></div>
<div class="block">Returns the enum constant of this type with the specified name.
The string must match <i>exactly</i> an identifier used to declare an
enum constant in this type. (Extraneous whitespace characters are\s
@ -134,9 +136,8 @@ public class TestNewLanguageFeatures extends JavadocTester {
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span c\
lass="type-parameters">&lt;T extends java.util.List,&#8203;
V&gt;</span>
<span class="return-type">java.lang.String[]</span>&nbsp;<span class="member-nam\
e">methodThatHasTypeParameters</span>&#8203;<span class="parameters">(T&nbsp;par\
am1,
<span class="return-type">java.lang.String[]</span>&nbsp;<span class="element-name">meth\
odThatHasTypeParameters</span>&#8203;<span class="parameters">(T&nbsp;param1,
V&nbsp;param2)</span></div>""",
// Method that returns TypeParameters
"""
@ -151,8 +152,8 @@ public class TestNewLanguageFeatures extends JavadocTester {
"""
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span c\
lass="return-type"><a href="TypeParameters.html" title="type parameter in TypePa\
rameters">E</a>[]</span>&nbsp;<span class="member-name">methodThatReturnsTypePar\
ameterA</span>&#8203;<span class="parameters">(<a href="TypeParameters.html" tit\
rameters">E</a>[]</span>&nbsp;<span class="element-name">methodThatReturnsTypeParameterA\
</span>&#8203;<span class="parameters">(<a href="TypeParameters.html" tit\
le="type parameter in TypeParameters">E</a>[]&nbsp;e)</span></div>
""",
"""
@ -197,8 +198,11 @@ public class TestNewLanguageFeatures extends JavadocTester {
// Signature of subclass that has type parameters.
checkOutput("pkg/TypeParameterSubClass.html", true,
"""
<pre>public class <span class="type-name-label">TypeParameterSubClass&lt;T extends java.lang.String&gt;</span>
extends <a href="TypeParameterSuperClass.html" title="class in pkg">TypeParameterSuperClass</a>&lt;T&gt;</pre>""");
<div class="type-signature"><span class="modifiers">public class </span><span cl\
ass="element-name type-name-label">TypeParameterSubClass&lt;T extends java.lang.\
String&gt;</span>
<span class="extends-implements">extends <a href="TypeParameterSuperClass.html" \
title="class in pkg">TypeParameterSuperClass</a>&lt;T&gt;</span></div>""");
// Interface generic parameter substitution
// Signature of subclass that has type parameters.
@ -232,8 +236,8 @@ public class TestNewLanguageFeatures extends JavadocTester {
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span c\
lass="type-parameters">&lt;T extends java.lang.Number &amp; java.lang.Runnable&g\
t;</span>
<span class="return-type">T</span>&nbsp;<span class="member-name">foo</span>&#82\
03;<span class="parameters">(T&nbsp;t)</span></div>""");
<span class="return-type">T</span>&nbsp;<span class="element-name">foo</span>&#8203;<spa\
n class="parameters">(T&nbsp;t)</span></div>""");
//==============================================================
// Test Class-Use Documentation for Type Parameters.
@ -523,11 +527,13 @@ public class TestNewLanguageFeatures extends JavadocTester {
checkOutput("pkg/AnnotationTypeUsage.html", true,
// CLASS
"""
<pre><a href="AnnotationType.html" title="annotation in pkg">@AnnotationType</a>\
(<a href="AnnotationType.html#optional()">optional</a>="Class Annotation",
<div class="type-signature"><span class="annotations"><a href="AnnotationType.ht\
ml" title="annotation in pkg">@AnnotationType</a>(<a href="AnnotationType.html#o\
ptional()">optional</a>="Class Annotation",
<a href="AnnotationType.html#required()">required</a>=1994)
public class <span class="type-name-label">AnnotationTypeUsage</span>
extends java.lang.Object</pre>""",
</span><span class="modifiers">public class </span><span class="element-name type-name-l\
abel">AnnotationTypeUsage</span>
<span class="extends-implements">extends java.lang.Object</span></div>""",
// FIELD
"""
<div class="member-signature"><span class="annotations"><a href="AnnotationType.\
@ -535,14 +541,14 @@ public class TestNewLanguageFeatures extends JavadocTester {
#optional()">optional</a>="Field Annotation",
<a href="AnnotationType.html#required()">required</a>=1994)
</span><span class="modifiers">public</span>&nbsp;<span class="return-type">int<\
/span>&nbsp;<span class="member-name">field</span></div>""",
/span>&nbsp;<span class="element-name">field</span></div>""",
// CONSTRUCTOR
"""
<div class="member-signature"><span class="annotations"><a href="AnnotationType.\
html" title="annotation in pkg">@AnnotationType</a>(<a href="AnnotationType.html\
#optional()">optional</a>="Constructor Annotation",
<a href="AnnotationType.html#required()">required</a>=1994)
</span><span class="modifiers">public</span>&nbsp;<span class="member-name">AnnotationTypeUsage</span>()</div>""",
</span><span class="modifiers">public</span>&nbsp;<span class="element-name">AnnotationTypeUsage</span>()</div>""",
// METHOD
"""
<div class="member-signature"><span class="annotations"><a href="AnnotationType.\
@ -550,24 +556,24 @@ public class TestNewLanguageFeatures extends JavadocTester {
#optional()">optional</a>="Method Annotation",
<a href="AnnotationType.html#required()">required</a>=1994)
</span><span class="modifiers">public</span>&nbsp;<span class="return-type">void\
</span>&nbsp;<span class="member-name">method</span>()</div>""",
</span>&nbsp;<span class="element-name">method</span>()</div>""",
// METHOD PARAMS
"""
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span c\
lass="return-type">void</span>&nbsp;<span class="member-name">methodWithParams</\
span>&#8203;<span class="parameters">(<a href="AnnotationType.html" title="annot\
ation in pkg">@AnnotationType</a>(<a href="AnnotationType.html#optional()">optio\
nal</a>="Parameter Annotation",<a href="AnnotationType.html#required()">required\
</a>=1994)
lass="return-type">void</span>&nbsp;<span class="element-name">methodWithParams</span>&#\
8203;<span class="parameters">(<a href="AnnotationType.html" title="annotation i\
n pkg">@AnnotationType</a>(<a href="AnnotationType.html#optional()">optional</a>\
="Parameter Annotation",<a href="AnnotationType.html#required()">required</a>=19\
94)
int&nbsp;documented,
int&nbsp;undocmented)</span></div>""",
// CONSTRUCTOR PARAMS
"""
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span c\
lass="member-name">AnnotationTypeUsage</span>&#8203;<span class="parameters">(<a\
href="AnnotationType.html" title="annotation in pkg">@AnnotationType</a>(<a hre\
f="AnnotationType.html#optional()">optional</a>="Constructor Param Annotation",<\
a href="AnnotationType.html#required()">required</a>=1994)
lass="element-name">AnnotationTypeUsage</span>&#8203;<span class="parameters">(<\
a href="AnnotationType.html" title="annotation in pkg">@AnnotationType</a>(<a hr\
ef="AnnotationType.html#optional()">optional</a>="Constructor Param Annotation",\
<a href="AnnotationType.html#required()">required</a>=1994)
int&nbsp;documented,
int&nbsp;undocmented)</span></div>""");
@ -682,12 +688,11 @@ public class TestNewLanguageFeatures extends JavadocTester {
// XXX: Add array test case after this if fixed:
//5020899: Incorrect internal representation of class-valued annotation elements
// Make sure that annotations are surrounded by <pre> and </pre>
checkOutput("pkg1/B.html", true,
"""
<pre><a href="A.html" title="annotation in pkg1">@A</a>""",
<div class="type-signature"><span class="annotations"><a href="A.html" title="annotation in pkg1">@A</a>""",
"""
public interface <span class="type-name-label">B</span></pre>""");
<span class="modifiers">public interface </span><span class="element-name type-name-label">B</span></div>""");
}
}

View File

@ -192,21 +192,23 @@ public class TestOptions extends JavadocTester {
checkLinks();
checkOutput("linksource/AnnotationTypeField.html", true,
"""
<pre>@Documented
public @interface <a href="../src-html/linksource/AnnotationTypeField.html#line.31">AnnotationTypeField</a></pre>""",
<div class="type-signature"><span class="annotations">@Documented
</span><span class="modifiers">public @interface </span><span class="element-name"><a hr\
ef="../src-html/linksource/AnnotationTypeField.html#line.31">AnnotationTypeField\
</a></span></div>""",
"""
<section class="detail" id="DEFAULT_NAME">
<h3>DEFAULT_NAME</h3>
<div class="member-signature"><span class="modifiers">static final</span>&nbsp;<\
span class="return-type">java.lang.String</span>&nbsp;<span class="member-name">\
<a href="../src-html/linksource/AnnotationTypeField.html#line.32">DEFAULT_NAME</\
a></span></div>""",
span class="return-type">java.lang.String</span>&nbsp;<span class="element-name"><a href\
="../src-html/linksource/AnnotationTypeField.html#line.32">DEFAULT_NAME</a></spa\
n></div>""",
"""
<section class="detail" id="name()">
<h3>name</h3>
<div class="member-signature"><span class="return-type">java.lang.String</span>&\
nbsp;<span class="member-name"><a href="../src-html/linksource/AnnotationTypeFie\
ld.html#line.34">name</a></span></div>""");
nbsp;<span class="element-name"><a href="../src-html/linksource/AnnotationTypeField.html\
#line.34">name</a></span></div>""");
checkOutput("src-html/linksource/AnnotationTypeField.html", true,
"<title>Source code</title>",
@ -215,11 +217,12 @@ public class TestOptions extends JavadocTester {
checkOutput("linksource/Properties.html", true,
"""
<pre>public class <a href="../src-html/linksource/Properties.html#line.29">Properties</a>""",
<div class="type-signature"><span class="modifiers">public class </span><span cl\
ass="element-name"><a href="../src-html/linksource/Properties.html#line.29">Properties</a>""",
"""
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span c\
lass="return-type">java.lang.Object</span>&nbsp;<span class="member-name"><a hre\
f="../src-html/linksource/Properties.html#line.31">someProperty</a></span></div>""");
lass="return-type">java.lang.Object</span>&nbsp;<span class="element-name"><a href="../s\
rc-html/linksource/Properties.html#line.31">someProperty</a></span></div>""");
checkOutput("src-html/linksource/Properties.html", true,
"<title>Source code</title>",
@ -228,20 +231,22 @@ public class TestOptions extends JavadocTester {
checkOutput("linksource/SomeClass.html", true,
"""
<pre>public class <a href="../src-html/linksource/SomeClass.html#line.29">SomeClass</a>
extends java.lang.Object</pre>""",
<div class="type-signature"><span class="modifiers">public class </span><span cl\
ass="element-name"><a href="../src-html/linksource/SomeClass.html#line.29">SomeC\
lass</a></span>
<span class="extends-implements">extends java.lang.Object</span></div>""",
"""
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span c\
lass="return-type">int</span>&nbsp;<span class="member-name"><a href="../src-htm\
l/linksource/SomeClass.html#line.31">field</a></span></div>""",
lass="return-type">int</span>&nbsp;<span class="element-name"><a href="../src-html/links\
ource/SomeClass.html#line.31">field</a></span></div>""",
"""
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span c\
lass="member-name"><a href="../src-html/linksource/SomeClass.html#line.33">SomeC\
lass</a></span>()</div>""",
lass="element-name"><a href="../src-html/linksource/SomeClass.html#line.33">Some\
Class</a></span>()</div>""",
"""
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span c\
lass="return-type">int</span>&nbsp;<span class="member-name"><a href="../src-htm\
l/linksource/SomeClass.html#line.36">method</a></span>()</div>""");
lass="return-type">int</span>&nbsp;<span class="element-name"><a href="../src-html/links\
ource/SomeClass.html#line.36">method</a></span>()</div>""");
checkOutput("src-html/linksource/SomeClass.html", true,
"<title>Source code</title>",
@ -258,13 +263,13 @@ public class TestOptions extends JavadocTester {
"""
<div class="member-signature"><span class="modifiers">public static final</span>\
&nbsp;<span class="return-type"><a href="SomeEnum.html" title="enum in linksourc\
e">SomeEnum</a></span>&nbsp;<span class="member-name"><a href="../src-html/links\
ource/SomeEnum.html#line.29">VALUE1</a></span></div>""",
e">SomeEnum</a></span>&nbsp;<span class="element-name"><a href="../src-html/linksource/S\
omeEnum.html#line.29">VALUE1</a></span></div>""",
"""
<div class="member-signature"><span class="modifiers">public static final</span>\
&nbsp;<span class="return-type"><a href="SomeEnum.html" title="enum in linksourc\
e">SomeEnum</a></span>&nbsp;<span class="member-name"><a href="../src-html/links\
ource/SomeEnum.html#line.30">VALUE2</a></span></div>""");
e">SomeEnum</a></span>&nbsp;<span class="element-name"><a href="../src-html/linksource/S\
omeEnum.html#line.30">VALUE2</a></span></div>""");
checkOutput("src-html/linksource/SomeEnum.html", true,
"""

View File

@ -588,20 +588,16 @@ public class TestOrdering extends JavadocTester {
"<h2>Field Details</h2>",
"""
<div class="member-signature"><span class="modifiers">static final</span>&nbsp;<\
span class="return-type">int</span>&nbsp;<span class="member-name">one</span></d\
iv>""",
span class="return-type">int</span>&nbsp;<span class="element-name">one</span></div>""",
"""
<div class="member-signature"><span class="modifiers">static final</span>&nbsp;<\
span class="return-type">int</span>&nbsp;<span class="member-name">two</span></d\
iv>""",
span class="return-type">int</span>&nbsp;<span class="element-name">two</span></div>""",
"""
<div class="member-signature"><span class="modifiers">static final</span>&nbsp;<\
span class="return-type">int</span>&nbsp;<span class="member-name">three</span><\
/div>""",
span class="return-type">int</span>&nbsp;<span class="element-name">three</span></div>""",
"""
<div class="member-signature"><span class="modifiers">static final</span>&nbsp;<\
span class="return-type">int</span>&nbsp;<span class="member-name">four</span></\
div>""");
span class="return-type">int</span>&nbsp;<span class="element-name">four</span></div>""");
checkOrder("pkg5/AnnoOptionalTest.html",
"<h2>Optional Element Summary</h2>",

View File

@ -56,8 +56,7 @@ public class TestBadOverride extends JavadocTester {
<section class="detail" id="toString()">
<h3>toString</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span c\
lass="return-type">void</span>&nbsp;<span class="member-name">toString</span>()<\
/div>
lass="return-type">void</span>&nbsp;<span class="element-name">toString</span>()</div>
<div class="block">Why can't I do this ?</div>
</section>""");
}

View File

@ -62,13 +62,13 @@ public class TestOverriddenDeprecatedMethods extends JavadocTester {
"""
<span class="annotations">@Deprecated
</span><span class="modifiers">public</span>&nbsp;<span class="return-type">void\
</span>&nbsp;<span class="member-name">func1</span>()""",
</span>&nbsp;<span class="element-name">func1</span>()""",
"""
<div class="deprecation-block"><span class="deprecated-label">Deprecated.</span></div>""",
"""
<span class="annotations">@Deprecated
</span><span class="modifiers">public</span>&nbsp;<span class="return-type">void\
</span>&nbsp;<span class="member-name">func2</span>()""",
</span>&nbsp;<span class="element-name">func2</span>()""",
"""
<div class="deprecation-block"><span class="deprecated-label">Deprecated.</span></div>""",
"""

View File

@ -23,7 +23,7 @@
/*
* @test
* @bug 8222091
* @bug 8222091 8245058
* @summary Javadoc does not handle package annotations correctly on package-info.java
* @library ../../lib/
* @modules jdk.javadoc/jdk.javadoc.internal.tool
@ -52,10 +52,11 @@ public class TestPackageAnnotation extends JavadocTester {
"""
<main role="main">
<div class="header">
<p>@Deprecated(since="1&lt;2&gt;3")
</p>
<h1 title="Package" class="title">Package&nbsp;pkg1</h1>
</div>
<hr>
<div class="package-signature"><span class="annotations">@Deprecated(since="1&lt;2&gt;3")
</span>package <span class="element-name">pkg1</span></div>
""");
}
@ -87,10 +88,11 @@ public class TestPackageAnnotation extends JavadocTester {
"""
<main role="main">
<div class="header">
<p>@Deprecated(since="1&lt;2&gt;3")
</p>
<h1 title="Package" class="title">Package&nbsp;pkg3</h1>
</div>
<hr>
<div class="package-signature"><span class="annotations">@Deprecated(since="1&lt;2&gt;3")
</span>package <span class="element-name">pkg3</span></div>
""");
}
}

View File

@ -73,8 +73,8 @@ public class TestPrivateClasses extends JavadocTester {
// Method is documented as though it is declared in the inheriting method.
"""
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span c\
lass="return-type">void</span>&nbsp;<span class="member-name">methodInheritedFro\
mParent</span>&#8203;<span class="parameters">(int&nbsp;p1)</span>
lass="return-type">void</span>&nbsp;<span class="element-name">methodInheritedFromParent\
</span>&#8203;<span class="parameters">(int&nbsp;p1)</span>
throws <span class="exceptions">java.lang.Exception</span></div>""",
"""
<dl class="notes">
@ -191,7 +191,8 @@ public class TestPrivateClasses extends JavadocTester {
blicInterface</a></code></dd>
</dl>""",
"""
<pre>public class <span class="type-name-label">PublicChild</span>""");
<div class="type-signature"><span class="modifiers">public class </span><span cl\
ass="element-name type-name-label">PublicChild</span>""");
checkOutput("pkg/PublicInterface.html", true,
// Field inheritence from non-public superinterface.
@ -235,10 +236,12 @@ public class TestPrivateClasses extends JavadocTester {
//Make sure when no modifier appear in the class signature, the
//signature is displayed correctly without extra space at the beginning.
"""
<pre>class <span class="type-name-label">PrivateParent</span>""");
<div class="type-signature"><span class="modifiers">class </span><span class="el\
ement-name type-name-label">PrivateParent</span>""");
checkOutput("pkg/PrivateParent.html", false,
"""
<pre> class <span class="type-name-label">PrivateParent</span>""");
<div class="type-signature"><span class="modifiers"> class </span><span class="el\
ement-name type-name-label">PrivateParent</span>""");
}
}

View File

@ -55,7 +55,7 @@ public class TestProperty extends JavadocTester {
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<\
span class="return-type"><a href="ObjectProperty.html" title="class in pkg">Obje\
ctProperty</a>&lt;<a href="MyObj.html" title="class in pkg">MyObj</a>&gt;</span>\
&nbsp;<span class="member-name">goodProperty</span></div>
&nbsp;<span class="element-name">goodProperty</span></div>
<div class="block">This is an Object property where the Object is a single Object.</div>
<dl class="notes">
<dt>See Also:</dt>
@ -67,7 +67,7 @@ public class TestProperty extends JavadocTester {
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<\
span class="return-type"><a href="ObjectProperty.html" title="class in pkg">Obje\
ctProperty</a>&lt;<a href="MyObj.html" title="class in pkg">MyObj</a>[]&gt;</spa\
n>&nbsp;<span class="member-name">badProperty</span></div>
n>&nbsp;<span class="element-name">badProperty</span></div>
<div class="block">This is an Object property where the Object is an array.</div>
<dl class="notes">
<dt>See Also:</dt>
@ -100,8 +100,8 @@ public class TestProperty extends JavadocTester {
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<\
span class="return-type"><a href="ObjectProperty.html" title="class in pkg">Obje\
ctProperty</a>&lt;java.util.List&lt;<a href="MyClassT.html" title="type paramete\
r in MyClassT">T</a>&gt;&gt;</span>&nbsp;<span class="member-name">listProperty<\
/span></div>
r in MyClassT">T</a>&gt;&gt;</span>&nbsp;<span class="element-name">listProperty</span><\
/div>
<div class="block">This is an Object property where the Object is a single <code>List&lt;T&gt;</code>.</div>
<dl class="notes">
<dt>See Also:</dt>

View File

@ -75,7 +75,7 @@ public class TestRecordTypes extends JavadocTester {
"""
<h1 title="Record R" class="title">Record R</h1>""",
"""
public record <span class="type-name-label">R</span>""",
<span class="modifiers">public record </span><span class="element-name type-name-label">R</span>""",
"""
<code><span class="member-name-link"><a href="#%3Cinit%3E(int)">R</a></span>&#8203;(int&nbsp;r1)</code>""");
}
@ -96,7 +96,7 @@ public class TestRecordTypes extends JavadocTester {
"""
<h1 title="Record R" class="title">Record R</h1>""",
"""
public record <span class="type-name-label">R</span>""",
<span class="modifiers">public record </span><span class="element-name type-name-label">R</span>""",
"""
<code><span class="member-name-link"><a href="#%3Cinit%3E(int)">R</a></span>&#8203;(int&nbsp;r1)</code>""");
}
@ -117,7 +117,7 @@ public class TestRecordTypes extends JavadocTester {
"""
<h1 title="Record R" class="title">Record R</h1>""",
"""
public record <span class="type-name-label">R</span>""",
<span class="modifiers">public record </span><span class="element-name type-name-label">R</span>""",
"""
<code><span class="member-name-link"><a href="#%3Cinit%3E()">R</a></span>()</code>""");
}
@ -142,7 +142,7 @@ public class TestRecordTypes extends JavadocTester {
"""
<h1 title="Record R" class="title">Record R</h1>""",
"""
public record <span class="type-name-label">R</span>""",
<span class="modifiers">public record </span><span class="element-name type-name-label">R</span>""",
"""
<dl class="notes">
<dt>Record Components:</dt>
@ -173,7 +173,7 @@ public class TestRecordTypes extends JavadocTester {
"""
<h1 title="Record R" class="title">Record R&lt;T&gt;</h1>""",
"""
public record <span class="type-name-label">R&lt;T&gt;</span>""",
<span class="modifiers">public record </span><span class="element-name type-name-label">R&lt;T&gt;</span>""",
"""
<dl class="notes">
<dt>Type Parameters:</dt>
@ -226,22 +226,22 @@ public class TestRecordTypes extends JavadocTester {
"Returns a string representation of this record.",
"Method Details",
"""
<span class="member-name">toString</span>""",
<span class="element-name">toString</span>""",
"Returns a string representation of this record. The representation "
+ "contains the name of the type, followed by the name and value of "
+ "each of the record components.",
"""
<span class="member-name">hashCode</span>""",
<span class="element-name">hashCode</span>""",
"Returns a hash code value for this object. The value is derived "
+ "from the hash code of each of the record components.",
"""
<span class="member-name">equals</span>""",
<span class="element-name">equals</span>""",
"""
Indicates whether some other object is "equal to" this one. The objects are equa\
l if the other object is of the same class and if all the record components are \
equal. All components in this record are compared with '=='.""",
"""
<span class="member-name">r1</span>""",
<span class="element-name">r1</span>""",
"""
Returns the value of the <a href="#param-r1"><code>r1</code></a> record component."""
);
@ -289,22 +289,22 @@ public class TestRecordTypes extends JavadocTester {
"Returns a string representation of this record.",
"Method Details",
"""
<span class="member-name">toString</span>""",
<span class="element-name">toString</span>""",
"Returns a string representation of this record. The representation "
+ "contains the name of the type, followed by the name and value of "
+ "each of the record components.",
"""
<span class="member-name">hashCode</span>""",
<span class="element-name">hashCode</span>""",
"Returns a hash code value for this object. The value is derived "
+ "from the hash code of each of the record components.",
"""
<span class="member-name">equals</span>""",
<span class="element-name">equals</span>""",
"""
Indicates whether some other object is "equal to" this one. The objects are equa\
l if the other object is of the same class and if all the record components are \
equal. All components in this record are compared with '=='.""",
"""
<span class="member-name">r1</span>""",
<span class="element-name">r1</span>""",
"""
Returns the value of the <a href="#param-r1"><code>r1</code></a> record component."""
);
@ -471,26 +471,27 @@ public class TestRecordTypes extends JavadocTester {
checkOutput("p/R.html", true,
"""
<pre>public record <span class="type-name-label">R</span>("""
<div class="type-signature"><span class="modifiers">public record </span><span c\
lass="element-name type-name-label">R</span>("""
+ rcAnno
+ """
int&nbsp;i)
extends java.lang.Record</pre>""",
<span class="extends-implements">extends java.lang.Record</span></div>""",
"<div class=\"member-signature\">"
+ fAnno
+ """
<span class="modifiers">private final</span>&nbsp;<span class="return-type">int<\
/span>&nbsp;<span class="member-name">i</span></div>""",
/span>&nbsp;<span class="element-name">i</span></div>""",
"""
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span c\
lass="member-name">R</span>&#8203;<span class="parameters">("""
lass="element-name">R</span>&#8203;<span class="parameters">("""
+ pAnno
+ "int&nbsp;i)</span></div>",
"<div class=\"member-signature\">"
+ mAnno
+ """
<span class="modifiers">public</span>&nbsp;<span class="return-type">int</span>&\
nbsp;<span class="member-name">i</span>()</div>""");
nbsp;<span class="element-name">i</span>()</div>""");
}
}

View File

@ -59,7 +59,9 @@ public class TestSealedTypes extends JavadocTester {
checkExit(Exit.OK);
checkOutput("p/A.html", true,
"public sealed class <span class=\"type-name-label\">A</span>");
"""
<div class="type-signature"><span class="modifiers">public sealed class </span><\
span class="element-name type-name-label">A</span>""");
}
@Test
@ -75,7 +77,9 @@ public class TestSealedTypes extends JavadocTester {
checkExit(Exit.OK);
checkOutput("p/A.html", true,
"public sealed interface <span class=\"type-name-label\">A</span>");
"""
<div class="type-signature"><span class="modifiers">public sealed interface </sp\
an><span class="element-name type-name-label">A</span>""");
}
@Test
@ -92,10 +96,14 @@ public class TestSealedTypes extends JavadocTester {
checkExit(Exit.OK);
checkOutput("p/A.html", true,
"public sealed class <span class=\"type-name-label\">A</span>");
"""
<div class="type-signature"><span class="modifiers">public sealed class </span><\
span class="element-name type-name-label">A</span>""");
checkOutput("p/B.html", true,
"public non-sealed class <span class=\"type-name-label\">B</span>");
"""
<div class="type-signature"><span class="modifiers">public non-sealed class </span><\
span class="element-name type-name-label">B</span>""");
}
@Test
@ -112,10 +120,14 @@ public class TestSealedTypes extends JavadocTester {
checkExit(Exit.OK);
checkOutput("p/A.html", true,
"public sealed interface <span class=\"type-name-label\">A</span>");
"""
<div class="type-signature"><span class="modifiers">public sealed interface </span><\
span class="element-name type-name-label">A</span>""");
checkOutput("p/B.html", true,
"public non-sealed interface <span class=\"type-name-label\">B</span>");
"""
<div class="type-signature"><span class="modifiers">public non-sealed interface </span><\
span class="element-name type-name-label">B</span>""");
}
@Test
@ -132,10 +144,14 @@ public class TestSealedTypes extends JavadocTester {
checkExit(Exit.OK);
checkOutput("p/A.html", true,
"public sealed class <span class=\"type-name-label\">A</span>");
"""
<div class="type-signature"><span class="modifiers">public sealed class </span><\
span class="element-name type-name-label">A</span>""");
checkOutput("p/B.html", true,
"public abstract sealed class <span class=\"type-name-label\">B</span>");
"""
<div class="type-signature"><span class="modifiers">public abstract sealed class\
</span><span class="element-name type-name-label">B</span>""");
}
@Test
@ -152,10 +168,14 @@ public class TestSealedTypes extends JavadocTester {
checkExit(Exit.OK);
checkOutput("p/A.html", true,
"public sealed interface <span class=\"type-name-label\">A</span>");
"""
<div class="type-signature"><span class="modifiers">public sealed interface </sp\
an><span class="element-name type-name-label">A</span>""");
checkOutput("p/B.html", true,
"public sealed interface <span class=\"type-name-label\">B</span>");
"""
<div class="type-signature"><span class="modifiers">public sealed interface </sp\
an><span class="element-name type-name-label">B</span>""");
}
@Test
@ -173,9 +193,11 @@ public class TestSealedTypes extends JavadocTester {
checkExit(Exit.OK);
checkOutput("p/A.html", true,
"<pre>public sealed class <span class=\"type-name-label\">A</span>\n"
+ "extends java.lang.Object\n"
+ "permits <a href=\"B.html\" title=\"class in p\">B</a></pre>");
"""
<div class="type-signature"><span class="modifiers">public sealed class </span><\
span class="element-name type-name-label">A</span>
<span class="extends-implements">extends java.lang.Object</span>
<span class="permits">permits <a href="B.html" title="class in p">B</a></span></div>""");
}
@Test
@ -195,11 +217,13 @@ public class TestSealedTypes extends JavadocTester {
checkExit(Exit.OK);
checkOutput("p/A.html", true,
"<pre>public sealed class <span class=\"type-name-label\">A</span>\n"
+ "extends java.lang.Object\n"
+ "permits <a href=\"B.html\" title=\"class in p\">B</a>, "
+ "<a href=\"C.html\" title=\"class in p\">C</a>, "
+ "<a href=\"D.html\" title=\"class in p\">D</a></pre>");
"""
<div class="type-signature"><span class="modifiers">public sealed class </span><\
span class="element-name type-name-label">A</span>
<span class="extends-implements">extends java.lang.Object</span>
<span class="permits">permits <a href="B.html" title="class in p">B</a>, <a href\
="C.html" title="class in p">C</a>, <a href="D.html" title="class in p">D</a></s\
pan></div>""");
}
@Test
@ -219,11 +243,13 @@ public class TestSealedTypes extends JavadocTester {
checkExit(Exit.OK);
checkOutput("p/A.html", true,
"<pre>public sealed class <span class=\"type-name-label\">A</span>\n"
+ "extends java.lang.Object\n"
+ "permits <a href=\"B.html\" title=\"class in p\">B</a>, "
+ "<a href=\"C.html\" title=\"class in p\">C</a> "
+ "<span class=\"permits-note\">(not exhaustive)</span></pre>");
"""
<div class="type-signature"><span class="modifiers">public sealed class </span><\
span class="element-name type-name-label">A</span>
<span class="extends-implements">extends java.lang.Object</span>
<span class="permits">permits <a href="B.html" title="class in p">B</a>, <a href\
="C.html" title="class in p">C</a> <span class="permits-note">(not exhaustive)</\
span></span></div>""");
}
// @Test // javac incorrectly rejects the source
@ -244,10 +270,13 @@ public class TestSealedTypes extends JavadocTester {
checkExit(Exit.OK);
checkOutput("p/A.html", true,
"<pre>public sealed class <span class=\"type-name-label\">A</span>\n"
+ "extends java.lang.Object\n"
+ "permits <a href=\"B.html\" title=\"class in p\">B</a>, "
+ "<a href=\"C.html\" title=\"class in p\">C</a>, p.D</pre>");
"""
<div class="type-signature"><span class="modifiers">public sealed class </span><\
span class="element-name type-name-label">A</span>
<span class="extends-implements">extends java.lang.Object</span>
<span class="permits">permits <a href="A.B.html" title="class in p">A.B</a>, <a \
href="A.C.html" title="class in p">A.C</a>, <a href="A.D.html" title="class in p\
">A.D</a></span></div>""");
}
@Test
@ -269,11 +298,13 @@ public class TestSealedTypes extends JavadocTester {
checkExit(Exit.OK);
checkOutput("p/A.html", true,
"<pre>public sealed class <span class=\"type-name-label\">A</span>\n"
+ "extends java.lang.Object\n"
+ "permits <a href=\"B.html\" title=\"class in p\">B</a>, "
+ "<a href=\"C.html\" title=\"class in p\">C</a> "
+ "<span class=\"permits-note\">(not exhaustive)</span></pre>");
"""
<div class="type-signature"><span class="modifiers">public sealed class </span><span\
class="element-name type-name-label">A</span>
<span class="extends-implements">extends java.lang.Object</span>
<span class="permits">permits <a href="B.html" title="class in p">B</a>, <a href="C.\
html" title="class in p">C</a> <span class="permits-note">(not exhaustive)</span></s\
pan></div>""");
}
@Test
@ -294,11 +325,13 @@ public class TestSealedTypes extends JavadocTester {
checkExit(Exit.OK);
checkOutput("p/A.html", true,
"<pre>public sealed class <span class=\"type-name-label\">A</span>\n"
+ "extends java.lang.Object\n"
+ "permits <a href=\"B.html\" title=\"class in p\">B</a>, "
+ "<a href=\"C.html\" title=\"class in p\">C</a>, "
+ "<a href=\"D.html\" title=\"class in p\">D</a></pre>");
"""
<div class="type-signature"><span class="modifiers">public sealed class </span><\
span class="element-name type-name-label">A</span>
<span class="extends-implements">extends java.lang.Object</span>
<span class="permits">permits <a href="B.html" title="class in p">B</a>, <a href\
="C.html" title="class in p">C</a>, <a href="D.html" title="class in p">D</a></s\
pan></div>""");
}
@Test
@ -319,10 +352,12 @@ public class TestSealedTypes extends JavadocTester {
checkExit(Exit.OK);
checkOutput("p/A.html", true,
"<pre>public sealed class <span class=\"type-name-label\">A</span>\n"
+ "extends java.lang.Object\n"
+ "permits <a href=\"A.B.html\" title=\"class in p\">A.B</a>, "
+ "<a href=\"A.C.html\" title=\"class in p\">A.C</a>, "
+ "<a href=\"A.D.html\" title=\"class in p\">A.D</a></pre>");
"""
<div class="type-signature"><span class="modifiers">public sealed class </span><\
span class="element-name type-name-label">A</span>
<span class="extends-implements">extends java.lang.Object</span>
<span class="permits">permits <a href="A.B.html" title="class in p">A.B</a>, <a \
href="A.C.html" title="class in p">A.C</a>, <a href="A.D.html" title="class in p\
">A.D</a></span></div>""");
}
}

View File

@ -76,7 +76,7 @@ public class TestSerializedFormWithClassFile extends JavadocTester {
checkOutput("serialized-form.html", true,
"""
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span c\
lass="return-type">void</span>&nbsp;<span class="member-name">readObject</span>&\
lass="return-type">void</span>&nbsp;<span class="element-name">readObject</span>&\
#8203;<span class="parameters">(java.io.ObjectInputStream&nbsp;arg0)</span>
throws <span class="exceptions">java.lang.ClassNotFoundException,
java.io.IOException</span></div>

View File

@ -352,7 +352,7 @@ public class TestStylesheet extends JavadocTester {
"method-summary",
// the following provide the ability to optionally override components of the
// memberSignature structure
"member-name",
"name",
"modifiers",
"packages",
"return-type",

View File

@ -93,7 +93,7 @@ public class TestSummaryTag extends JavadocTester {
<section class="detail" id="m3()">
<h3>m3</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span c\
lass="return-type">void</span>&nbsp;<span class="member-name">m3</span>()</div>
lass="return-type">void</span>&nbsp;<span class="element-name">m3</span>()</div>
<div class="block">First sentence some text maybe second sentence.</div>
</section>
"""

View File

@ -76,7 +76,7 @@
"""
<div class="member-signature"><span class="type-parameters">&lt;T extends java\
.lang.Throwable&gt;</span>&nbsp;<span class="return-type">void</span>&nbsp;<sp\
an class="member-name">m</span>()
an class="element-name">m</span>()
throws <span class="exceptions">T,
java.lang.Exception</span></div>
""",

View File

@ -63,7 +63,7 @@ public class TestTypeAnnotations extends JavadocTester {
a> java.lang.CharSequence, <a href="ClassExtA.html" title="annotation in typeann\
os">@ClassExtA</a> <a href="ParameterizedInterface.html" title="interface in typ\
eannos">ParameterizedInterface</a>&lt;<a href="ClassExtB.html" title="annotation\
in typeannos">@ClassExtB</a> java.lang.String&gt;</pre>""");
in typeannos">@ClassExtB</a> java.lang.String&gt;</span></div>""");
checkOutput("typeannos/MyInterface.html", true,
"""
@ -71,48 +71,49 @@ public class TestTypeAnnotations extends JavadocTester {
<a href="ParameterizedInterface.html" title="interface in typeannos">Parameteriz\
edInterface</a>&lt;<a href="ClassExtA.html" title="annotation in typeannos">@Cla\
ssExtA</a> java.lang.String&gt;, <a href="ClassExtB.html" title="annotation in t\
ypeannos">@ClassExtB</a> java.lang.CharSequence</pre>""");
ypeannos">@ClassExtB</a> java.lang.CharSequence</span></div>""");
// Test for type annotations on Class Parameters (ClassParameters.java).
checkOutput("typeannos/ExtendsBound.html", true,
"""
class <span class="type-name-label">ExtendsBound&lt;K extends <a href="ClassPara\
mA.html" title="annotation in typeannos">@ClassParamA</a> java.lang.String&gt;</\
span>""");
class </span><span class="element-name type-name-label">ExtendsBound&lt;K extend\
s <a href="ClassParamA.html" title="annotation in typeannos">@ClassParamA</a> ja\
va.lang.String&gt;</span>""");
checkOutput("typeannos/ExtendsGeneric.html", true,
"""
<pre>class <span class="type-name-label">ExtendsGeneric&lt;K extends <a href="Cl\
assParamA.html" title="annotation in typeannos">@ClassParamA</a> <a href="Unanno\
tated.html" title="class in typeannos">Unannotated</a>&lt;<a href="ClassParamB.h\
tml" title="annotation in typeannos">@ClassParamB</a> java.lang.String&gt;&gt;</\
span>""");
<div class="type-signature"><span class="modifiers">class </span><span class="el\
ement-name type-name-label">ExtendsGeneric&lt;K extends <a href="ClassParamA.htm\
l" title="annotation in typeannos">@ClassParamA</a> <a href="Unannotated.html" t\
itle="class in typeannos">Unannotated</a>&lt;<a href="ClassParamB.html" title="a\
nnotation in typeannos">@ClassParamB</a> java.lang.String&gt;&gt;</span>""");
checkOutput("typeannos/TwoBounds.html", true,
"""
<pre>class <span class="type-name-label">TwoBounds&lt;K extends <a href="ClassPa\
ramA.html" title="annotation in typeannos">@ClassParamA</a> java.lang.String,&#8\
203;V extends <a href="ClassParamB.html" title="annotation in typeannos">@ClassP\
aramB</a> java.lang.String&gt;</span>""");
<div class="type-signature"><span class="modifiers">class </span><span class="el\
ement-name type-name-label">TwoBounds&lt;K extends <a href="ClassParamA.html" ti\
tle="annotation in typeannos">@ClassParamA</a> java.lang.String,&#8203;V extends\
<a href="ClassParamB.html" title="annotation in typeannos">@ClassParamB</a> jav\
a.lang.String&gt;</span>""");
checkOutput("typeannos/Complex1.html", true,
"""
class <span class="type-name-label">Complex1&lt;K extends <a href="ClassParamA.h\
tml" title="annotation in typeannos">@ClassParamA</a> java.lang.String &amp; jav\
a.lang.Runnable&gt;</span>""");
class </span><span class="element-name type-name-label">Complex1&lt;K extends <a\
href="ClassParamA.html" title="annotation in typeannos">@ClassParamA</a> java.l\
ang.String &amp; java.lang.Runnable&gt;</span>""");
checkOutput("typeannos/Complex2.html", true,
"""
class <span class="type-name-label">Complex2&lt;K extends java.lang.String &amp;\
<a href="ClassParamB.html" title="annotation in typeannos">@ClassParamB</a> jav\
a.lang.Runnable&gt;</span>""");
class </span><span class="element-name type-name-label">Complex2&lt;K extends ja\
va.lang.String &amp; <a href="ClassParamB.html" title="annotation in typeannos">\
@ClassParamB</a> java.lang.Runnable&gt;</span>""");
checkOutput("typeannos/ComplexBoth.html", true,
"""
class <span class="type-name-label">ComplexBoth&lt;K extends <a href="ClassParam\
A.html" title="annotation in typeannos">@ClassParamA</a> java.lang.String &amp; \
<a href="ClassParamA.html" title="annotation in typeannos">@ClassParamA</a> java\
.lang.Runnable&gt;</span>""");
class </span><span class="element-name type-name-label">ComplexBoth&lt;K extends\
<a href="ClassParamA.html" title="annotation in typeannos">@ClassParamA</a> jav\
a.lang.String &amp; <a href="ClassParamA.html" title="annotation in typeannos">@\
ClassParamA</a> java.lang.Runnable&gt;</span>""");
// Test for type annotations on fields (Fields.java).
checkOutput("typeannos/DefaultScope.html", true,
@ -121,18 +122,18 @@ public class TestTypeAnnotations extends JavadocTester {
tml" title="class in typeannos">Parameterized</a>&lt;<a href="FldA.html" title="\
annotation in typeannos">@FldA</a> java.lang.String,&#8203;<a href="FldB.html" t\
itle="annotation in typeannos">@FldB</a> java.lang.String&gt;</span>&nbsp;<span \
class="member-name">bothTypeArgs</span></div>""",
class="element-name">bothTypeArgs</span></div>""",
"""
<div class="member-signature"><span class="return-type"><a href="FldA.html" titl\
e="annotation in typeannos">@FldA</a> java.lang.String <a href="FldB.html" title\
="annotation in typeannos">@FldB</a> []</span>&nbsp;<span class="member-name">ar\
ray1Deep</span></div>""",
="annotation in typeannos">@FldB</a> []</span>&nbsp;<span class="element-name">a\
rray1Deep</span></div>""",
"""
<div class="member-signature"><span class="return-type">java.lang.String <a href\
="FldB.html" title="annotation in typeannos">@FldB</a> [][]</span>&nbsp;<span cl\
ass="member-name">array2SecondOld</span></div>""",
ass="element-name">array2SecondOld</span></div>""",
// When JDK-8068737, we should change the order
"""
@ -141,7 +142,7 @@ public class TestTypeAnnotations extends JavadocTester {
="annotation in typeannos">@FldC</a> <a href="FldB.html" title="annotation in ty\
peannos">@FldB</a> [] <a href="FldC.html" title="annotation in typeannos">@FldC<\
/a> <a href="FldA.html" title="annotation in typeannos">@FldA</a> []</span>&nbsp\
;<span class="member-name">array2Deep</span></div>""");
;<span class="element-name">array2Deep</span></div>""");
checkOutput("typeannos/ModifiedScoped.html", true,
"""
@ -152,14 +153,14 @@ public class TestTypeAnnotations extends JavadocTester {
;<a href="FldA.html" title="annotation in typeannos">@FldA</a> java.lang.String,\
&#8203;<a href="FldB.html" title="annotation in typeannos">@FldB</a> java.lang.S\
tring&gt;,&#8203;<a href="FldB.html" title="annotation in typeannos">@FldB</a> j\
ava.lang.String&gt;</span>&nbsp;<span class="member-name">nestedParameterized</s\
pan></div>""",
ava.lang.String&gt;</span>&nbsp;<span class="element-name">nestedParameterized</\
span></div>""",
"""
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<\
span class="return-type"><a href="FldA.html" title="annotation in typeannos">@Fl\
dA</a> java.lang.String[][]</span>&nbsp;<span class="member-name">array2</span><\
/div>""");
dA</a> java.lang.String[][]</span>&nbsp;<span class="element-name">array2</span>\
</div>""");
// Test for type annotations on method return types (MethodReturnType.java).
checkOutput("typeannos/MtdDefaultScope.html", true,
@ -167,20 +168,20 @@ public class TestTypeAnnotations extends JavadocTester {
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span c\
lass="type-parameters">&lt;T&gt;</span>&nbsp;<span class="return-type"><a href="\
MRtnA.html" title="annotation in typeannos">@MRtnA</a> java.lang.String</span>&n\
bsp;<span class="member-name">method</span>()</div>""",
bsp;<span class="element-name">method</span>()</div>""",
// When JDK-8068737 is fixed, we should change the order
"""
<div class="member-signature"><span class="return-type"><a href="MRtnA.html" tit\
le="annotation in typeannos">@MRtnA</a> java.lang.String <a href="MRtnB.html" ti\
tle="annotation in typeannos">@MRtnB</a> [] <a href="MRtnA.html" title="annotati\
on in typeannos">@MRtnA</a> []</span>&nbsp;<span class="member-name">array2Deep<\
/span>()</div>""",
on in typeannos">@MRtnA</a> []</span>&nbsp;<span class="element-name">array2Deep\
</span>()</div>""",
"""
<div class="member-signature"><span class="return-type"><a href="MRtnA.html" tit\
le="annotation in typeannos">@MRtnA</a> java.lang.String[][]</span>&nbsp;<span c\
lass="member-name">array2</span>()</div>""");
lass="element-name">array2</span>()</div>""");
checkOutput("typeannos/MtdModifiedScoped.html", true,
"""
@ -191,16 +192,16 @@ public class TestTypeAnnotations extends JavadocTester {
terized</a>&lt;<a href="MRtnA.html" title="annotation in typeannos">@MRtnA</a> j\
ava.lang.String,&#8203;<a href="MRtnB.html" title="annotation in typeannos">@MRt\
nB</a> java.lang.String&gt;,&#8203;<a href="MRtnB.html" title="annotation in typ\
eannos">@MRtnB</a> java.lang.String&gt;</span>&nbsp;<span class="member-name">ne\
stedMtdParameterized</span>()</div>""");
eannos">@MRtnB</a> java.lang.String&gt;</span>&nbsp;<span class="element-name">n\
estedMtdParameterized</span>()</div>""");
// Test for type annotations on method type parameters (MethodTypeParameters.java).
checkOutput("typeannos/UnscopedUnmodified.html", true,
"""
<div class="member-signature"><span class="type-parameters">&lt;K extends <a hre\
f="MTyParamA.html" title="annotation in typeannos">@MTyParamA</a> java.lang.Stri\
ng&gt;</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="membe\
r-name">methodExtends</span>()</div>""",
ng&gt;</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="eleme\
nt-name">methodExtends</span>()</div>""",
"""
<div class="member-signature"><span class="type-parameters-long">&lt;K extends <\
@ -208,14 +209,14 @@ public class TestTypeAnnotations extends JavadocTester {
MtdTyParameterized.html" title="class in typeannos">MtdTyParameterized</a>&lt;<a\
href="MTyParamB.html" title="annotation in typeannos">@MTyParamB</a> java.lang.\
String&gt;&gt;</span>
<span class="return-type">void</span>&nbsp;<span class="member-name">nestedExtends</span>()</div>""");
<span class="return-type">void</span>&nbsp;<span class="element-name">nestedExtends</span>()</div>""");
checkOutput("typeannos/PublicModifiedMethods.html", true,
"""
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<\
span class="type-parameters">&lt;K extends <a href="MTyParamA.html" title="annot\
ation in typeannos">@MTyParamA</a> java.lang.String&gt;</span>
<span class="return-type">void</span>&nbsp;<span class="member-name">methodExtends</span>()</div>""",
<span class="return-type">void</span>&nbsp;<span class="element-name">methodExtends</span>()</div>""",
"""
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<\
@ -225,45 +226,45 @@ public class TestTypeAnnotations extends JavadocTester {
> <a href="MtdTyParameterized.html" title="class in typeannos">MtdTyParameterize\
d</a>&lt;<a href="MTyParamB.html" title="annotation in typeannos">@MTyParamB</a>\
java.lang.String&gt;&gt;</span>
<span class="return-type">void</span>&nbsp;<span class="member-name">dual</span>()</div>""");
<span class="return-type">void</span>&nbsp;<span class="element-name">dual</span>()</div>""");
// Test for type annotations on parameters (Parameters.java).
checkOutput("typeannos/Parameters.html", true,
"""
<div class="member-signature"><span class="return-type">void</span>&nbsp;<span c\
lass="member-name">unannotated</span>&#8203;<span class="parameters">(<a href="P\
araParameterized.html" title="class in typeannos">ParaParameterized</a>&lt;java.\
lang.String,&#8203;java.lang.String&gt;&nbsp;a)</span></div>""",
lass="element-name">unannotated</span>&#8203;<span class="parameters">(<a href="\
ParaParameterized.html" title="class in typeannos">ParaParameterized</a>&lt;java\
.lang.String,&#8203;java.lang.String&gt;&nbsp;a)</span></div>""",
"""
<div class="member-signature"><span class="return-type">void</span>&nbsp;<span c\
lass="member-name">nestedParaParameterized</span>&#8203;<span class="parameters\
">(<a href="ParaParameterized.html" title="class in typeannos">ParaParameterized<\
/a>&lt;<a href="ParamA.html" title="annotation in typeannos">@ParamA</a> <a href\
="ParaParameterized.html" title="class in typeannos">ParaParameterized</a>&lt;<a\
href="ParamA.html" title="annotation in typeannos">@ParamA</a> java.lang.String\
,&#8203;<a href="ParamB.html" title="annotation in typeannos">@ParamB</a> java.l\
ang.String&gt;,&#8203;<a href="ParamB.html" title="annotation in typeannos">@Par\
amB</a> java.lang.String&gt;&nbsp;a)</span></div>""",
lass="element-name">nestedParaParameterized</span>&#8203;<span class="parameters\
">(<a href="ParaParameterized.html" title="class in typeannos">ParaParameterized\
</a>&lt;<a href="ParamA.html" title="annotation in typeannos">@ParamA</a> <a hre\
f="ParaParameterized.html" title="class in typeannos">ParaParameterized</a>&lt;<\
a href="ParamA.html" title="annotation in typeannos">@ParamA</a> java.lang.Strin\
g,&#8203;<a href="ParamB.html" title="annotation in typeannos">@ParamB</a> java.\
lang.String&gt;,&#8203;<a href="ParamB.html" title="annotation in typeannos">@Pa\
ramB</a> java.lang.String&gt;&nbsp;a)</span></div>""",
// When JDK-8068737 is fixed, we should change the order
"""
<div class="member-signature"><span class="return-type">void</span>&nbsp;<span c\
lass="member-name">array2Deep</span>&#8203;<span class="parameters">(<a href="Pa\
ramA.html" title="annotation in typeannos">@ParamA</a> java.lang.String <a href=\
"ParamB.html" title="annotation in typeannos">@ParamB</a> [] <a href="ParamA.htm\
l" title="annotation in typeannos">@ParamA</a> []&nbsp;a)</span></div>""");
lass="element-name">array2Deep</span>&#8203;<span class="parameters">(<a href="P\
aramA.html" title="annotation in typeannos">@ParamA</a> java.lang.String <a href\
="ParamB.html" title="annotation in typeannos">@ParamB</a> [] <a href="ParamA.ht\
ml" title="annotation in typeannos">@ParamA</a> []&nbsp;a)</span></div>""");
// Test for type annotations on throws (Throws.java).
checkOutput("typeannos/ThrDefaultUnmodified.html", true,
"""
<div class="member-signature"><span class="return-type">void</span>&nbsp;<span class="member-name">oneException</span>()
<div class="member-signature"><span class="return-type">void</span>&nbsp;<span class="element-name">oneException</span>()
throws <span class="exceptions"><a href="ThrA.html" title="annotation\
in typeannos">@ThrA</a> java.lang.Exception</span></div>""",
"""
<div class="member-signature"><span class="return-type">void</span>&nbsp;<span c\
lass="member-name">twoExceptions</span>()
lass="element-name">twoExceptions</span>()
throws <span class="exceptions"><a href="ThrA.html" title="annotatio\
n in typeannos">@ThrA</a> java.lang.RuntimeException,
<a href="ThrA.html" title="annotation in typeannos">@ThrA</a> java.lang.Exception</span></div>""");
@ -271,28 +272,28 @@ public class TestTypeAnnotations extends JavadocTester {
checkOutput("typeannos/ThrPublicModified.html", true,
"""
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<\
span class="return-type">void</span>&nbsp;<span class="member-name">oneException\
</span>&#8203;<span class="parameters">(java.lang.String&nbsp;a)</span>
span class="return-type">void</span>&nbsp;<span class="element-name">oneException</span>\
&#8203;<span class="parameters">(java.lang.String&nbsp;a)</span>
throws <span class="exceptions"><a href="ThrA.html" titl\
e="annotation in typeannos">@ThrA</a> java.lang.Exception</span></div>""",
"""
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<\
span class="return-type">void</span>&nbsp;<span class="member-name">twoException\
s</span>&#8203;<span class="parameters">(java.lang.String&nbsp;a)</span>
span class="return-type">void</span>&nbsp;<span class="element-name">twoExceptions</span\
>&#8203;<span class="parameters">(java.lang.String&nbsp;a)</span>
throws <span class="exceptions"><a href="ThrA.html" tit\
le="annotation in typeannos">@ThrA</a> java.lang.RuntimeException,
<a href="ThrA.html" title="annotation in typeannos">@ThrA</a> java.lang.Exception</span></div>""");
checkOutput("typeannos/ThrWithValue.html", true,
"""
<div class="member-signature"><span class="return-type">void</span>&nbsp;<span class="member-name">oneException</span>()
<div class="member-signature"><span class="return-type">void</span>&nbsp;<span class="element-name">oneException</span>()
throws <span class="exceptions"><a href="ThrB.html" title="annotation\
in typeannos">@ThrB</a>("m") java.lang.Exception</span></div>""",
"""
<div class="member-signature"><span class="return-type">void</span>&nbsp;<span c\
lass="member-name">twoExceptions</span>()
lass="element-name">twoExceptions</span>()
throws <span class="exceptions"><a href="ThrB.html" title="annotatio\
n in typeannos">@ThrB</a>("m") java.lang.RuntimeException,
<a href="ThrA.html" title="annotation in typeannos">@ThrA</a> java.lang.Exception</span></div>""");
@ -304,104 +305,104 @@ public class TestTypeAnnotations extends JavadocTester {
<a href="TyParaA.html" title="annotation in typeannos">@TyParaA</a> V extends <a\
href="TyParaA.html" title="annotation in typeannos">@TyParaA</a> java.lang.Stri\
ng&gt;</span>
<span class="return-type">void</span>&nbsp;<span class="member-name">secondAnnotated</span>()</div>"""
<span class="return-type">void</span>&nbsp;<span class="element-name">secondAnnotated</span>()</div>"""
);
// Test for type annotations on wildcard type (Wildcards.java).
checkOutput("typeannos/BoundTest.html", true,
"""
<div class="member-signature"><span class="return-type">void</span>&nbsp;<span c\
lass="member-name">wcExtends</span>&#8203;<span class="parameters">(<a href="MyL\
ist.html" title="class in typeannos">MyList</a>&lt;? extends <a href="WldA.html"\
title="annotation in typeannos">@WldA</a> java.lang.String&gt;&nbsp;l)</span></\
div>""",
lass="element-name">wcExtends</span>&#8203;<span class="parameters">(<a href="My\
List.html" title="class in typeannos">MyList</a>&lt;? extends <a href="WldA.html\
" title="annotation in typeannos">@WldA</a> java.lang.String&gt;&nbsp;l)</span><\
/div>""",
"""
<div class="member-signature"><span class="return-type"><a href="MyList.html" ti\
tle="class in typeannos">MyList</a>&lt;? super <a href="WldA.html" title="annota\
tion in typeannos">@WldA</a> java.lang.String&gt;</span>&nbsp;<span class="membe\
r-name">returnWcSuper</span>()</div>""");
tion in typeannos">@WldA</a> java.lang.String&gt;</span>&nbsp;<span class="element-name"\
>returnWcSuper</span>()</div>""");
checkOutput("typeannos/BoundWithValue.html", true,
"""
<div class="member-signature"><span class="return-type">void</span>&nbsp;<span c\
lass="member-name">wcSuper</span>&#8203;<span class="parameters">(<a href="MyLis\
t.html" title="class in typeannos">MyList</a>&lt;? super <a href="WldB.html" tit\
le="annotation in typeannos">@WldB</a>("m") java.lang.String&gt;&nbsp;l)</span><\
/div>""",
lass="element-name">wcSuper</span>&#8203;<span class="parameters">(<a href="MyLi\
st.html" title="class in typeannos">MyList</a>&lt;? super <a href="WldB.html" ti\
tle="annotation in typeannos">@WldB</a>("m") java.lang.String&gt;&nbsp;l)</span>\
</div>""",
"""
<div class="member-signature"><span class="return-type"><a href="MyList.html" ti\
tle="class in typeannos">MyList</a>&lt;? extends <a href="WldB.html" title="anno\
tation in typeannos">@WldB</a>("m") java.lang.String&gt;</span>&nbsp;<span class\
="member-name">returnWcExtends</span>()</div>""");
="element-name">returnWcExtends</span>()</div>""");
checkOutput("typeannos/SelfTest.html", true,
"""
<div class="member-signature"><span class="return-type"><a href="MyList.html" ti\
tle="class in typeannos">MyList</a>&lt;<a href="WldA.html" title="annotation in \
typeannos">@WldA</a> ?&gt;</span>&nbsp;<span class="member-name">returnWcExtends\
</span>()</div>""",
typeannos">@WldA</a> ?&gt;</span>&nbsp;<span class="element-name">returnWcExtends</span>\
()</div>""",
"""
<div class="member-signature"><span class="return-type"><a href="MyList.html" ti\
tle="class in typeannos">MyList</a>&lt;<a href="WldA.html" title="annotation in \
typeannos">@WldA</a> ? extends <a href="WldA.html" title="annotation in typeanno\
s">@WldA</a> <a href="MyList.html" title="class in typeannos">MyList</a>&lt;<a h\
ref="WldB.html" title="annotation in typeannos">@WldB</a>("m") ?&gt;&gt;</span>&\
nbsp;<span class="member-name">complex</span>()</div>""");
nbsp;<span class="element-name">complex</span>()</div>""");
checkOutput("typeannos/SelfWithValue.html", true,
"""
<div class="member-signature"><span class="return-type"><a href="MyList.html" ti\
tle="class in typeannos">MyList</a>&lt;<a href="WldB.html" title="annotation in \
typeannos">@WldB</a>("m") ?&gt;</span>&nbsp;<span class="member-name">returnWcEx\
tends</span>()</div>""",
typeannos">@WldB</a>("m") ?&gt;</span>&nbsp;<span class="element-name">returnWcExtends</\
span>()</div>""",
"""
<div class="member-signature"><span class="return-type"><a href="MyList.html" ti\
tle="class in typeannos">MyList</a>&lt;<a href="WldB.html" title="annotation in \
typeannos">@WldB</a>("m") ? extends <a href="MyList.html" title="class in typean\
nos">MyList</a>&lt;<a href="WldB.html" title="annotation in typeannos">@WldB</a>\
("m") ? super java.lang.String&gt;&gt;</span>&nbsp;<span class="member-name">com\
plex</span>()</div>""");
("m") ? super java.lang.String&gt;&gt;</span>&nbsp;<span class="element-name">complex</s\
pan>()</div>""");
// Test for receiver annotations (Receivers.java).
checkOutput("typeannos/DefaultUnmodified.html", true,
"""
<div class="member-signature"><span class="return-type">void</span>&nbsp;<span c\
lass="member-name">withException</span>&#8203;<span class="parameters">(<a href=\
"RcvrA.html" title="annotation in typeannos">@RcvrA</a>&nbsp;DefaultUnmodified&n\
bsp;this)</span>
lass="element-name">withException</span>&#8203;<span class="parameters">(<a href\
="RcvrA.html" title="annotation in typeannos">@RcvrA</a>&nbsp;DefaultUnmodified&\
nbsp;this)</span>
throws <span class="exceptions">java.lang.Exception</span></div>""",
"""
<div class="member-signature"><span class="return-type">java.lang.String</span>&\
nbsp;<span class="member-name">nonVoid</span>&#8203;<span class="parameters">(<a\
href="RcvrA.html" title="annotation in typeannos">@RcvrA</a> <a href="RcvrB.htm\
l" title="annotation in typeannos">@RcvrB</a>("m")&nbsp;DefaultUnmodified&nbsp;t\
his)</span></div>""",
nbsp;<span class="element-name">nonVoid</span>&#8203;<span class="parameters">(<a href="\
RcvrA.html" title="annotation in typeannos">@RcvrA</a> <a href="RcvrB.html" titl\
e="annotation in typeannos">@RcvrB</a>("m")&nbsp;DefaultUnmodified&nbsp;this)</s\
pan></div>""",
"""
<div class="member-signature"><span class="type-parameters">&lt;T extends java.l\
ang.Runnable&gt;</span>&nbsp;<span class="return-type">void</span>&nbsp;<span cl\
ass="member-name">accept</span>&#8203;<span class="parameters">(<a href="RcvrA.h\
tml" title="annotation in typeannos">@RcvrA</a>&nbsp;DefaultUnmodified&nbsp;this\
,
ass="element-name">accept</span>&#8203;<span class="parameters">(<a href="RcvrA.\
html" title="annotation in typeannos">@RcvrA</a>&nbsp;DefaultUnmodified&nbsp;thi\
s,
T&nbsp;r)</span>
throws <span class="exceptions">java.lang.Exception</span></div>""");
checkOutput("typeannos/PublicModified.html", true,
"""
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<\
span class="return-type">java.lang.String</span>&nbsp;<span class="member-name">\
nonVoid</span>&#8203;<span class="parameters">(<a href="RcvrA.html" title="annot\
ation in typeannos">@RcvrA</a>&nbsp;PublicModified&nbsp;this)</span></div>""",
span class="return-type">java.lang.String</span>&nbsp;<span class="element-name">nonVoid\
</span>&#8203;<span class="parameters">(<a href="RcvrA.html" title="annotation i\
n typeannos">@RcvrA</a>&nbsp;PublicModified&nbsp;this)</span></div>""",
"""
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<\
span class="type-parameters">&lt;T extends java.lang.Runnable&gt;</span>&nbsp;<s\
pan class="return-type">void</span>&nbsp;<span class="member-name">accept</span>\
&#8203;<span class="parameters">(<a href="RcvrA.html" title="annotation in typea\
pan class="return-type">void</span>&nbsp;<span class="element-name">accept</span>&#8203;\
<span class="parameters">(<a href="RcvrA.html" title="annotation in typea\
nnos">@RcvrA</a>&nbsp;PublicModified&nbsp;this,
T&nbsp;r)</span>
throws <span class="exceptions">java.lang.Exception</span></div>""");
@ -410,42 +411,44 @@ public class TestTypeAnnotations extends JavadocTester {
"""
<div class="member-signature"><span class="type-parameters">&lt;T extends java.l\
ang.Runnable&gt;</span>&nbsp;<span class="return-type">void</span>&nbsp;<span cl\
ass="member-name">accept</span>&#8203;<span class="parameters">(<a href="RcvrB.h\
tml" title="annotation in typeannos">@RcvrB</a>("m")&nbsp;WithValue&nbsp;this,
ass="element-name">accept</span>&#8203;<span class="parameters">(<a href="RcvrB.\
html" title="annotation in typeannos">@RcvrB</a>("m")&nbsp;WithValue&nbsp;this,
T&nbsp;r)</span>
throws <span class="exceptions">java.lang.Exception</span></div>""");
checkOutput("typeannos/WithFinal.html", true,
"""
<div class="member-signature"><span class="return-type">java.lang.String</span>&\
nbsp;<span class="member-name">nonVoid</span>&#8203;<span class="parameters">(<a\
href="RcvrB.html" title="annotation in typeannos">@RcvrB</a>("m") <a href="With\
Final.html" title="class in typeannos">WithFinal</a>&nbsp;afield)</span></div>""");
nbsp;<span class="element-name">nonVoid</span>&#8203;<span class="parameters">(<a href="\
RcvrB.html" title="annotation in typeannos">@RcvrB</a>("m") <a href="WithFinal.h\
tml" title="class in typeannos">WithFinal</a>&nbsp;afield)</span></div>""");
checkOutput("typeannos/WithBody.html", true,
"""
<div class="member-signature"><span class="return-type">void</span>&nbsp;<span c\
lass="member-name">field</span>&#8203;<span class="parameters">(<a href="RcvrA.h\
tml" title="annotation in typeannos">@RcvrA</a>&nbsp;WithBody&nbsp;this)</span><\
/div>""");
lass="element-name">field</span>&#8203;<span class="parameters">(<a href="RcvrA.\
html" title="annotation in typeannos">@RcvrA</a>&nbsp;WithBody&nbsp;this)</span>\
</div>""");
checkOutput("typeannos/Generic2.html", true,
"""
<div class="member-signature"><span class="return-type">void</span>&nbsp;<span c\
lass="member-name">test2</span>&#8203;<span class="parameters">(<a href="RcvrA.h\
tml" title="annotation in typeannos">@RcvrA</a>&nbsp;Generic2&lt;X&gt;&nbsp;this\
)</span></div>""");
lass="element-name">test2</span>&#8203;<span class="parameters">(<a href="RcvrA.\
html" title="annotation in typeannos">@RcvrA</a>&nbsp;Generic2&lt;X&gt;&nbsp;thi\
s)</span></div>""");
// Test for repeated type annotations (RepeatedAnnotations.java).
checkOutput("typeannos/RepeatingAtClassLevel.html", true,
"""
<pre><a href="RepTypeA.html" title="annotation in typeannos">@RepTypeA</a> <a hr\
ef="RepTypeA.html" title="annotation in typeannos">@RepTypeA</a>
<div class="type-signature"><span class="annotations"><a href="RepTypeA.html" ti\
tle="annotation in typeannos">@RepTypeA</a> <a href="RepTypeA.html" title="annot\
ation in typeannos">@RepTypeA</a>
<a href="RepTypeB.html" title="annotation in typeannos">@RepTypeB</a> <a href="R\
epTypeB.html" title="annotation in typeannos">@RepTypeB</a>
class <span class="type-name-label">RepeatingAtClassLevel</span>
extends java.lang.Object</pre>""");
</span><span class="modifiers">class </span><span class="element-name type-name-\
label">RepeatingAtClassLevel</span>
<span class="extends-implements">extends java.lang.Object</span></div>""");
// @ignore 8146008
// checkOutput("typeannos/RepeatingAtClassLevel2.html", true,
@ -476,7 +479,7 @@ public class TestTypeAnnotations extends JavadocTester {
<a href="RepConstructorB.html" title="annotation in typeannos">@RepConstructorB<\
/a> <a href="RepConstructorB.html" title="annotation in typeannos">@RepConstruct\
orB</a>
</span><span class="member-name">RepeatingOnConstructor</span>()</div>""",
</span><span class="element-name">RepeatingOnConstructor</span>()</div>""",
"""
<div class="member-signature"><span class="annotations"><a href="RepConstructorA\
@ -485,7 +488,7 @@ public class TestTypeAnnotations extends JavadocTester {
<a href="RepConstructorB.html" title="annotation in typeannos">@RepConstructorB<\
/a> <a href="RepConstructorB.html" title="annotation in typeannos">@RepConstruct\
orB</a>
</span><span class="member-name">RepeatingOnConstructor</span>&#8203;<span class="parameters">(int&nbsp;i,
</span><span class="element-name">RepeatingOnConstructor</span>&#8203;<span class="parameters">(int&nbsp;i,
int&nbsp;j)</span></div>""",
"""
@ -495,17 +498,17 @@ public class TestTypeAnnotations extends JavadocTester {
<a href="RepAllContextsB.html" title="annotation in typeannos">@RepAllContextsB<\
/a> <a href="RepAllContextsB.html" title="annotation in typeannos">@RepAllContex\
tsB</a>
</span><span class="member-name">RepeatingOnConstructor</span>&#8203;<span class="parameters">(int&nbsp;i,
</span><span class="element-name">RepeatingOnConstructor</span>&#8203;<span class="parameters">(int&nbsp;i,
int&nbsp;j,
int&nbsp;k)</span></div>""",
"""
<div class="member-signature"><span class="member-name">RepeatingOnConstructor</\
span>&#8203;<span class="parameters">(<a href="RepParameterA.html" title="annota\
tion in typeannos">@RepParameterA</a> <a href="RepParameterA.html" title="annota\
tion in typeannos">@RepParameterA</a> <a href="RepParameterB.html" title="annota\
tion in typeannos">@RepParameterB</a> <a href="RepParameterB.html" title="annota\
tion in typeannos">@RepParameterB</a>
<div class="member-signature"><span class="element-name">RepeatingOnConstructor</span>&#\
8203;<span class="parameters">(<a href="RepParameterA.html" title="annotation in\
typeannos">@RepParameterA</a> <a href="RepParameterA.html" title="annotation in\
typeannos">@RepParameterA</a> <a href="RepParameterB.html" title="annotation in\
typeannos">@RepParameterB</a> <a href="RepParameterB.html" title="annotation in\
typeannos">@RepParameterB</a>
java.lang.String&nbsp;parameter,
<a href="RepParameterA.html" title="annotation in typeannos">@RepParameterA</a> \
<a href="RepParameterA.html" title="annotation in typeannos">@RepParameterA</a> \
@ -593,9 +596,13 @@ public class TestTypeAnnotations extends JavadocTester {
<div class="col-second even-row-color"><code><span class="member-name-link"><a href="#sa">sa</a></span></code></div>""",
"""
<div class="member-signature"><span class="annotations"><a href="RepFieldA.html" title="annotation in typeannos">@RepFieldA</a> <a href="RepFieldA.html" title="annotation in typeannos">@RepFieldA</a>
<a href="RepFieldB.html" title="annotation in typeannos">@RepFieldB</a> <a href="RepFieldB.html" title="annotation in typeannos">@RepFieldB</a>
</span><span class="return-type">java.lang.Integer</span>&nbsp;<span class="member-name">i1</span></div>""",
<div class="member-signature"><span class="annotations"><a href="RepFieldA.html"\
title="annotation in typeannos">@RepFieldA</a> <a href="RepFieldA.html" title="\
annotation in typeannos">@RepFieldA</a>
<a href="RepFieldB.html" title="annotation in typeannos">@RepFieldB</a> <a href=\
"RepFieldB.html" title="annotation in typeannos">@RepFieldB</a>
</span><span class="return-type">java.lang.Integer</span>&nbsp;<span class="elem\
ent-name">i1</span></div>""",
"""
<div class="member-signature"><span class="return-type"><a href="RepTypeUseA.htm\
@ -603,7 +610,7 @@ public class TestTypeAnnotations extends JavadocTester {
itle="annotation in typeannos">@RepTypeUseA</a> <a href="RepTypeUseB.html" title\
="annotation in typeannos">@RepTypeUseB</a> <a href="RepTypeUseB.html" title="an\
notation in typeannos">@RepTypeUseB</a> java.lang.Integer</span>&nbsp;<span clas\
s="member-name">i2</span></div>""",
s="element-name">i2</span></div>""",
"""
<div class="member-signature"><span class="annotations"><a href="RepFieldA.html"\
@ -615,7 +622,7 @@ public class TestTypeAnnotations extends JavadocTester {
typeannos">@RepTypeUseA</a> <a href="RepTypeUseA.html" title="annotation in typ\
eannos">@RepTypeUseA</a> <a href="RepTypeUseB.html" title="annotation in typeann\
os">@RepTypeUseB</a> <a href="RepTypeUseB.html" title="annotation in typeannos">\
@RepTypeUseB</a> java.lang.Integer</span>&nbsp;<span class="member-name">i3</spa\
@RepTypeUseB</a> java.lang.Integer</span>&nbsp;<span class="element-name">i3</spa\
n></div>""",
"""
@ -630,7 +637,7 @@ public class TestTypeAnnotations extends JavadocTester {
ation in typeannos">@RepAllContextsA</a> <a href="RepAllContextsB.html" title="a\
nnotation in typeannos">@RepAllContextsB</a> <a href="RepAllContextsB.html" titl\
e="annotation in typeannos">@RepAllContextsB</a> java.lang.Integer</span>&nbsp;<\
span class="member-name">i4</span></div>""",
span class="element-name">i4</span></div>""",
"""
<div class="member-signature"><span class="return-type">java.lang.String <a href\
@ -641,8 +648,8 @@ public class TestTypeAnnotations extends JavadocTester {
.html" title="annotation in typeannos">@RepTypeUseA</a> <a href="RepTypeUseA.htm\
l" title="annotation in typeannos">@RepTypeUseA</a> <a href="RepTypeUseB.html" t\
itle="annotation in typeannos">@RepTypeUseB</a> <a href="RepTypeUseB.html" title\
="annotation in typeannos">@RepTypeUseB</a> []</span>&nbsp;<span class="member-n\
ame">sa</span></div>""");
="annotation in typeannos">@RepTypeUseB</a> []</span>&nbsp;<span class="element-\
name">sa</span></div>""");
checkOutput("typeannos/RepeatingOnMethod.html", true,
"""
@ -695,14 +702,14 @@ public class TestTypeAnnotations extends JavadocTester {
f="RepMethodA.html" title="annotation in typeannos">@RepMethodA</a>
<a href="RepMethodB.html" title="annotation in typeannos">@RepMethodB</a> <a hre\
f="RepMethodB.html" title="annotation in typeannos">@RepMethodB</a>
</span><span class="return-type">java.lang.String</span>&nbsp;<span class="member-name">test1</span>()""",
</span><span class="return-type">java.lang.String</span>&nbsp;<span class="element-name">test1</span>()""",
"""
<a href="RepTypeUseA.html" title="annotation in typeannos">@RepTypeUseA</a> <a h\
ref="RepTypeUseA.html" title="annotation in typeannos">@RepTypeUseA</a> <a href=\
"RepTypeUseB.html" title="annotation in typeannos">@RepTypeUseB</a> <a href="Rep\
TypeUseB.html" title="annotation in typeannos">@RepTypeUseB</a> java.lang.String\
</span>&nbsp;<span class="member-name">test2</span>()""",
</span>&nbsp;<span class="element-name">test2</span>()""",
"""
<a href="RepMethodA.html" title="annotation in typeannos">@RepMethodA</a> <a hre\
@ -713,7 +720,7 @@ public class TestTypeAnnotations extends JavadocTester {
typeannos">@RepTypeUseA</a> <a href="RepTypeUseA.html" title="annotation in typ\
eannos">@RepTypeUseA</a> <a href="RepTypeUseB.html" title="annotation in typeann\
os">@RepTypeUseB</a> <a href="RepTypeUseB.html" title="annotation in typeannos">\
@RepTypeUseB</a> java.lang.String</span>&nbsp;<span class="member-name">test3</s\
@RepTypeUseB</a> java.lang.String</span>&nbsp;<span class="element-name">test3</s\
pan>()""",
"""
@ -728,10 +735,10 @@ public class TestTypeAnnotations extends JavadocTester {
ation in typeannos">@RepAllContextsA</a> <a href="RepAllContextsB.html" title="a\
nnotation in typeannos">@RepAllContextsB</a> <a href="RepAllContextsB.html" titl\
e="annotation in typeannos">@RepAllContextsB</a> java.lang.String</span>&nbsp;<s\
pan class="member-name">test4</span>()""",
pan class="element-name">test4</span>()""",
"""
java.lang.String</span>&nbsp;<span class="member-name">test5</span>&#8203;<span\
java.lang.String</span>&nbsp;<span class="element-name">test5</span>&#8203;<span\
class="parameters">(<a href="RepTypeUseA.html" title="annotation in typeannos">@\
RepTypeUseA</a> <a href="RepTypeUseA.html" title="annotation in typeannos">@RepT\
ypeUseA</a> <a href="RepTypeUseB.html" title="annotation in typeannos">@RepTypeU\
@ -742,22 +749,15 @@ public class TestTypeAnnotations extends JavadocTester {
<a href="RepParameterB.html" title="annotation in typeannos">@RepParameterB</a> \
<a href="RepParameterB.html" title="annotation in typeannos">@RepParameterB</a>
java.lang.String&nbsp;parameter,
<a href="RepParameterA.html" title="annotation in typeannos">@RepParameterA</a> \
<a href="RepParameterA.html" title="annotation in typeannos">@RepParameterA</a> \
<a href="RepParameterB.html" title="annotation in typeannos">@RepParameterB</a> \
<a href="RepParameterB.html" title="annotation in typeannos">@RepParameterB</a>
java.lang.String <a href="RepTypeUseA.html" title="annotation in typeannos">@Rep\
TypeUseA</a> <a href="RepTypeUseA.html" title="annotation in typeannos">@RepType\
UseA</a> <a href="RepTypeUseB.html" title="annotation in typeannos">@RepTypeUseB\
</a> <a href="RepTypeUseB.html" title="annotation in typeannos">@RepTypeUseB</a>\
...&nbsp;vararg)""");
<a href="RepParameterA.html" title="annotation in typeannos">@RepParameterA</a> <a href="RepParameterA.html" title="annotation in typeannos">@RepParameterA</a> <a href="RepParameterB.html" title="annotation in typeannos">@RepParameterB</a> <a href="RepParameterB.html" title="annotation in typeannos">@RepParameterB</a>
java.lang.String <a href="RepTypeUseA.html" title="annotation in typeannos">@RepTypeUseA</a> <a href="RepTypeUseA.html" title="annotation in typeannos">@RepTypeUseA</a> <a href="RepTypeUseB.html" title="annotation in typeannos">@RepTypeUseB</a> <a href="RepTypeUseB.html" title="annotation in typeannos">@RepTypeUseB</a> ...&nbsp;vararg)</span></div>""");
checkOutput("typeannos/RepeatingOnTypeParametersBoundsTypeArgumentsOnMethod.html", true,
"""
<code>(package private) &lt;T&gt;&nbsp;java.lang.String</code></div>
<div class="col-second even-row-color method-summary-table-tab2 method-summary-table-\
tab4 method-summary-table"><code><span class="member-name-link"><a href="#generi\
cMethod(T)">genericMethod</a></span>&#8203;(T&nbsp;t)</code>""",
<div class="col-second even-row-color method-summary-table-tab2 method-summary-t\
able-tab4 method-summary-table"><code><span class="member-name-link"><a href="#g\
enericMethod(T)">genericMethod</a></span>&#8203;(T&nbsp;t)</code>""",
"""
<code>(package private) &lt;T&gt;&nbsp;java.lang.String</code></div>
@ -776,17 +776,17 @@ public class TestTypeAnnotations extends JavadocTester {
">test</a></span>()</code>""",
"""
<span class="return-type">java.lang.String</span>&nbsp;<span class="member-name"\
>test</span>&#8203;<span class="parameters">(<a href="RepTypeUseA.html" title="a\
nnotation in typeannos">@RepTypeUseA</a> <a href="RepTypeUseA.html" title="annot\
ation in typeannos">@RepTypeUseA</a> <a href="RepTypeUseB.html" title="annotatio\
n in typeannos">@RepTypeUseB</a> <a href="RepTypeUseB.html" title="annotation in\
typeannos">@RepTypeUseB</a>&nbsp;RepeatingOnTypeParametersBoundsTypeArgumentsOn\
Method&lt;<a href="RepTypeUseA.html" title="annotation in typeannos">@RepTypeUse\
A</a> <a href="RepTypeUseA.html" title="annotation in typeannos">@RepTypeUseA</a\
> <a href="RepTypeUseB.html" title="annotation in typeannos">@RepTypeUseB</a> <a\
href="RepTypeUseB.html" title="annotation in typeannos">@RepTypeUseB</a> T&gt;&\
nbsp;this)""");
<span class="return-type">java.lang.String</span>&nbsp;<span class="element-name">test</\
span>&#8203;<span class="parameters">(<a href="RepTypeUseA.html" title="annotati\
on in typeannos">@RepTypeUseA</a> <a href="RepTypeUseA.html" title="annotation i\
n typeannos">@RepTypeUseA</a> <a href="RepTypeUseB.html" title="annotation in ty\
peannos">@RepTypeUseB</a> <a href="RepTypeUseB.html" title="annotation in typean\
nos">@RepTypeUseB</a>&nbsp;RepeatingOnTypeParametersBoundsTypeArgumentsOnMethod&\
lt;<a href="RepTypeUseA.html" title="annotation in typeannos">@RepTypeUseA</a> <\
a href="RepTypeUseA.html" title="annotation in typeannos">@RepTypeUseA</a> <a hr\
ef="RepTypeUseB.html" title="annotation in typeannos">@RepTypeUseB</a> <a href="\
RepTypeUseB.html" title="annotation in typeannos">@RepTypeUseB</a> T&gt;&nbsp;th\
is)""");
checkOutput("typeannos/RepeatingOnVoidMethodDeclaration.html", true,
"""
@ -794,6 +794,6 @@ public class TestTypeAnnotations extends JavadocTester {
f="RepMethodA.html" title="annotation in typeannos">@RepMethodA</a>
<a href="RepMethodB.html" title="annotation in typeannos">@RepMethodB</a> <a hre\
f="RepMethodB.html" title="annotation in typeannos">@RepMethodB</a>
</span><span class="return-type">void</span>&nbsp;<span class="member-name">test</span>()""");
</span><span class="return-type">void</span>&nbsp;<span class="element-name">test</span>()""");
}
}

View File

@ -88,10 +88,10 @@ public class TestTypeParameters extends JavadocTester {
checkExit(Exit.OK);
checkOutput("pkg/ClassUseTest3.html", true,
"""
public class <a href="../src-html/pkg/ClassUseTest3.html#line.28">ClassUseTest3<\
/a>&lt;T extends <a href="ParamTest2.html" title="class in pkg">ParamTest2</a>&l\
t;java.util.List&lt;? extends <a href="Foo4.html" title="class in pkg">Foo4</a>&\
gt;&gt;&gt;""");
"""
public class </span><span class="element-name"><a href="../src-html/pkg/ClassUse\
Test3.html#line.28">ClassUseTest3</a>&lt;T extends <a href="ParamTest2.html" tit\
le="class in pkg">ParamTest2</a>&lt;java.util.List&lt;? extends <a href="Foo4.ht\
ml" title="class in pkg">Foo4</a>&gt;&gt;&gt;""");
}
}