diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AbstractExecutableMemberWriter.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AbstractExecutableMemberWriter.java index df4a7c8bca9..2a12b872895 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AbstractExecutableMemberWriter.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AbstractExecutableMemberWriter.java @@ -160,7 +160,7 @@ public abstract class AbstractExecutableMemberWriter extends AbstractMemberWrite */ protected void addReceiverAnnotations(ExecutableElement member, TypeMirror rcvrType, List 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), diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AbstractMemberWriter.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AbstractMemberWriter.java index b03ede82da0..51e83275b4c 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AbstractMemberWriter.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AbstractMemberWriter.java @@ -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 The Java Language Specification. - * - * @param htmlTree the content tree to which the modifier information will be added - */ - private void appendModifiers(Content htmlTree) { - Set 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)); - } - } - } } diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AnnotationTypeRequiredMemberWriterImpl.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AnnotationTypeRequiredMemberWriterImpl.java index 49109c2b4a6..856bb392d63 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AnnotationTypeRequiredMemberWriterImpl.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AnnotationTypeRequiredMemberWriterImpl.java @@ -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(); } diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ClassWriterImpl.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ClassWriterImpl.java index adf1c3554f4..2b1f04891e1 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ClassWriterImpl.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ClassWriterImpl.java @@ -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 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 permits = typeElement.getPermittedSubclasses(); - List 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) { diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ConstructorWriterImpl.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ConstructorWriterImpl.java index 46b16e9285e..5fa47833428 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ConstructorWriterImpl.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ConstructorWriterImpl.java @@ -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(); } diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/EnumConstantWriterImpl.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/EnumConstantWriterImpl.java index f7530632819..914b0704121 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/EnumConstantWriterImpl.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/EnumConstantWriterImpl.java @@ -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(); } diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/FieldWriterImpl.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/FieldWriterImpl.java index 6b4f273d492..805fb512fae 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/FieldWriterImpl.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/FieldWriterImpl.java @@ -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(); } diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDocletWriter.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDocletWriter.java index 4b3d2f9defd..293e450398f 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDocletWriter.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDocletWriter.java @@ -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 annotationMirrors, Content htmltree) { - TypeMirror rcvrType = method.getReceiverType(); - List 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 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 descList, boolean lineBreak) { List 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 getAnnotations(List descList, boolean linkBreak) { + public List getAnnotations(List descList, boolean lineBreak) { List 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; diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/LinkFactoryImpl.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/LinkFactoryImpl.java index 036a42b5340..5772c252d58 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/LinkFactoryImpl.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/LinkFactoryImpl.java @@ -206,19 +206,11 @@ public class LinkFactoryImpl extends LinkFactory { if (annotations.isEmpty()) return links; - List 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; } diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/MethodWriterImpl.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/MethodWriterImpl.java index 8039c2325ad..7c06e46e1af 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/MethodWriterImpl.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/MethodWriterImpl.java @@ -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(); } diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ModuleWriterImpl.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ModuleWriterImpl.java index 6c1b645bc28..6d0822813af 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ModuleWriterImpl.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ModuleWriterImpl.java @@ -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); diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageWriterImpl.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageWriterImpl.java index 89170e24da9..00b38e8e600 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageWriterImpl.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PackageWriterImpl.java @@ -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); diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PropertyWriterImpl.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PropertyWriterImpl.java index b49ba542c6c..5a56a318551 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PropertyWriterImpl.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/PropertyWriterImpl.java @@ -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(); } diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/Signatures.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/Signatures.java new file mode 100644 index 00000000000..6b404c96888 --- /dev/null +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/Signatures.java @@ -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 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 permits = typeElement.getPermittedSubclasses(); + List 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 The Java Language Specification. + * + * @param htmlTree the content tree to which the modifier information will be added + */ + private void appendModifiers(Content htmlTree) { + Set 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)); + } + } + } +} diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/HtmlStyle.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/HtmlStyle.java index 28791eb7a02..8802355c8a8 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/HtmlStyle.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/HtmlStyle.java @@ -521,56 +521,82 @@ public enum HtmlStyle { flexContent, // - // + // // // 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} diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/ModuleSummaryWriter.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/ModuleSummaryWriter.java index 4f3a3029f1e..af00cd19baa 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/ModuleSummaryWriter.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/ModuleSummaryWriter.java @@ -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. * diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/PackageSummaryWriter.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/PackageSummaryWriter.java index 159f2b3d942..5556f3f6e05 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/PackageSummaryWriter.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/PackageSummaryWriter.java @@ -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. diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/ModuleSummaryBuilder.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/ModuleSummaryBuilder.java index dcc69972ab8..8574c160bea 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/ModuleSummaryBuilder.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/ModuleSummaryBuilder.java @@ -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); diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/PackageSummaryBuilder.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/PackageSummaryBuilder.java index 5cfaee600b6..a3938ec96c3 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/PackageSummaryBuilder.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/PackageSummaryBuilder.java @@ -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); diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/resources/stylesheet.css b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/resources/stylesheet.css index 1257c05a505..932e56cde9a 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/resources/stylesheet.css +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/resources/stylesheet.css @@ -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; } /* diff --git a/test/langtools/jdk/javadoc/doclet/testAnnotationTypes/TestAnnotationTypes.java b/test/langtools/jdk/javadoc/doclet/testAnnotationTypes/TestAnnotationTypes.java index 8f6c6eb766f..27875f171a2 100644 --- a/test/langtools/jdk/javadoc/doclet/testAnnotationTypes/TestAnnotationTypes.java +++ b/test/langtools/jdk/javadoc/doclet/testAnnotationTypes/TestAnnotationTypes.java @@ -67,8 +67,7 @@ public class TestAnnotationTypes extends JavadocTester {

DEFAULT_NAME

static final <\ - span class="return-type">java.lang.String \ - DEFAULT_NAME
+ span class="return-type">java.lang.String DEFAULT_NAME """); checkOutput("pkg/AnnotationType.html", true, @@ -94,7 +93,7 @@ public class TestAnnotationTypes extends JavadocTester {
""", "

value

\n", """ -
int value
"""); +
int value
"""); checkOutput("pkg/AnnotationType.html", false, """ @@ -124,10 +123,10 @@ public class TestAnnotationTypes extends JavadocTester { checkOutput("pkg/AnnotationType.html", true, """ - public @interface AnnotationType"""); + public @interface AnnotationType"""); checkOutput("pkg/AnnotationTypeField.html", true, """ - public @interface AnnotationTypeField"""); + public @interface AnnotationTypeField"""); } } diff --git a/test/langtools/jdk/javadoc/doclet/testDeprecatedDocs/TestDeprecatedDocs.java b/test/langtools/jdk/javadoc/doclet/testDeprecatedDocs/TestDeprecatedDocs.java index 2a54b3e615e..51c9592d9ce 100644 --- a/test/langtools/jdk/javadoc/doclet/testDeprecatedDocs/TestDeprecatedDocs.java +++ b/test/langtools/jdk/javadoc/doclet/testDeprecatedDocs/TestDeprecatedDocs.java @@ -80,32 +80,33 @@ public class TestDeprecatedDocs extends JavadocTester { checkOutput("pkg/DeprecatedClassByAnnotation.html", true, """ -
@Deprecated
-                    public class DeprecatedClassByAnnotation
-                    extends java.lang.Object
""", +
@Deprecated + public class DeprecatedClassByAnnotation + extends java.lang.Object
""", """
@Deprecated(forRemoval=true) public int<\ - /span> field
+ /span> field
Deprecated, for re\ moval: This API element is subject to removal in a future version.
""", """
@Deprecated(forRemoval=true) - public DeprecatedClassByAnnotation()
+ public DeprecatedClassByAnnotation()
Deprecated, for re\ moval: This API element is subject to removal in a future version.
""", """
@Deprecated public void\ -  method()
+  method()
Deprecated.
"""); checkOutput("pkg/TestAnnotationType.html", true, """
-
@Deprecated(forRemoval=true)
+                    
@Deprecated(forRemoval=true) @Documented - public @interface TestAnnotationType
+ public @interface TestAnnotationType
Deprecated, for re\ moval: This API element is subject to removal in a future version.
annotation_test1 passes.
@@ -113,21 +114,21 @@ public class TestDeprecatedDocs extends JavadocTester { """
@Deprecated(forRemoval=true) static final int field
+ ">int field
Deprecated, for re\ moval: This API element is subject to removal in a future version.
annotation_test4 passes.
""", """
@Deprecated(forRemoval=true) - int required
+ int required
Deprecated, for re\ moval: This API element is subject to removal in a future version.
annotation_test3 passes.
""", """
java.lang.String&\ - nbsp;optional
+ nbsp;optional
Deprecated.
annotation_test2 passes.
"""); @@ -135,16 +136,16 @@ public class TestDeprecatedDocs extends JavadocTester { checkOutput("pkg/TestClass.html", true, """
-
@Deprecated(forRemoval=true)
-                    public class TestClass
-                    extends java.lang.Object
+
@Deprecated(forRemoval=true) + public class TestClass + extends java.lang.Object
Deprecated, for re\ moval: This API element is subject to removal in a future version.
class_test1 passes.
""", """
@Deprecated(forRemoval=true) - public TestClass()
+ public TestClass()
Deprecated, for re\ moval: This API element is subject to removal in a future version.
class_test3 passes. This is the second sentence\ @@ -212,9 +213,10 @@ public class TestDeprecatedDocs extends JavadocTester { checkOutput("pkg/TestEnum.html", true, """
-
@Deprecated(forRemoval=true)
-                    public enum TestEnum
-                    extends java.lang.Enum<TestEnum>
+
@Deprecated(forRemoval=true) + public enum TestEnum + extends java.lang.Enum<TestEnum>
Deprecated, for re\ moval: This API element is subject to removal in a future version.
enum_test1 passes.
@@ -223,7 +225,7 @@ public class TestDeprecatedDocs extends JavadocTester {
@Deprecated(forRemoval=true) public static final TestEnum FOR_REMOVAL
+ pan class="element-name">FOR_REMOVAL
Deprecated, for re\ moval: This API element is subject to removal in a future version.
enum_test3 passes.
@@ -232,9 +234,9 @@ public class TestDeprecatedDocs extends JavadocTester { checkOutput("pkg/TestError.html", true, """
-
@Deprecated(forRemoval=true)
-                    public class TestError
-                    extends java.lang.Error
+
@Deprecated(forRemoval=true) + public class TestError + extends java.lang.Error
Deprecated, for re\ moval: This API element is subject to removal in a future version.
error_test1 passes.
@@ -243,9 +245,9 @@ public class TestDeprecatedDocs extends JavadocTester { checkOutput("pkg/TestException.html", true, """
-
@Deprecated(forRemoval=true)
-                    public class TestException
-                    extends java.lang.Exception
+
@Deprecated(forRemoval=true) + public class TestException + extends java.lang.Exception
Deprecated, for re\ moval: This API element is subject to removal in a future version.
exception_test1 passes.
@@ -254,9 +256,9 @@ public class TestDeprecatedDocs extends JavadocTester { checkOutput("pkg/TestInterface.html", true, """
-
@Deprecated(forRemoval=true)
-                    public class TestInterface
-                    extends java.lang.Object
+
@Deprecated(forRemoval=true) + public class TestInterface + extends java.lang.Object
Deprecated, for re\ moval: This API element is subject to removal in a future version.
interface_test1 passes.
diff --git a/test/langtools/jdk/javadoc/doclet/testHiddenTag/TestHiddenTag.java b/test/langtools/jdk/javadoc/doclet/testHiddenTag/TestHiddenTag.java index 44f1ab79c3e..8612ac4d665 100644 --- a/test/langtools/jdk/javadoc/doclet/testHiddenTag/TestHiddenTag.java +++ b/test/langtools/jdk/javadoc/doclet/testHiddenTag/TestHiddenTag.java @@ -87,8 +87,9 @@ public class TestHiddenTag extends JavadocTester { checkOutput("pkg1/A.VisibleInnerExtendsInvisibleInner.html", true, """ -
public static class A.VisibleInnerExtendsInvisibleInner
-                    extends A
""", +
public static class <\ + span class="element-name type-name-label">A.VisibleInnerExtendsInvisibleInner + extends A
""", """ visibleField""", """ diff --git a/test/langtools/jdk/javadoc/doclet/testHref/TestHref.java b/test/langtools/jdk/javadoc/doclet/testHref/TestHref.java index 574c7bf5a4e..d8a085e5602 100644 --- a/test/langtools/jdk/javadoc/doclet/testHref/TestHref.java +++ b/test/langtools/jdk/javadoc/doclet/testHref/TestHref.java @@ -76,7 +76,8 @@ public class TestHref extends JavadocTester { "Class C4<E extends C4<E>>", //Signature does not link to the page itself. """ - public abstract class C4<E extends C4<E>>""" + public abstract class C4<E extends C4<E>>""" ); checkOutput(Output.OUT, false, diff --git a/test/langtools/jdk/javadoc/doclet/testHtmlDefinitionListTag/TestHtmlDefinitionListTag.java b/test/langtools/jdk/javadoc/doclet/testHtmlDefinitionListTag/TestHtmlDefinitionListTag.java index 4b884752d91..54113798137 100644 --- a/test/langtools/jdk/javadoc/doclet/testHtmlDefinitionListTag/TestHtmlDefinitionListTag.java +++ b/test/langtools/jdk/javadoc/doclet/testHtmlDefinitionListTag/TestHtmlDefinitionListTag.java @@ -106,9 +106,9 @@ public class TestHtmlDefinitionListTag extends JavadocTester { // for default value. checkOutput("pkg1/C1.html", true, """ -
public class C1
-                    extends java.lang.Object
-                    implements java.io.Serializable
"""); +
public class C1 + extends java.lang.Object + implements java.io.Serializable
"""); checkOutput("pkg1/C4.html", true, """
@@ -338,15 +338,14 @@ public class TestHtmlDefinitionListTag extends JavadocTester { checkOutput("pkg1/C1.html", expectFound, """
public void readObject(\ - ) + lass="return-type">void readObject() throws java.io.IOException
"""); checkOutput("pkg1/C2.html", expectFound, """ -
public C2()
+
public C2()
"""); @@ -354,8 +353,8 @@ public class TestHtmlDefinitionListTag extends JavadocTester { """
public static final\  C1.ModalExclusionType APPLIC\ - ATION_EXCLUDE
+ in pkg1">C1.ModalExclusionType APPLICATION_E\ + XCLUDE """); diff --git a/test/langtools/jdk/javadoc/doclet/testHtmlTag/TestHtmlTag.java b/test/langtools/jdk/javadoc/doclet/testHtmlTag/TestHtmlTag.java index ac9452962ff..66b75de1b1c 100644 --- a/test/langtools/jdk/javadoc/doclet/testHtmlTag/TestHtmlTag.java +++ b/test/langtools/jdk/javadoc/doclet/testHtmlTag/TestHtmlTag.java @@ -159,9 +159,10 @@ public class TestHtmlTag extends JavadocTester { checkOutput("pkg3/A.ActivationDesc.html", true, """ -
public class A.ActivationDesc
-                    extends java.lang.Object
-                    implements java.io.Serializable
+
public class A.ActivationDesc + extends java.lang.Object + implements java.io.Serializable
An activation descriptor contains the information necessary to activate an object:
  • the object's group identifier, @@ -181,9 +182,10 @@ public class TestHtmlTag extends JavadocTester { checkOutput("pkg3/A.ActivationGroupID.html", true, """ -
    public class A.ActivationGroupID
    -                    extends java.lang.Object
    -                    implements java.io.Serializable
    +
    public class A.ActivationGroupID + extends java.lang.Object + implements java.io.Serializable
    The identifier for a registered activation group serves several purposes:
    • identifies the group uniquely within the activation system, and diff --git a/test/langtools/jdk/javadoc/doclet/testIndentation/TestIndentation.java b/test/langtools/jdk/javadoc/doclet/testIndentation/TestIndentation.java index a2eb6926782..4c93bc8c4ee 100644 --- a/test/langtools/jdk/javadoc/doclet/testIndentation/TestIndentation.java +++ b/test/langtools/jdk/javadoc/doclet/testIndentation/TestIndentation.java @@ -52,8 +52,7 @@ public class TestIndentation extends JavadocTester { """
      public <T> void m(T&nbs\ - p;t1, + n> m(T t1, T t2) throws java.lang.Exception
      """); diff --git a/test/langtools/jdk/javadoc/doclet/testInterface/TestInterface.java b/test/langtools/jdk/javadoc/doclet/testInterface/TestInterface.java index ab8b0bcf5f6..7571e74013a 100644 --- a/test/langtools/jdk/javadoc/doclet/testInterface/TestInterface.java +++ b/test/langtools/jdk/javadoc/doclet/testInterface/TestInterface.java @@ -68,11 +68,10 @@ public class TestInterface extends JavadocTester { checkOutput("pkg/Interface.html", true, """ -
      int method()
      """, +
      int method()
      """, """
      static final <\ - span class="return-type">int field<\ - /div>""", + span class="return-type">int field
      """, // Make sure known implementing class list is correct and omits type parameters. """
      @@ -130,8 +129,7 @@ public class TestInterface extends JavadocTester {

      f

      public static \ - int f + int f
      A hider field
      """, """ @@ -150,8 +148,8 @@ public class TestInterface extends JavadocTester {

      staticMethod

      public static \ - void staticMetho\ - d()
      + void staticMethod()
    Description copied from inte\ rface: Inter\ faceWithStaticMembers
    @@ -160,8 +158,9 @@ public class TestInterface extends JavadocTester { checkOutput("pkg/ClassWithStaticMembers.InnerClass.html", true, """ -
    public static class ClassWithStaticMembers.InnerClass
    -                    extends java.lang.Object
    +
    public static class <\ + span class="element-name type-name-label">ClassWithStaticMembers.InnerClass + extends java.lang.Object
    A hider inner class
    """); } diff --git a/test/langtools/jdk/javadoc/doclet/testJavaFX/TestJavaFX.java b/test/langtools/jdk/javadoc/doclet/testJavaFX/TestJavaFX.java index 62fe5d34a8a..2ac83d830b1 100644 --- a/test/langtools/jdk/javadoc/doclet/testJavaFX/TestJavaFX.java +++ b/test/langtools/jdk/javadoc/doclet/testJavaFX/TestJavaFX.java @@ -61,15 +61,15 @@ public class TestJavaFX extends JavadocTester { setRate(double)""", """
    public final <\ - span class="return-type">void setRate​(double value)
    + span class="return-type">void setRate̴\ + 3;(double value)
Sets the value of the property rate.
Property description:
""", """
public final <\ - span class="return-type">double getRate()
+ span class="return-type">double getRate()<\ + /div>
Gets the value of the property rate.
Property description:
""", @@ -98,22 +98,21 @@ public class TestJavaFX extends JavadocTester {

paused

public final <\ span class="return-type">\ - C.BooleanProperty pausedProperty
+ C.BooleanProperty pausedProperty
Defines if paused. The second line.
""", """

isPaused

public final <\ - span class="return-type">double isPaused()
+ span class="return-type">double isPaused()\ +
Gets the value of the property paused.
""", """

setPaused

public final <\ - span class="return-type">void setPaused​(boolean value)
+ span class="return-type">void setPaused\ + 203;(boolean value)
Sets the value of the property paused.
Property description:
@@ -124,8 +123,8 @@ public class TestJavaFX extends JavadocTester {

isPaused

public final <\ - span class="return-type">double isPaused()
+ span class="return-type">double isPaused()\ +
Gets the value of the property paused.
Property description:
@@ -137,16 +136,15 @@ public class TestJavaFX extends JavadocTester {

rate

public final <\ span class="return-type">C\ - .DoubleProperty rateProperty + .DoubleProperty rateProperty
Defines the direction/speed at which the Timeline is expected to be played. This is the second line.
""", """

setRate

public final <\ - span class="return-type">void setRate​(double value)
+ span class="return-type">void setRate̴\ + 3;(double value)
Sets the value of the property rate.
Property description:
@@ -160,8 +158,8 @@ public class TestJavaFX extends JavadocTester {

getRate

public final <\ - span class="return-type">double getRate()
+ span class="return-type">double getRate()<\ + /div>
Gets the value of the property rate.
Property description:
@@ -249,8 +247,8 @@ public class TestJavaFX extends JavadocTester {

beta

public java.lang.Object betaPr\ - operty
+ lass="return-type">java.lang.Object betaProperty<\ + /span>
  • @@ -258,7 +256,7 @@ public class TestJavaFX extends JavadocTester {

    gamma

    public final <\ span class="return-type">java.util.List<java.lang.String> gammaProperty
    + n class="element-name">gammaProperty
  • @@ -266,7 +264,7 @@ public class TestJavaFX extends JavadocTester {

    delta

    public final <\ span class="return-type">java.util.List<java.util.Set<? super java.lang.Ob\ - ject>> deltaProperty
    + ject>> deltaProperty
  • diff --git a/test/langtools/jdk/javadoc/doclet/testLambdaFeature/TestLambdaFeature.java b/test/langtools/jdk/javadoc/doclet/testLambdaFeature/TestLambdaFeature.java index 486c5dd6262..de8345bda6e 100644 --- a/test/langtools/jdk/javadoc/doclet/testLambdaFeature/TestLambdaFeature.java +++ b/test/langtools/jdk/javadoc/doclet/testLambdaFeature/TestLambdaFeature.java @@ -60,8 +60,8 @@ public class TestLambdaFeature extends JavadocTester { ble-tab5 method-summary-table">default void""", """
    default void defaultMethod()
    + class="return-type">void defaultMethod() """, """
    \ diff --git a/test/langtools/jdk/javadoc/doclet/testLinkOption/TestLinkOption.java b/test/langtools/jdk/javadoc/doclet/testLinkOption/TestLinkOption.java index 0487373cd9a..3e476dfd267 100644 --- a/test/langtools/jdk/javadoc/doclet/testLinkOption/TestLinkOption.java +++ b/test/langtools/jdk/javadoc/doclet/testLinkOption/TestLinkOption.java @@ -112,9 +112,11 @@ public class TestLinkOption extends JavadocTester { checkOutput("mylib/lang/StringBuilderChild.html", true, """ -
    public abstract class StringBuilderChild
    -                    extends Object
    """ +
    public abstract class StringBuilderChild + extends Object
    """ ); // 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, """ -
    public class A
    -                    extends java.lang.Object
    +
    public class A + extends java.lang.Object
    Test links.
    public class A - extends java.lang.Object +
    public class A + extends java.lang.Object
    """, """
    public void htmlAttrInPre1()
    + lass="return-type">void htmlAttrInPre1()
    More html tag outliers.
                          @Override
    diff --git a/test/langtools/jdk/javadoc/doclet/testMemberInheritance/TestMemberInheritance.java b/test/langtools/jdk/javadoc/doclet/testMemberInheritance/TestMemberInheritance.java
    index bd7e3b72dd6..a0a21f2dacd 100644
    --- a/test/langtools/jdk/javadoc/doclet/testMemberInheritance/TestMemberInheritance.java
    +++ b/test/langtools/jdk/javadoc/doclet/testMemberInheritance/TestMemberInheritance.java
    @@ -121,8 +121,9 @@ public class TestMemberInheritance extends JavadocTester {
                     """
                         

    -
    public abstract class DocumentedNonGenericChild
    -                    extends java.lang.Object
    +
    public abstract class DocumentedNonGenericChild + extends java.lang.Object
    """); checkOutput("pkg2/DocumentedNonGenericChild.html", true, @@ -142,8 +143,8 @@ public class TestMemberInheritance extends JavadocTester {

    parentMethod

    protected abstract&\ - nbsp;java.lang.String parentMethod(java.lang.String \ + nbsp;java.lang.String p\ + arentMethod(java.lang.String \ t) throws java.lang.IllegalArgumentException, java.lang.InterruptedException, @@ -169,8 +170,8 @@ public class TestMemberInheritance extends JavadocTester {

    parentField

    public java.lang.String parent\ - Field
    + lass="return-type">java.lang.String parentField
    A field.
    """); @@ -185,8 +186,8 @@ public class TestMemberInheritance extends JavadocTester {

    method

    public java.lang.String method\ - (java.lang.String t)
    + lass="return-type">java.lang.String method\ + ​(java.lang.String t)
    """); checkOutput("index-all.html", true, @@ -233,8 +234,8 @@ public class TestMemberInheritance extends JavadocTester {

    parentMethod

    """, """ diff --git a/test/langtools/jdk/javadoc/doclet/testMethodSignature/TestMethodSignature.java b/test/langtools/jdk/javadoc/doclet/testMethodSignature/TestMethodSignature.java index 91644b194bc..4bd0a81f4bd 100644 --- a/test/langtools/jdk/javadoc/doclet/testMethodSignature/TestMethodSignature.java +++ b/test/langtools/jdk/javadoc/doclet/testMethodSignature/TestMethodSignature.java @@ -51,11 +51,11 @@ public class TestMethodSignature extends JavadocTester { checkOutput("pkg/C.html", true, """
    @Generated("GeneratedConstructor") - public C()
    """, + public C()""", """
    public static \ - void simpleMetho\ + void simpleMetho\ d(int i, java.lang.String s, boolean b)
    """, @@ -65,8 +65,8 @@ public class TestMethodSignature extends JavadocTester { date="a date", comments="some comment about the method below") public static void annotatedMethod(int i, + e">void annotatedMethod(int i, java.lang.String s, boolean b)""", @@ -83,9 +83,9 @@ public class TestMethodSignature extends JavadocTester { T8 extends java.lang.AutoCloseable> C.Wit\ h8Types<T1,​T2,​T3,​T4,​T5,​T6,​T7,&#\ - 8203;T8> bigGenericMethod​\ - (C.F0&\ - lt;? extends T1> t1, + 8203;T8> bigGenericMethod(C.F0<? ex\ + tends T1> t1, C.F0<? extends T2> t2, C.F0<? extends T3> t3, C.F0<? extends T4> t4, @@ -111,9 +111,9 @@ public class TestMethodSignature extends JavadocTester { T8 extends java.lang.AutoCloseable> C.Wit\ h8Types<T1,​T2,​T3,​T4,​T5,​T6,​T7,&#\ - 8203;T8> bigGenericAnnotatedMethod​(\ - C.F0<? extends T1> t1, + 8203;T8> bigGenericAnnotatedMethod̴\ + 3;(C.F0<? extends T1> t1, C.F0<? extends T2> t2, C.F0<? extends T3> t3, C.F0<? extends T4> t4, diff --git a/test/langtools/jdk/javadoc/doclet/testModifierEx/TestModifierEx.java b/test/langtools/jdk/javadoc/doclet/testModifierEx/TestModifierEx.java index 6f13f6a61a0..326d7df8a1e 100644 --- a/test/langtools/jdk/javadoc/doclet/testModifierEx/TestModifierEx.java +++ b/test/langtools/jdk/javadoc/doclet/testModifierEx/TestModifierEx.java @@ -47,19 +47,24 @@ public class TestModifierEx extends JavadocTester { checkExit(Exit.OK); checkOutput("pkg1/Abstract.html", true, """ -
    public abstract class Abstract""");
    +                    
    public abstract class Abstract"""); checkOutput("pkg1/Interface.html", true, """ -
    interface Interface
    """); +
    interface Interface
    """); checkOutput("pkg1/Interface.Kind.html", true, """ -
    public static interface Interface.Kind
    """); +
    public static interface Interface.Kind
    """); checkOutput("pkg1/Enum.html", true, """ -
    public enum Enum""");
    +                    
    public enum Enum"""); checkOutput("pkg1/Klass.StaticEnum.html", true, """ -
    public static enum Klass.StaticEnum""");
    +                    
    public static enum Klass.StaticEnum"""); } } diff --git a/test/langtools/jdk/javadoc/doclet/testModules/TestModules.java b/test/langtools/jdk/javadoc/doclet/testModules/TestModules.java index 09d6625f683..714b4476a18 100644 --- a/test/langtools/jdk/javadoc/doclet/testModules/TestModules.java +++ b/test/langtools/jdk/javadoc/doclet/testModules/TestModules.java @@ -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 { Modules """); } - void checkNoDescription(boolean found) { - checkOutput("moduleA/module-summary.html", found, - """ -
    -

    @Deprecated(forRemoval=true) -

    -

    Module moduleA

    -
      -
    • -
        -
      • - """); - checkOutput("moduleB/module-summary.html", found, - """ -
          -
        • -
            -
          • - """); - } - 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, """
            -

            @Deprecated(forRemoval=true) -

            Module moduleA

            +
            +
            @Deprecated(forRemoval=true) + module moduleA
            • @@ -574,13 +554,15 @@ public class TestModules extends JavadocTester { """); checkOutput("moduleB/module-summary.html", found, """ -

              @\ - AnnotationType(optional\ - ="Module Annotation", - required=2016) -

              +

              Module moduleB

              +
              +
              @AnnotationType(optional="Module Annotation", + required=2016) + module moduleB
              • @@ -1119,8 +1101,12 @@ public class TestModules extends JavadocTester { """); checkOutput("moduletags/module-summary.html", found, """ -

                @Deprecated -

                """, +
                +

                Module moduletags

                +
                +
                +
                @Deprecated + module moduletags
                """, """
                Deprecated.
                """); } @@ -1128,11 +1114,16 @@ public class TestModules extends JavadocTester { void checkModuleAnnotation() { checkOutput("moduleB/module-summary.html", true, """ -

                @\ - AnnotationType(optional\ - ="Module Annotation", +

                +

                Module moduleB

                +
                +
                +
                @AnnotationType(option\ + al="Module Annotation", required=2016) -

                """); +
                module moduleB
                """); checkOutput("moduleB/module-summary.html", false, "@AnnotationTypeUndocumented"); } @@ -1349,8 +1340,10 @@ public class TestModules extends JavadocTester { """

                -
                public class TestClassInModuleA
                -                    extends java.lang.Object
                +
                public class TestClassInModuleA + extends java.lang.Object
                """); checkOutput("src-html/moduleA/testpkgmdlA/TestClassInModuleA.html", true, """ diff --git a/test/langtools/jdk/javadoc/doclet/testNewLanguageFeatures/TestNewLanguageFeatures.java b/test/langtools/jdk/javadoc/doclet/testNewLanguageFeatures/TestNewLanguageFeatures.java index 49b80f44dd5..d83eeeeed0a 100644 --- a/test/langtools/jdk/javadoc/doclet/testNewLanguageFeatures/TestNewLanguageFeatures.java +++ b/test/langtools/jdk/javadoc/doclet/testNewLanguageFeatures/TestNewLanguageFeatures.java @@ -67,9 +67,11 @@ public class TestNewLanguageFeatures extends JavadocTester { // Make sure enum header is correct. "Enum Coin", // Make sure enum signature is correct. - """ -
                public enum Coin
                -                    extends java.lang.Enum<Coin>
                """, + """ +
                public enum Coin + extends java.lang.Enum<Coin>
                """, // Check for enum constant section "
                Enum Constants
                ", // Detail for enum constant @@ -83,8 +85,8 @@ public class TestNewLanguageFeatures extends JavadocTester { """
                public static \ Coin valueOf(\ - java.lang.String name)
                + > valueOf(java.la\ + ng.String name)
    Returns the enum constant of this type with the specified name. The string must match exactly 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 {
    public <T extends java.util.List,​ V> - java.lang.String[] methodThatHasTypeParameters(T par\ - am1, + java.lang.String[] meth\ + odThatHasTypeParameters(T param1, V param2)
    """, // Method that returns TypeParameters """ @@ -151,8 +152,8 @@ public class TestNewLanguageFeatures extends JavadocTester { """
    public E[] methodThatReturnsTypePar\ - ameterA(E[] methodThatReturnsTypeParameterA\ + (E[] e)
    """, """ @@ -197,8 +198,11 @@ public class TestNewLanguageFeatures extends JavadocTester { // Signature of subclass that has type parameters. checkOutput("pkg/TypeParameterSubClass.html", true, """ -
    public class TypeParameterSubClass<T extends java.lang.String>
    -                    extends TypeParameterSuperClass<T>
    """); +
    public class TypeParameterSubClass<T extends java.lang.\ + String> + extends TypeParameterSuperClass<T>
    """); // Interface generic parameter substitution // Signature of subclass that has type parameters. @@ -232,8 +236,8 @@ public class TestNewLanguageFeatures extends JavadocTester {
    public <T extends java.lang.Number & java.lang.Runnable&g\ t; - T fooR\ - 03;(T t)
    """); + T foo(T t)
    """); //============================================================== // Test Class-Use Documentation for Type Parameters. @@ -523,11 +527,13 @@ public class TestNewLanguageFeatures extends JavadocTester { checkOutput("pkg/AnnotationTypeUsage.html", true, // CLASS """ -
    @AnnotationType\
    -                    (optional="Class Annotation",
    +                    
    @AnnotationType(optional="Class Annotation", required=1994) - public class AnnotationTypeUsage - extends java.lang.Object
    """, + public class AnnotationTypeUsage + extends java.lang.Object
    """, // FIELD """
    optional="Field Annotation", required=1994) public int<\ - /span> field
    """, + /span> field
    """, // CONSTRUCTOR """
    @AnnotationType(optional="Constructor Annotation", required=1994) - public AnnotationTypeUsage()
    """, + public AnnotationTypeUsage()""", // METHOD """
    optional="Method Annotation", required=1994) public void\ -  method()
    """, +  method()""", // METHOD PARAMS """
    public void methodWithParams(@AnnotationType(optio\ - nal="Parameter Annotation",required\ - =1994) + lass="return-type">void methodWithParams&#\ + 8203;(@AnnotationType(optional\ + ="Parameter Annotation",required=19\ + 94) int documented, int undocmented)
    """, // CONSTRUCTOR PARAMS """
    public AnnotationTypeUsage(@AnnotationType(optional="Constructor Param Annotation",<\ - a href="AnnotationType.html#required()">required=1994) + lass="element-name">AnnotationTypeUsage(<\ + a href="AnnotationType.html" title="annotation in pkg">@AnnotationType(optional="Constructor Param Annotation",\ + required=1994) int documented, int undocmented)
    """); @@ -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
     and 
    checkOutput("pkg1/B.html", true, """ -
    @A""",
    +                    
    @A""", """ - public interface B
    """); + public interface B"""); } } diff --git a/test/langtools/jdk/javadoc/doclet/testOptions/TestOptions.java b/test/langtools/jdk/javadoc/doclet/testOptions/TestOptions.java index 37c64d059b3..50911581ddd 100644 --- a/test/langtools/jdk/javadoc/doclet/testOptions/TestOptions.java +++ b/test/langtools/jdk/javadoc/doclet/testOptions/TestOptions.java @@ -192,21 +192,23 @@ public class TestOptions extends JavadocTester { checkLinks(); checkOutput("linksource/AnnotationTypeField.html", true, """ -
    @Documented
    -                    public @interface AnnotationTypeField
    """, +
    @Documented + public @interface AnnotationTypeField\ +
    """, """

    DEFAULT_NAME

    static final <\ - span class="return-type">java.lang.String \ - DEFAULT_NAME
    """, + span class="return-type">java.lang.String DEFAULT_NAME""", """

    name

    java.lang.String&\ - nbsp;name
    """); + nbsp;name"""); checkOutput("src-html/linksource/AnnotationTypeField.html", true, "Source code", @@ -215,11 +217,12 @@ public class TestOptions extends JavadocTester { checkOutput("linksource/Properties.html", true, """ -
    public class Properties""",
    +                    
    public class Properties""", """
    public java.lang.Object someProperty
    """); + lass="return-type">java.lang.Object
     someProperty
    """); checkOutput("src-html/linksource/Properties.html", true, "Source code", @@ -228,20 +231,22 @@ public class TestOptions extends JavadocTester { checkOutput("linksource/SomeClass.html", true, """ -
    public class SomeClass
    -                    extends java.lang.Object
    """, +
    public class SomeC\ + lass + extends java.lang.Object
    """, """
    public int field
    """, + lass="return-type">int field""", """
    public SomeC\ - lass()
    """, + lass="element-name">Some\ + Class()""", """
    public int method()
    """); + lass="return-type">int method()"""); checkOutput("src-html/linksource/SomeClass.html", true, "Source code", @@ -258,13 +263,13 @@ public class TestOptions extends JavadocTester { """
    public static final\  SomeEnum VALUE1
    """, + e">SomeEnum VALUE1""", """
    public static final\  SomeEnum VALUE2
    """); + e">SomeEnum VALUE2"""); checkOutput("src-html/linksource/SomeEnum.html", true, """ diff --git a/test/langtools/jdk/javadoc/doclet/testOrdering/TestOrdering.java b/test/langtools/jdk/javadoc/doclet/testOrdering/TestOrdering.java index 6a11932f92e..b701554509a 100644 --- a/test/langtools/jdk/javadoc/doclet/testOrdering/TestOrdering.java +++ b/test/langtools/jdk/javadoc/doclet/testOrdering/TestOrdering.java @@ -588,20 +588,16 @@ public class TestOrdering extends JavadocTester { "

    Field Details

    ", """
    static final <\ - span class="return-type">int one""", + span class="return-type">int one
    """, """
    static final <\ - span class="return-type">int two""", + span class="return-type">int two
    """, """
    static final <\ - span class="return-type">int three<\ - /div>""", + span class="return-type">int three
    """, """
    static final <\ - span class="return-type">int four"""); + span class="return-type">int four
    """); checkOrder("pkg5/AnnoOptionalTest.html", "

    Optional Element Summary

    ", diff --git a/test/langtools/jdk/javadoc/doclet/testOverriddenMethods/TestBadOverride.java b/test/langtools/jdk/javadoc/doclet/testOverriddenMethods/TestBadOverride.java index 66b5622b977..896f15a73d4 100644 --- a/test/langtools/jdk/javadoc/doclet/testOverriddenMethods/TestBadOverride.java +++ b/test/langtools/jdk/javadoc/doclet/testOverriddenMethods/TestBadOverride.java @@ -56,8 +56,7 @@ public class TestBadOverride extends JavadocTester {

    toString

    public void toString()<\ - /div> + lass="return-type">void toString()
    Why can't I do this ?
    """); } diff --git a/test/langtools/jdk/javadoc/doclet/testOverriddenMethods/TestOverriddenDeprecatedMethods.java b/test/langtools/jdk/javadoc/doclet/testOverriddenMethods/TestOverriddenDeprecatedMethods.java index 79701086d1e..31cbfb14fb1 100644 --- a/test/langtools/jdk/javadoc/doclet/testOverriddenMethods/TestOverriddenDeprecatedMethods.java +++ b/test/langtools/jdk/javadoc/doclet/testOverriddenMethods/TestOverriddenDeprecatedMethods.java @@ -62,13 +62,13 @@ public class TestOverriddenDeprecatedMethods extends JavadocTester { """ @Deprecated public void\ -  func1()""", +  func1()""", """
    Deprecated.
    """, """ @Deprecated public void\ -  func2()""", +  func2()""", """
    Deprecated.
    """, """ diff --git a/test/langtools/jdk/javadoc/doclet/testPackageAnnotation/TestPackageAnnotation.java b/test/langtools/jdk/javadoc/doclet/testPackageAnnotation/TestPackageAnnotation.java index 2b7d64b97af..0179b8a600a 100644 --- a/test/langtools/jdk/javadoc/doclet/testPackageAnnotation/TestPackageAnnotation.java +++ b/test/langtools/jdk/javadoc/doclet/testPackageAnnotation/TestPackageAnnotation.java @@ -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 { """
    -

    @Deprecated(since="1<2>3") -

    Package pkg1

    +
    +
    @Deprecated(since="1<2>3") + package pkg1
    """); } @@ -87,10 +88,11 @@ public class TestPackageAnnotation extends JavadocTester { """
    -

    @Deprecated(since="1<2>3") -

    Package pkg3

    +
    +
    @Deprecated(since="1<2>3") + package pkg3
    """); } } diff --git a/test/langtools/jdk/javadoc/doclet/testPrivateClasses/TestPrivateClasses.java b/test/langtools/jdk/javadoc/doclet/testPrivateClasses/TestPrivateClasses.java index 4959b0bc490..4ba978067b9 100644 --- a/test/langtools/jdk/javadoc/doclet/testPrivateClasses/TestPrivateClasses.java +++ b/test/langtools/jdk/javadoc/doclet/testPrivateClasses/TestPrivateClasses.java @@ -73,8 +73,8 @@ public class TestPrivateClasses extends JavadocTester { // Method is documented as though it is declared in the inheriting method. """
    public void methodInheritedFro\ - mParent(int p1) + lass="return-type">void methodInheritedFromParent\ + (int p1) throws java.lang.Exception
    """, """
    @@ -191,7 +191,8 @@ public class TestPrivateClasses extends JavadocTester { blicInterface
    """, """ -
    public class PublicChild""");
    +                    
    public class PublicChild"""); 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. """ -
    class PrivateParent""");
    +                    
    class PrivateParent"""); checkOutput("pkg/PrivateParent.html", false, """ -
     class PrivateParent""");
    +                    
    class PrivateParent"""); } } diff --git a/test/langtools/jdk/javadoc/doclet/testProperty/TestProperty.java b/test/langtools/jdk/javadoc/doclet/testProperty/TestProperty.java index 987d854b20e..82c34ea5b29 100644 --- a/test/langtools/jdk/javadoc/doclet/testProperty/TestProperty.java +++ b/test/langtools/jdk/javadoc/doclet/testProperty/TestProperty.java @@ -55,7 +55,7 @@ public class TestProperty extends JavadocTester {
    public final <\ span class="return-type">Obje\ ctProperty<MyObj>\ -  goodProperty
    +  goodProperty
    This is an Object property where the Object is a single Object.
    See Also:
    @@ -67,7 +67,7 @@ public class TestProperty extends JavadocTester {
    public final <\ span class="return-type">Obje\ ctProperty<MyObj[]> badProperty
    + n> badProperty
    This is an Object property where the Object is an array.
    See Also:
    @@ -100,8 +100,8 @@ public class TestProperty extends JavadocTester {
    public final <\ span class="return-type">Obje\ ctProperty<java.util.List<T>> listProperty<\ - /span>
    + r in MyClassT">T>> listProperty<\ + /div>
    This is an Object property where the Object is a single List<T>.
    See Also:
    diff --git a/test/langtools/jdk/javadoc/doclet/testRecordTypes/TestRecordTypes.java b/test/langtools/jdk/javadoc/doclet/testRecordTypes/TestRecordTypes.java index 2390eb8b383..2f8d349a1e3 100644 --- a/test/langtools/jdk/javadoc/doclet/testRecordTypes/TestRecordTypes.java +++ b/test/langtools/jdk/javadoc/doclet/testRecordTypes/TestRecordTypes.java @@ -75,7 +75,7 @@ public class TestRecordTypes extends JavadocTester { """

    Record R

    """, """ - public record R""", + public record R""", """ R​(int r1)"""); } @@ -96,7 +96,7 @@ public class TestRecordTypes extends JavadocTester { """

    Record R

    """, """ - public record R""", + public record R""", """ R​(int r1)"""); } @@ -117,7 +117,7 @@ public class TestRecordTypes extends JavadocTester { """

    Record R

    """, """ - public record R""", + public record R""", """ R()"""); } @@ -142,7 +142,7 @@ public class TestRecordTypes extends JavadocTester { """

    Record R

    """, """ - public record R""", + public record R""", """
    Record Components:
    @@ -173,7 +173,7 @@ public class TestRecordTypes extends JavadocTester { """

    Record R<T>

    """, """ - public record R<T>""", + public record R<T>""", """
    Type Parameters:
    @@ -226,22 +226,22 @@ public class TestRecordTypes extends JavadocTester { "Returns a string representation of this record.", "Method Details", """ - toString""", + toString""", "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.", """ - hashCode""", + hashCode""", "Returns a hash code value for this object. The value is derived " + "from the hash code of each of the record components.", """ - equals""", + equals""", """ 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 '=='.""", """ - r1""", + r1""", """ Returns the value of the r1 record component.""" ); @@ -289,22 +289,22 @@ public class TestRecordTypes extends JavadocTester { "Returns a string representation of this record.", "Method Details", """ - toString""", + toString""", "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.", """ - hashCode""", + hashCode""", "Returns a hash code value for this object. The value is derived " + "from the hash code of each of the record components.", """ - equals""", + equals""", """ 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 '=='.""", """ - r1""", + r1""", """ Returns the value of the r1 record component.""" ); @@ -471,26 +471,27 @@ public class TestRecordTypes extends JavadocTester { checkOutput("p/R.html", true, """ -
    public record R("""
    +                    
    public record R(""" + rcAnno + """ int i) - extends java.lang.Record
    """, + extends java.lang.Record
    """, "
    " + fAnno + """ private final int<\ - /span> i
    """, + /span> i""", """
    public R(""" + lass="element-name">R(""" + pAnno + "int i)
    ", "
    " + mAnno + """ public int&\ - nbsp;i()
    """); + nbsp;i()"""); } } diff --git a/test/langtools/jdk/javadoc/doclet/testSealedTypes/TestSealedTypes.java b/test/langtools/jdk/javadoc/doclet/testSealedTypes/TestSealedTypes.java index 5e0b5c4e114..336005ed6e8 100644 --- a/test/langtools/jdk/javadoc/doclet/testSealedTypes/TestSealedTypes.java +++ b/test/langtools/jdk/javadoc/doclet/testSealedTypes/TestSealedTypes.java @@ -59,7 +59,9 @@ public class TestSealedTypes extends JavadocTester { checkExit(Exit.OK); checkOutput("p/A.html", true, - "public sealed class A"); + """ +
    public sealed class <\ + span class="element-name type-name-label">A"""); } @Test @@ -75,7 +77,9 @@ public class TestSealedTypes extends JavadocTester { checkExit(Exit.OK); checkOutput("p/A.html", true, - "public sealed interface A"); + """ +
    public sealed interface A"""); } @Test @@ -92,10 +96,14 @@ public class TestSealedTypes extends JavadocTester { checkExit(Exit.OK); checkOutput("p/A.html", true, - "public sealed class A"); + """ +
    public sealed class <\ + span class="element-name type-name-label">A"""); checkOutput("p/B.html", true, - "public non-sealed class B"); + """ +
    public non-sealed class <\ + span class="element-name type-name-label">B"""); } @Test @@ -112,10 +120,14 @@ public class TestSealedTypes extends JavadocTester { checkExit(Exit.OK); checkOutput("p/A.html", true, - "public sealed interface A"); + """ +
    public sealed interface <\ + span class="element-name type-name-label">A"""); checkOutput("p/B.html", true, - "public non-sealed interface B"); + """ +
    public non-sealed interface <\ + span class="element-name type-name-label">B"""); } @Test @@ -132,10 +144,14 @@ public class TestSealedTypes extends JavadocTester { checkExit(Exit.OK); checkOutput("p/A.html", true, - "public sealed class A"); + """ +
    public sealed class <\ + span class="element-name type-name-label">A"""); checkOutput("p/B.html", true, - "public abstract sealed class B"); + """ +
    public abstract sealed class\ + B"""); } @Test @@ -152,10 +168,14 @@ public class TestSealedTypes extends JavadocTester { checkExit(Exit.OK); checkOutput("p/A.html", true, - "public sealed interface A"); + """ +
    public sealed interface A"""); checkOutput("p/B.html", true, - "public sealed interface B"); + """ +
    public sealed interface B"""); } @Test @@ -173,9 +193,11 @@ public class TestSealedTypes extends JavadocTester { checkExit(Exit.OK); checkOutput("p/A.html", true, - "
    public sealed class A\n"
    -                + "extends java.lang.Object\n"
    -                + "permits B
    "); + """ +
    public sealed class <\ + span class="element-name type-name-label">A + extends java.lang.Object + permits B
    """); } @Test @@ -195,11 +217,13 @@ public class TestSealedTypes extends JavadocTester { checkExit(Exit.OK); checkOutput("p/A.html", true, - "
    public sealed class A\n"
    -                + "extends java.lang.Object\n"
    -                + "permits B, "
    -                + "C, "
    -                + "D
    "); + """ +
    public sealed class <\ + span class="element-name type-name-label">A + extends java.lang.Object + permits B, C, D
    """); } @Test @@ -219,11 +243,13 @@ public class TestSealedTypes extends JavadocTester { checkExit(Exit.OK); checkOutput("p/A.html", true, - "
    public sealed class A\n"
    -                + "extends java.lang.Object\n"
    -                + "permits B, "
    -                + "C "
    -                + "(not exhaustive)
    "); + """ +
    public sealed class <\ + span class="element-name type-name-label">A + extends java.lang.Object + permits B, C (not exhaustive)
    """); } // @Test // javac incorrectly rejects the source @@ -244,10 +270,13 @@ public class TestSealedTypes extends JavadocTester { checkExit(Exit.OK); checkOutput("p/A.html", true, - "
    public sealed class A\n"
    -                + "extends java.lang.Object\n"
    -                + "permits B, "
    -                + "C, p.D
    "); + """ +
    public sealed class <\ + span class="element-name type-name-label">A + extends java.lang.Object + permits A.B, A.C, A.D
    """); } @Test @@ -269,11 +298,13 @@ public class TestSealedTypes extends JavadocTester { checkExit(Exit.OK); checkOutput("p/A.html", true, - "
    public sealed class A\n"
    -                + "extends java.lang.Object\n"
    -                + "permits B, "
    -                + "C "
    -                + "(not exhaustive)
    "); + """ +
    public sealed class A + extends java.lang.Object + permits B, C (not exhaustive)
    """); } @Test @@ -294,11 +325,13 @@ public class TestSealedTypes extends JavadocTester { checkExit(Exit.OK); checkOutput("p/A.html", true, - "
    public sealed class A\n"
    -                + "extends java.lang.Object\n"
    -                + "permits B, "
    -                + "C, "
    -                + "D
    "); + """ +
    public sealed class <\ + span class="element-name type-name-label">A + extends java.lang.Object + permits B, C, D
    """); } @Test @@ -319,10 +352,12 @@ public class TestSealedTypes extends JavadocTester { checkExit(Exit.OK); checkOutput("p/A.html", true, - "
    public sealed class A\n"
    -                + "extends java.lang.Object\n"
    -                + "permits A.B, "
    -                + "A.C, "
    -                + "A.D
    "); + """ +
    public sealed class <\ + span class="element-name type-name-label">A + extends java.lang.Object + permits A.B, A.C, A.D
    """); } } diff --git a/test/langtools/jdk/javadoc/doclet/testSerializedFormWithClassFile/TestSerializedFormWithClassFile.java b/test/langtools/jdk/javadoc/doclet/testSerializedFormWithClassFile/TestSerializedFormWithClassFile.java index 14cc5c251dd..cadaabf1906 100644 --- a/test/langtools/jdk/javadoc/doclet/testSerializedFormWithClassFile/TestSerializedFormWithClassFile.java +++ b/test/langtools/jdk/javadoc/doclet/testSerializedFormWithClassFile/TestSerializedFormWithClassFile.java @@ -76,7 +76,7 @@ public class TestSerializedFormWithClassFile extends JavadocTester { checkOutput("serialized-form.html", true, """
    public void readObject&\ + lass="return-type">void readObject&\ #8203;(java.io.ObjectInputStream arg0) throws java.lang.ClassNotFoundException, java.io.IOException
    diff --git a/test/langtools/jdk/javadoc/doclet/testStylesheet/TestStylesheet.java b/test/langtools/jdk/javadoc/doclet/testStylesheet/TestStylesheet.java index f6f636cda7a..ce2965f555b 100644 --- a/test/langtools/jdk/javadoc/doclet/testStylesheet/TestStylesheet.java +++ b/test/langtools/jdk/javadoc/doclet/testStylesheet/TestStylesheet.java @@ -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", diff --git a/test/langtools/jdk/javadoc/doclet/testSummaryTag/TestSummaryTag.java b/test/langtools/jdk/javadoc/doclet/testSummaryTag/TestSummaryTag.java index 6f0ec9cff85..add9c5d905d 100644 --- a/test/langtools/jdk/javadoc/doclet/testSummaryTag/TestSummaryTag.java +++ b/test/langtools/jdk/javadoc/doclet/testSummaryTag/TestSummaryTag.java @@ -93,7 +93,7 @@ public class TestSummaryTag extends JavadocTester {

    m3

    public void m3()
    + lass="return-type">void m3()
    First sentence some text maybe second sentence.
    """ diff --git a/test/langtools/jdk/javadoc/doclet/testThrows/TestThrows.java b/test/langtools/jdk/javadoc/doclet/testThrows/TestThrows.java index 4f116ab7ce9..57e88d60c9e 100644 --- a/test/langtools/jdk/javadoc/doclet/testThrows/TestThrows.java +++ b/test/langtools/jdk/javadoc/doclet/testThrows/TestThrows.java @@ -76,7 +76,7 @@ """
    <T extends java\ .lang.Throwable> void m() + an class="element-name">m() throws T, java.lang.Exception
    """, diff --git a/test/langtools/jdk/javadoc/doclet/testTypeAnnotations/TestTypeAnnotations.java b/test/langtools/jdk/javadoc/doclet/testTypeAnnotations/TestTypeAnnotations.java index cd1349f88cd..14bdce240ae 100644 --- a/test/langtools/jdk/javadoc/doclet/testTypeAnnotations/TestTypeAnnotations.java +++ b/test/langtools/jdk/javadoc/doclet/testTypeAnnotations/TestTypeAnnotations.java @@ -63,7 +63,7 @@ public class TestTypeAnnotations extends JavadocTester { a> java.lang.CharSequence, @ClassExtA ParameterizedInterface<@ClassExtB java.lang.String>
    """); + in typeannos">@ClassExtB java.lang.String>
    """); checkOutput("typeannos/MyInterface.html", true, """ @@ -71,48 +71,49 @@ public class TestTypeAnnotations extends JavadocTester { Parameteriz\ edInterface<@Cla\ ssExtA java.lang.String>, @ClassExtB java.lang.CharSequence"""); + ypeannos">@ClassExtB java.lang.CharSequence
    """); // Test for type annotations on Class Parameters (ClassParameters.java). checkOutput("typeannos/ExtendsBound.html", true, """ - class ExtendsBound<K extends @ClassParamA java.lang.String>"""); + class ExtendsBound<K extend\ + s @ClassParamA ja\ + va.lang.String>"""); checkOutput("typeannos/ExtendsGeneric.html", true, """ -
    class ExtendsGeneric<K extends @ClassParamA Unannotated<@ClassParamB java.lang.String>>""");
    +                    
    class ExtendsGeneric<K extends @ClassParamA Unannotated<@ClassParamB java.lang.String>>"""); checkOutput("typeannos/TwoBounds.html", true, """ -
    class TwoBounds<K extends @ClassParamA java.lang.String,\
    -                    203;V extends @ClassP\
    -                    aramB java.lang.String>""");
    +                    
    class TwoBounds<K extends @ClassParamA java.lang.String,​V extends\ + @ClassParamB jav\ + a.lang.String>"""); checkOutput("typeannos/Complex1.html", true, """ - class Complex1<K extends @ClassParamA java.lang.String & jav\ - a.lang.Runnable>"""); + class Complex1<K extends @ClassParamA java.l\ + ang.String & java.lang.Runnable>"""); checkOutput("typeannos/Complex2.html", true, """ - class Complex2<K extends java.lang.String &\ - @ClassParamB jav\ - a.lang.Runnable>"""); + class Complex2<K extends ja\ + va.lang.String & \ + @ClassParamB java.lang.Runnable>"""); checkOutput("typeannos/ComplexBoth.html", true, """ - class ComplexBoth<K extends @ClassParamA java.lang.String & \ - @ClassParamA java\ - .lang.Runnable>"""); + class ComplexBoth<K extends\ + @ClassParamA jav\ + a.lang.String & @\ + ClassParamA java.lang.Runnable>"""); // 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<@FldA java.lang.String,​@FldB java.lang.String> bothTypeArgs
    """, + class="element-name">bothTypeArgs
    """, """
    @FldA java.lang.String @FldB [] ar\ - ray1Deep
    """, + ="annotation in typeannos">@FldB []
     a\ + rray1Deep""", """
    java.lang.String @FldB [][] array2SecondOld
    """, + ass="element-name">array2SecondOld""", // When JDK-8068737, we should change the order """ @@ -141,7 +142,7 @@ public class TestTypeAnnotations extends JavadocTester { ="annotation in typeannos">@FldC @FldB [] @FldC<\ /a> @FldA [] \ - ;array2Deep"""); + ;array2Deep"""); checkOutput("typeannos/ModifiedScoped.html", true, """ @@ -152,14 +153,14 @@ public class TestTypeAnnotations extends JavadocTester { ;@FldA java.lang.String,\ ​@FldB java.lang.S\ tring>,​@FldB j\ - ava.lang.String> nestedParameterized""", + ava.lang.String> nestedParameterized""", """
    public final <\ span class="return-type">@Fl\ - dA java.lang.String[][] array2<\ - /div>"""); + dA java.lang.String[][] array2\ +
    """); // Test for type annotations on method return types (MethodReturnType.java). checkOutput("typeannos/MtdDefaultScope.html", true, @@ -167,20 +168,20 @@ public class TestTypeAnnotations extends JavadocTester {
    public <T> @MRtnA java.lang.String&n\ - bsp;method()
    """, + bsp;method()""", // When JDK-8068737 is fixed, we should change the order """
    @MRtnA java.lang.String @MRtnB [] @MRtnA [] array2Deep<\ - /span>()
    """, + on in typeannos">@MRtnA []
     array2Deep\ + ()""", """
    @MRtnA java.lang.String[][] array2()
    """); + lass="element-name">array2()"""); checkOutput("typeannos/MtdModifiedScoped.html", true, """ @@ -191,16 +192,16 @@ public class TestTypeAnnotations extends JavadocTester { terized<@MRtnA j\ ava.lang.String,​@MRt\ nB java.lang.String>,​@MRtnB java.lang.String> ne\ - stedMtdParameterized()"""); + eannos">@MRtnB java.lang.String> n\ + estedMtdParameterized()"""); // Test for type annotations on method type parameters (MethodTypeParameters.java). checkOutput("typeannos/UnscopedUnmodified.html", true, """
    <K extends @MTyParamA java.lang.Stri\ - ng> void methodExtends()
    """, + ng> void methodExtends()""", """
    <K extends <\ @@ -208,14 +209,14 @@ public class TestTypeAnnotations extends JavadocTester { MtdTyParameterized.html" title="class in typeannos">MtdTyParameterized<@MTyParamB java.lang.\ String>> - void nestedExtends()
    """); + void nestedExtends()"""); checkOutput("typeannos/PublicModifiedMethods.html", true, """
    public final <\ span class="type-parameters"><K extends @MTyParamA java.lang.String> - void methodExtends()
    """, + void methodExtends()""", """
    public final <\ @@ -225,45 +226,45 @@ public class TestTypeAnnotations extends JavadocTester { > MtdTyParameterize\ d<@MTyParamB\ java.lang.String>> - void dual()
    """); + void dual()"""); // Test for type annotations on parameters (Parameters.java). checkOutput("typeannos/Parameters.html", true, """
    void unannotated(ParaParameterized<java.\ - lang.String,​java.lang.String> a)
    """, + lass="element-name">unannotated​(ParaParameterized<java\ + .lang.String,​java.lang.String> a)""", """
    void nestedParaParameterized(ParaParameterized<\ - /a><@ParamA ParaParameterized<@ParamA java.lang.String\ - ,​@ParamB java.l\ - ang.String>,​@Par\ - amB java.lang.String> a)
    """, + lass="element-name">nestedParaParameterized​(ParaParameterized\ + <@ParamA ParaParameterized<<\ + a href="ParamA.html" title="annotation in typeannos">@ParamA java.lang.Strin\ + g,​@ParamB java.\ + lang.String>,​@Pa\ + ramB java.lang.String> a)""", // When JDK-8068737 is fixed, we should change the order """
    void array2Deep(@ParamA java.lang.String @ParamB [] @ParamA [] a)
    """); + lass="element-name">array2Deep​(@ParamA java.lang.String @ParamB [] @ParamA [] a)"""); // Test for type annotations on throws (Throws.java). checkOutput("typeannos/ThrDefaultUnmodified.html", true, """ -
    void oneException() +
    void oneException() throws @ThrA java.lang.Exception
    """, """
    void twoExceptions() + lass="element-name">twoExceptions() throws @ThrA java.lang.RuntimeException, @ThrA java.lang.Exception
    """); @@ -271,28 +272,28 @@ public class TestTypeAnnotations extends JavadocTester { checkOutput("typeannos/ThrPublicModified.html", true, """
    public final <\ - span class="return-type">void oneException\ - (java.lang.String a) + span class="return-type">void oneException\ + ​(java.lang.String a) throws @ThrA java.lang.Exception
    """, """
    public final <\ - span class="return-type">void twoException\ - s(java.lang.String a) + span class="return-type">void twoExceptions​(java.lang.String a) throws @ThrA java.lang.RuntimeException, @ThrA java.lang.Exception
    """); checkOutput("typeannos/ThrWithValue.html", true, """ -
    void oneException() +
    void oneException() throws @ThrB("m") java.lang.Exception
    """, """
    void twoExceptions() + lass="element-name">twoExceptions() throws @ThrB("m") java.lang.RuntimeException, @ThrA java.lang.Exception
    """); @@ -304,104 +305,104 @@ public class TestTypeAnnotations extends JavadocTester { @TyParaA V extends @TyParaA java.lang.Stri\ ng> - void secondAnnotated()
    """ + void secondAnnotated()
    """ ); // Test for type annotations on wildcard type (Wildcards.java). checkOutput("typeannos/BoundTest.html", true, """
    void wcExtends(MyList<? extends @WldA java.lang.String> l)""", + lass="element-name">wcExtends​(MyList<? extends @WldA java.lang.String> l)<\ + /div>""", """
    MyList<? super @WldA java.lang.String> returnWcSuper()
    """); + tion in typeannos">@WldA java.lang.String> returnWcSuper()
    """); checkOutput("typeannos/BoundWithValue.html", true, """
    void wcSuper(MyList<? super @WldB("m") java.lang.String> l)<\ - /div>""", + lass="element-name">wcSuper​(MyList<? super @WldB("m") java.lang.String> l)\ +
    """, """
    MyList<? extends @WldB("m") java.lang.String> returnWcExtends()
    """); + ="element-name">returnWcExtends()"""); checkOutput("typeannos/SelfTest.html", true, """
    MyList<@WldA ?> returnWcExtends\ - ()
    """, + typeannos">@WldA ?> returnWcExtends\ + ()""", """
    MyList<@WldA ? extends @WldA MyList<@WldB("m") ?>>&\ - nbsp;complex()
    """); + nbsp;complex()"""); checkOutput("typeannos/SelfWithValue.html", true, """
    MyList<@WldB("m") ?> returnWcEx\ - tends()
    """, + typeannos">@WldB("m") ?> returnWcExtends()""", """
    MyList<@WldB("m") ? extends MyList<@WldB\ - ("m") ? super java.lang.String>> com\ - plex()
    """); + ("m") ? super java.lang.String>>
     complex()"""); // Test for receiver annotations (Receivers.java). checkOutput("typeannos/DefaultUnmodified.html", true, """
    void withException(@RcvrA DefaultUnmodified&n\ - bsp;this) + lass="element-name">withException​(@RcvrA DefaultUnmodified&\ + nbsp;this) throws java.lang.Exception
    """, """
    java.lang.String&\ - nbsp;nonVoid(@RcvrA @RcvrB("m") DefaultUnmodified t\ - his)
    """, + nbsp;nonVoid(@RcvrA @RcvrB("m") DefaultUnmodified this)""", """
    <T extends java.l\ ang.Runnable> void accept(@RcvrA DefaultUnmodified this\ - , + ass="element-name">accept(@RcvrA DefaultUnmodified thi\ + s, T r) throws java.lang.Exception
    """); checkOutput("typeannos/PublicModified.html", true, """
    public final <\ - span class="return-type">java.lang.String \ - nonVoid(@RcvrA PublicModified this)
    """, + span class="return-type">java.lang.String
     nonVoid\ + (@RcvrA PublicModified this)""", """
    public final <\ span class="type-parameters"><T extends java.lang.Runnable> void accept\ - ​(void accept​\ + (@RcvrA PublicModified this, T r) throws java.lang.Exception
    """); @@ -410,42 +411,44 @@ public class TestTypeAnnotations extends JavadocTester { """
    <T extends java.l\ ang.Runnable> void accept(@RcvrB("m") WithValue this, + ass="element-name">accept(@RcvrB("m") WithValue this, T r) throws java.lang.Exception
    """); checkOutput("typeannos/WithFinal.html", true, """
    java.lang.String&\ - nbsp;nonVoid(@RcvrB("m") WithFinal afield)
    """); + nbsp;nonVoid(@RcvrB("m") WithFinal afield)"""); checkOutput("typeannos/WithBody.html", true, """
    void field(@RcvrA WithBody this)<\ - /div>"""); + lass="element-name">field​(@RcvrA WithBody this)\ +
    """); checkOutput("typeannos/Generic2.html", true, """
    void test2(@RcvrA Generic2<X> this\ - )
    """); + lass="element-name">test2
    (@RcvrA Generic2<X> thi\ + s)"""); // Test for repeated type annotations (RepeatedAnnotations.java). checkOutput("typeannos/RepeatingAtClassLevel.html", true, """ -
    @RepTypeA @RepTypeA
    +                    
    @RepTypeA @RepTypeA @RepTypeB @RepTypeB - class RepeatingAtClassLevel - extends java.lang.Object
    """); + class RepeatingAtClassLevel + extends java.lang.Object"""); // @ignore 8146008 // checkOutput("typeannos/RepeatingAtClassLevel2.html", true, @@ -476,7 +479,7 @@ public class TestTypeAnnotations extends JavadocTester { @RepConstructorB<\ /a> @RepConstruct\ orB - RepeatingOnConstructor()""", + RepeatingOnConstructor()""", """
    @RepConstructorB<\ /a> @RepConstruct\ orB - RepeatingOnConstructor(int i, + RepeatingOnConstructor(int i, int j)
    """, """ @@ -495,17 +498,17 @@ public class TestTypeAnnotations extends JavadocTester { @RepAllContextsB<\ /a> @RepAllContex\ tsB - RepeatingOnConstructor(int i, + RepeatingOnConstructor(int i, int j, int k)""", """ -
    RepeatingOnConstructor(@RepParameterA @RepParameterA @RepParameterB @RepParameterB +
    RepeatingOnConstructor&#\ + 8203;(@RepParameterA @RepParameterA @RepParameterB @RepParameterB java.lang.String parameter, @RepParameterA \ @RepParameterA \ @@ -593,9 +596,13 @@ public class TestTypeAnnotations extends JavadocTester { """, """ -
    @RepFieldA @RepFieldA - @RepFieldB @RepFieldB - java.lang.Integer i1
    """, +
    @RepFieldA @RepFieldA + @RepFieldB @RepFieldB + java.lang.Integer i1
    """, """
    @RepTypeUseA @RepTypeUseB @RepTypeUseB java.lang.Integer i2
    """, + s="element-name">i2
    """, """
    @RepTypeUseA @RepTypeUseA @RepTypeUseB \ - @RepTypeUseB java.lang.Integer i3 java.lang.Integer i3
    """, """ @@ -630,7 +637,7 @@ public class TestTypeAnnotations extends JavadocTester { ation in typeannos">@RepAllContextsA @RepAllContextsB @RepAllContextsB java.lang.Integer
     <\ - span class="member-name">i4
    """, + span class="element-name">i4""", """ """); + ="annotation in typeannos">@RepTypeUseB [] sa"""); checkOutput("typeannos/RepeatingOnMethod.html", true, """ @@ -695,14 +702,14 @@ public class TestTypeAnnotations extends JavadocTester { f="RepMethodA.html" title="annotation in typeannos">@RepMethodA @RepMethodB @RepMethodB - java.lang.String test1()""", + java.lang.String test1()""", """ @RepTypeUseA @RepTypeUseA @RepTypeUseB @RepTypeUseB java.lang.String\ -  test2()""", +  test2()""", """ @RepMethodA @RepTypeUseA @RepTypeUseA @RepTypeUseB \ - @RepTypeUseB java.lang.String test3 java.lang.String test3()""", """ @@ -728,10 +735,10 @@ public class TestTypeAnnotations extends JavadocTester { ation in typeannos">@RepAllContextsA @RepAllContextsB @RepAllContextsB java.lang.String test4()""", + pan class="element-name">test4()""", """ - java.lang.String test5 test5(@\ RepTypeUseA @RepT\ ypeUseA @RepTypeU\ @@ -742,22 +749,15 @@ public class TestTypeAnnotations extends JavadocTester { @RepParameterB \ @RepParameterB java.lang.String parameter, - @RepParameterA \ - @RepParameterA \ - @RepParameterB \ - @RepParameterB - java.lang.String @Rep\ - TypeUseA @RepType\ - UseA @RepTypeUseB\ - @RepTypeUseB\ - ... vararg)"""); + @RepParameterA @RepParameterA @RepParameterB @RepParameterB + java.lang.String @RepTypeUseA @RepTypeUseA @RepTypeUseB @RepTypeUseB ... vararg)"""); checkOutput("typeannos/RepeatingOnTypeParametersBoundsTypeArgumentsOnMethod.html", true, """ (package private) <T> java.lang.String -
    genericMethod​(T t)""", +
    genericMethod​(T t)""", """ (package private) <T> java.lang.String
    @@ -776,17 +776,17 @@ public class TestTypeAnnotations extends JavadocTester { ">test()""", """ - java.lang.String test(@RepTypeUseA @RepTypeUseA @RepTypeUseB @RepTypeUseB RepeatingOnTypeParametersBoundsTypeArgumentsOn\ - Method<@RepTypeUse\ - A @RepTypeUseA @RepTypeUseB @RepTypeUseB T>&\ - nbsp;this)"""); + java.lang.String test(@RepTypeUseA @RepTypeUseA @RepTypeUseB @RepTypeUseB RepeatingOnTypeParametersBoundsTypeArgumentsOnMethod&\ + lt;@RepTypeUseA <\ + a href="RepTypeUseA.html" title="annotation in typeannos">@RepTypeUseA @RepTypeUseB @RepTypeUseB T> th\ + is)"""); checkOutput("typeannos/RepeatingOnVoidMethodDeclaration.html", true, """ @@ -794,6 +794,6 @@ public class TestTypeAnnotations extends JavadocTester { f="RepMethodA.html" title="annotation in typeannos">@RepMethodA @RepMethodB @RepMethodB - void test()"""); + void test()"""); } } diff --git a/test/langtools/jdk/javadoc/doclet/testTypeParams/TestTypeParameters.java b/test/langtools/jdk/javadoc/doclet/testTypeParams/TestTypeParameters.java index 44a69e62a65..ca7cce43862 100644 --- a/test/langtools/jdk/javadoc/doclet/testTypeParams/TestTypeParameters.java +++ b/test/langtools/jdk/javadoc/doclet/testTypeParams/TestTypeParameters.java @@ -88,10 +88,10 @@ public class TestTypeParameters extends JavadocTester { checkExit(Exit.OK); checkOutput("pkg/ClassUseTest3.html", true, - """ - public class ClassUseTest3<\ - /a><T extends ParamTest2&l\ - t;java.util.List<? extends Foo4&\ - gt;>>"""); + """ + public class ClassUseTest3<T extends ParamTest2<java.util.List<? extends Foo4>>>"""); } }