summaryrefslogtreecommitdiff
path: root/java/openjdk6/files/icedtea/openjdk/6851834-restructure.patch
diff options
context:
space:
mode:
authorJung-uk Kim <jkim@FreeBSD.org>2013-07-16 21:07:25 +0000
committerJung-uk Kim <jkim@FreeBSD.org>2013-07-16 21:07:25 +0000
commitab26ef78141c6d3e19e8011b7d5e5570b4e53f59 (patch)
tree2f06d03438c702d537ce93a79f7930297e601de0 /java/openjdk6/files/icedtea/openjdk/6851834-restructure.patch
parentHostDB is a system for generating internal DNS zones, (diff)
Add multiple security patches and improvements from IcedTea6 1.12.6.
http://mail.openjdk.java.net/pipermail/distro-pkg-dev/2013-July/023941.html Obtained from: IcedTea Project PR: ports/180541
Notes
Notes: svn path=/head/; revision=323126
Diffstat (limited to 'java/openjdk6/files/icedtea/openjdk/6851834-restructure.patch')
-rw-r--r--java/openjdk6/files/icedtea/openjdk/6851834-restructure.patch26853
1 files changed, 26853 insertions, 0 deletions
diff --git a/java/openjdk6/files/icedtea/openjdk/6851834-restructure.patch b/java/openjdk6/files/icedtea/openjdk/6851834-restructure.patch
new file mode 100644
index 000000000000..66011ee8189e
--- /dev/null
+++ b/java/openjdk6/files/icedtea/openjdk/6851834-restructure.patch
@@ -0,0 +1,26853 @@
+# HG changeset patch
+# User andrew
+# Date 1371730814 18000
+# Node ID 5761891cfee48bc9382dd68e5e1bf164cff9bfbf
+# Parent 741c190d6989de395cb95895dc0320415af6b131
+# PLEASE SEE the other 6851834 patch which handles renames more generally
+6851834: Javadoc doclet needs a structured approach to generate the output HTML.
+Reviewed-by: jjg
+
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/AbstractExecutableMemberWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/AbstractExecutableMemberWriter.java
+--- langtools/src/share/classes/com/sun/tools/doclets/formats/html/AbstractExecutableMemberWriter.java
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/AbstractExecutableMemberWriter.java
+@@ -26,12 +26,16 @@
+ package com.sun.tools.doclets.formats.html;
+
+ import com.sun.javadoc.*;
++import com.sun.tools.doclets.formats.html.markup.*;
++import com.sun.tools.doclets.internal.toolkit.*;
++import com.sun.tools.doclets.internal.toolkit.util.*;
+
+ /**
+ * Print method and constructor info.
+ *
+ * @author Robert Field
+ * @author Atul M Dambalkar
++ * @author Bhavesh Patel (Modified)
+ */
+ public abstract class AbstractExecutableMemberWriter extends AbstractMemberWriter {
+
+@@ -45,82 +49,111 @@
+ }
+
+ /**
+- * Write the type parameters for the executable member.
++ * Add the type parameters for the executable member.
+ *
+ * @param member the member to write type parameters for.
++ * @param htmltree the content tree to which the parameters will be added.
+ * @return the display length required to write this information.
+ */
+- protected int writeTypeParameters(ExecutableMemberDoc member) {
++ protected int addTypeParameters(ExecutableMemberDoc member, Content htmltree) {
+ LinkInfoImpl linkInfo = new LinkInfoImpl(
+ LinkInfoImpl.CONTEXT_MEMBER_TYPE_PARAMS, member, false);
+ String typeParameters = writer.getTypeParameterLinks(linkInfo);
+ if (linkInfo.displayLength > 0) {
+- writer.print(typeParameters + " ");
++ Content linkContent = new RawHtml(typeParameters);
++ htmltree.addContent(linkContent);
++ htmltree.addContent(writer.getSpace());
+ writer.displayLength += linkInfo.displayLength + 1;
+ }
+ return linkInfo.displayLength;
+ }
+
+- protected void writeSignature(ExecutableMemberDoc member) {
+- writer.displayLength = 0;
+- writer.pre();
+- writer.writeAnnotationInfo(member);
+- printModifiers(member);
+- writeTypeParameters(member);
+- if (configuration().linksource &&
+- member.position().line() != classdoc.position().line()) {
+- writer.printSrcLink(member, member.name());
+- } else {
+- strong(member.name());
+- }
+- writeParameters(member);
+- writeExceptions(member);
+- writer.preEnd();
++ /**
++ * {@inheritDoc}
++ */
++ protected Content getDeprecatedLink(ProgramElementDoc member) {
++ ExecutableMemberDoc emd = (ExecutableMemberDoc)member;
++ return writer.getDocLink(LinkInfoImpl.CONTEXT_MEMBER, (MemberDoc) emd,
++ emd.qualifiedName() + emd.flatSignature());
+ }
+
+- protected void writeDeprecatedLink(ProgramElementDoc member) {
++ /**
++ * Add the summary link for the member.
++ *
++ * @param context the id of the context where the link will be printed
++ * @param classDoc the classDoc that we should link to
++ * @param member the member being linked to
++ * @param tdSummary the content tree to which the link will be added
++ */
++ protected void addSummaryLink(int context, ClassDoc cd, ProgramElementDoc member,
++ Content tdSummary) {
+ ExecutableMemberDoc emd = (ExecutableMemberDoc)member;
+- writer.printDocLink(LinkInfoImpl.CONTEXT_MEMBER, (MemberDoc) emd,
+- emd.qualifiedName() + emd.flatSignature(), false);
++ String name = emd.name();
++ Content strong = HtmlTree.STRONG(new RawHtml(
++ writer.getDocLink(context, cd, (MemberDoc) emd,
++ name, false)));
++ Content code = HtmlTree.CODE(strong);
++ writer.displayLength = name.length();
++ addParameters(emd, false, code);
++ tdSummary.addContent(code);
+ }
+
+- protected void writeSummaryLink(int context, ClassDoc cd, ProgramElementDoc member) {
+- ExecutableMemberDoc emd = (ExecutableMemberDoc)member;
+- String name = emd.name();
+- writer.strong();
+- writer.printDocLink(context, cd, (MemberDoc) emd,
+- name, false);
+- writer.strongEnd();
+- writer.displayLength = name.length();
+- writeParameters(emd, false);
++ /**
++ * Add the inherited summary link for the member.
++ *
++ * @param classDoc the classDoc that we should link to
++ * @param member the member being linked to
++ * @param linksTree the content tree to which the link will be added
++ */
++ protected void addInheritedSummaryLink(ClassDoc cd,
++ ProgramElementDoc member, Content linksTree) {
++ linksTree.addContent(new RawHtml(
++ writer.getDocLink(LinkInfoImpl.CONTEXT_MEMBER, cd, (MemberDoc) member,
++ member.name(), false)));
+ }
+
+- protected void writeInheritedSummaryLink(ClassDoc cd,
+- ProgramElementDoc member) {
+- writer.printDocLink(LinkInfoImpl.CONTEXT_MEMBER, cd, (MemberDoc) member,
+- member.name(), false);
+- }
+-
+- protected void writeParam(ExecutableMemberDoc member, Parameter param,
+- boolean isVarArg) {
++ /**
++ * Add the parameter for the executable member.
++ *
++ * @param member the member to write parameter for.
++ * @param param the parameter that needs to be written.
++ * @param isVarArg true if this is a link to var arg.
++ * @param tree the content tree to which the parameter information will be added.
++ */
++ protected void addParam(ExecutableMemberDoc member, Parameter param,
++ boolean isVarArg, Content tree) {
+ if (param.type() != null) {
+- writer.printLink(new LinkInfoImpl(
+- LinkInfoImpl.CONTEXT_EXECUTABLE_MEMBER_PARAM, param.type(),
+- isVarArg));
++ Content link = new RawHtml(writer.getLink(new LinkInfoImpl(
++ LinkInfoImpl.CONTEXT_EXECUTABLE_MEMBER_PARAM, param.type(),
++ isVarArg)));
++ tree.addContent(link);
+ }
+ if(param.name().length() > 0) {
+- writer.space();
+- writer.print(param.name());
++ tree.addContent(writer.getSpace());
++ tree.addContent(param.name());
+ }
+ }
+
+- protected void writeParameters(ExecutableMemberDoc member) {
+- writeParameters(member, true);
++ /**
++ * Add all the parameters for the executable member.
++ *
++ * @param member the member to write parameters for.
++ * @param tree the content tree to which the parameters information will be added.
++ */
++ protected void addParameters(ExecutableMemberDoc member, Content htmltree) {
++ addParameters(member, true, htmltree);
+ }
+
+- protected void writeParameters(ExecutableMemberDoc member,
+- boolean includeAnnotations) {
+- print('(');
++ /**
++ * Add all the parameters for the executable member.
++ *
++ * @param member the member to write parameters for.
++ * @param includeAnnotations true if annotation information needs to be added.
++ * @param tree the content tree to which the parameters information will be added.
++ */
++ protected void addParameters(ExecutableMemberDoc member,
++ boolean includeAnnotations, Content htmltree) {
++ htmltree.addContent("(");
+ Parameter[] params = member.parameters();
+ String indent = makeSpace(writer.displayLength);
+ if (configuration().linksource) {
+@@ -132,58 +165,70 @@
+ Parameter param = params[paramstart];
+ if (!param.name().startsWith("this$")) {
+ if (includeAnnotations) {
+- boolean foundAnnotations =
+- writer.writeAnnotationInfo(indent.length(), member, param);
+- if (foundAnnotations) {
+- writer.println();
+- writer.print(indent);
++ boolean foundAnnotations =
++ writer.addAnnotationInfo(indent.length(),
++ member, param, htmltree);
++ if (foundAnnotations) {
++ htmltree.addContent(DocletConstants.NL);
++ htmltree.addContent(indent);
+ }
+ }
+- writeParam(member, param,
+- (paramstart == params.length - 1) && member.isVarArgs());
++ addParam(member, param,
++ (paramstart == params.length - 1) && member.isVarArgs(), htmltree);
+ break;
+ }
+ }
+
+ for (int i = paramstart + 1; i < params.length; i++) {
+- writer.print(',');
+- writer.println();
+- writer.print(indent);
++ htmltree.addContent(",");
++ htmltree.addContent(DocletConstants.NL);
++ htmltree.addContent(indent);
+ if (includeAnnotations) {
+ boolean foundAnnotations =
+- writer.writeAnnotationInfo(indent.length(), member, params[i]);
++ writer.addAnnotationInfo(indent.length(), member, params[i],
++ htmltree);
+ if (foundAnnotations) {
+- writer.println();
+- writer.print(indent);
++ htmltree.addContent(DocletConstants.NL);
++ htmltree.addContent(indent);
+ }
+ }
+- writeParam(member, params[i], (i == params.length - 1) && member.isVarArgs());
++ addParam(member, params[i], (i == params.length - 1) && member.isVarArgs(),
++ htmltree);
+ }
+- writer.print(')');
++ htmltree.addContent(")");
+ }
+
+- protected void writeExceptions(ExecutableMemberDoc member) {
++ /**
++ * Add exceptions for the executable member.
++ *
++ * @param member the member to write exceptions for.
++ * @param htmltree the content tree to which the exceptions information will be added.
++ */
++ protected void addExceptions(ExecutableMemberDoc member, Content htmltree) {
+ Type[] exceptions = member.thrownExceptionTypes();
+ if(exceptions.length > 0) {
+ LinkInfoImpl memberTypeParam = new LinkInfoImpl(
+- LinkInfoImpl.CONTEXT_MEMBER, member, false);
++ LinkInfoImpl.CONTEXT_MEMBER, member, false);
+ int retlen = getReturnTypeLength(member);
+ writer.getTypeParameterLinks(memberTypeParam);
+ retlen += memberTypeParam.displayLength == 0 ?
+ 0 : memberTypeParam.displayLength + 1;
+ String indent = makeSpace(modifierString(member).length() +
+- member.name().length() + retlen - 4);
+- writer.println();
+- writer.print(indent);
+- writer.print("throws ");
++ member.name().length() + retlen - 4);
++ htmltree.addContent(DocletConstants.NL);
++ htmltree.addContent(indent);
++ htmltree.addContent("throws ");
+ indent += " ";
+- writer.printLink(new LinkInfoImpl(
+- LinkInfoImpl.CONTEXT_MEMBER, exceptions[0]));
++ Content link = new RawHtml(writer.getLink(new LinkInfoImpl(
++ LinkInfoImpl.CONTEXT_MEMBER, exceptions[0])));
++ htmltree.addContent(link);
+ for(int i = 1; i < exceptions.length; i++) {
+- writer.println(",");
+- writer.print(indent);
+- writer.printLink(new LinkInfoImpl(
+- LinkInfoImpl.CONTEXT_MEMBER, exceptions[i]));
++ htmltree.addContent(",");
++ htmltree.addContent(DocletConstants.NL);
++ htmltree.addContent(indent);
++ Content exceptionLink = new RawHtml(writer.getLink(new LinkInfoImpl(
++ LinkInfoImpl.CONTEXT_MEMBER, exceptions[i])));
++ htmltree.addContent(exceptionLink);
+ }
+ }
+ }
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/AbstractIndexWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/AbstractIndexWriter.java
+--- langtools/src/share/classes/com/sun/tools/doclets/formats/html/AbstractIndexWriter.java
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/AbstractIndexWriter.java
+@@ -30,6 +30,8 @@
+
+ import com.sun.javadoc.*;
+ import com.sun.tools.doclets.internal.toolkit.util.*;
++import com.sun.tools.doclets.formats.html.markup.*;
++import com.sun.tools.doclets.internal.toolkit.*;
+
+ /**
+ * Generate Index for all the Member Names with Indexing in
+@@ -39,6 +41,7 @@
+ *
+ * @see IndexBuilder
+ * @author Atul M Dambalkar
++ * @author Bhavesh Patel (Modified)
+ */
+ public class AbstractIndexWriter extends HtmlDocletWriter {
+
+@@ -78,175 +81,187 @@
+ }
+
+ /**
+- * Print the text "Index" in strong format in the navigation bar.
++ * Get the index label for navigation bar.
++ *
++ * @return a content tree for the tree label
+ */
+- protected void navLinkIndex() {
+- navCellRevStart();
+- fontStyle("NavBarFont1Rev");
+- strongText("doclet.Index");
+- fontEnd();
+- navCellEnd();
++ protected Content getNavLinkIndex() {
++ Content li = HtmlTree.LI(HtmlStyle.navBarCell1Rev, indexLabel);
++ return li;
+ }
+
+ /**
+- * Generate the member information for the unicode character along with the
++ * Add the member information for the unicode character along with the
+ * list of the members.
+ *
+- * @param unicode Unicode for which member list information to be generated.
+- * @param memberlist List of members for the unicode character.
++ * @param unicode Unicode for which member list information to be generated
++ * @param memberlist List of members for the unicode character
++ * @param contentTree the content tree to which the information will be added
+ */
+- protected void generateContents(Character unicode, List memberlist) {
+- anchor("_" + unicode + "_");
+- h2();
+- strong(unicode.toString());
+- h2End();
++ protected void addContents(Character unicode, List<? extends Doc> memberlist,
++ Content contentTree) {
++ contentTree.addContent(getMarkerAnchor("_" + unicode + "_"));
++ Content headContent = new StringContent(unicode.toString());
++ Content heading = HtmlTree.HEADING(HtmlConstants.CONTENT_HEADING, false,
++ HtmlStyle.title, headContent);
++ contentTree.addContent(heading);
+ int memberListSize = memberlist.size();
+ // Display the list only if there are elements to be displayed.
+ if (memberListSize > 0) {
+- dl();
++ Content dl = new HtmlTree(HtmlTag.DL);
+ for (int i = 0; i < memberListSize; i++) {
+ Doc element = memberlist.get(i);
+ if (element instanceof MemberDoc) {
+- printDescription((MemberDoc)element);
++ addDescription((MemberDoc)element, dl);
+ } else if (element instanceof ClassDoc) {
+- printDescription((ClassDoc)element);
++ addDescription((ClassDoc)element, dl);
+ } else if (element instanceof PackageDoc) {
+- printDescription((PackageDoc)element);
++ addDescription((PackageDoc)element, dl);
+ }
+ }
+- dlEnd();
++ contentTree.addContent(dl);
+ }
+- hr();
+- }
+-
+-
+- /**
+- * Print one line summary comment for the package.
+- *
+- * @param pkg PackageDoc passed.
+- */
+- protected void printDescription(PackageDoc pkg) {
+- dt();
+- printPackageLink(pkg, Util.getPackageName(pkg), true);
+- print(" - ");
+- print(configuration.getText("doclet.package") + " " + pkg.name());
+- dtEnd();
+- dd();
+- printSummaryComment(pkg);
+- ddEnd();
+ }
+
+ /**
+- * Print one line summary comment for the class.
++ * Add one line summary comment for the package.
+ *
+- * @param cd ClassDoc passed.
++ * @param pkg the package to be documented
++ * @param dlTree the content tree to which the description will be added
+ */
+- protected void printDescription(ClassDoc cd) {
+- dt();
+- printLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_INDEX, cd, true));
+- print(" - ");
+- printClassInfo(cd);
+- dtEnd();
+- dd();
+- printComment(cd);
+- ddEnd();
++ protected void addDescription(PackageDoc pkg, Content dlTree) {
++ Content link = getPackageLink(pkg, new StringContent(Util.getPackageName(pkg)));
++ Content dt = HtmlTree.DT(link);
++ dt.addContent(" - ");
++ dt.addContent(getResource("doclet.package"));
++ dt.addContent(" " + pkg.name());
++ dlTree.addContent(dt);
++ Content dd = new HtmlTree(HtmlTag.DD);
++ addSummaryComment(pkg, dd);
++ dlTree.addContent(dd);
+ }
+
+ /**
+- * Print the classkind(class, interface, exception, error of the class
++ * Add one line summary comment for the class.
++ *
++ * @param cd the class being documented
++ * @param dlTree the content tree to which the description will be added
++ */
++ protected void addDescription(ClassDoc cd, Content dlTree) {
++ Content link = new RawHtml(
++ getLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_INDEX, cd, true)));
++ Content dt = HtmlTree.DT(link);
++ dt.addContent(" - ");
++ addClassInfo(cd, dt);
++ dlTree.addContent(dt);
++ Content dd = new HtmlTree(HtmlTag.DD);
++ addComment(cd, dd);
++ dlTree.addContent(dd);
++ }
++
++ /**
++ * Add the classkind(class, interface, exception, error of the class
+ * passed.
+ *
+- * @param cd ClassDoc.
++ * @param cd the class being documented
++ * @param contentTree the content tree to which the class info will be added
+ */
+- protected void printClassInfo(ClassDoc cd) {
+- print(configuration.getText("doclet.in",
+- Util.getTypeName(configuration, cd, false),
+- getPackageLink(cd.containingPackage(),
++ protected void addClassInfo(ClassDoc cd, Content contentTree) {
++ contentTree.addContent(getResource("doclet.in",
++ Util.getTypeName(configuration, cd, false),
++ getPackageLinkString(cd.containingPackage(),
+ Util.getPackageName(cd.containingPackage()), false)));
+ }
+
+-
+ /**
+- * Generate Description for Class, Field, Method or Constructor.
+- * for Java.* Packages Class Members.
++ * Add description for Class, Field, Method or Constructor.
+ *
+- * @param member MemberDoc for the member of the Class Kind.
+- * @see com.sun.javadoc.MemberDoc
++ * @param member MemberDoc for the member of the Class Kind
++ * @param dlTree the content tree to which the description will be added
+ */
+- protected void printDescription(MemberDoc member) {
++ protected void addDescription(MemberDoc member, Content dlTree) {
+ String name = (member instanceof ExecutableMemberDoc)?
+ member.name() + ((ExecutableMemberDoc)member).flatSignature() :
+ member.name();
+ if (name.indexOf("<") != -1 || name.indexOf(">") != -1) {
+ name = Util.escapeHtmlChars(name);
+ }
+- ClassDoc containing = member.containingClass();
+- dt();
+- printDocLink(LinkInfoImpl.CONTEXT_INDEX, member, name, true);
+- println(" - ");
+- printMemberDesc(member);
+- println();
+- dtEnd();
+- dd();
+- printComment(member);
+- ddEnd();
+- println();
++ Content span = HtmlTree.SPAN(HtmlStyle.strong,
++ getDocLink(LinkInfoImpl.CONTEXT_INDEX, member, name));
++ Content dt = HtmlTree.DT(span);
++ dt.addContent(" - ");
++ addMemberDesc(member, dt);
++ dlTree.addContent(dt);
++ Content dd = new HtmlTree(HtmlTag.DD);
++ addComment(member, dd);
++ dlTree.addContent(dd);
+ }
+
+-
+ /**
+- * Print comment for each element in the index. If the element is deprecated
++ * Add comment for each element in the index. If the element is deprecated
+ * and it has a @deprecated tag, use that comment. Else if the containing
+ * class for this element is deprecated, then add the word "Deprecated." at
+ * the start and then print the normal comment.
+ *
+- * @param element Index element.
++ * @param element Index element
++ * @param contentTree the content tree to which the comment will be added
+ */
+- protected void printComment(ProgramElementDoc element) {
++ protected void addComment(ProgramElementDoc element, Content contentTree) {
+ Tag[] tags;
++ Content span = HtmlTree.SPAN(HtmlStyle.strong, deprecatedPhrase);
++ HtmlTree div = new HtmlTree(HtmlTag.DIV);
++ div.addStyle(HtmlStyle.block);
+ if (Util.isDeprecated(element)) {
+- strongText("doclet.Deprecated"); space();
++ div.addContent(span);
+ if ((tags = element.tags("deprecated")).length > 0)
+- printInlineDeprecatedComment(element, tags[0]);
++ addInlineDeprecatedComment(element, tags[0], div);
++ contentTree.addContent(div);
+ } else {
+ ClassDoc cont = element.containingClass();
+ while (cont != null) {
+ if (Util.isDeprecated(cont)) {
+- strongText("doclet.Deprecated"); space();
++ div.addContent(span);
++ contentTree.addContent(div);
+ break;
+ }
+ cont = cont.containingClass();
+ }
+- printSummaryComment(element);
++ addSummaryComment(element, contentTree);
+ }
+ }
+
+ /**
+- * Print description about the Static Varible/Method/Constructor for a
++ * Add description about the Static Varible/Method/Constructor for a
+ * member.
+ *
+- * @param member MemberDoc for the member within the Class Kind.
+- * @see com.sun.javadoc.MemberDoc
++ * @param member MemberDoc for the member within the Class Kind
++ * @param contentTree the content tree to which the member description will be added
+ */
+- protected void printMemberDesc(MemberDoc member) {
++ protected void addMemberDesc(MemberDoc member, Content contentTree) {
+ ClassDoc containing = member.containingClass();
+- String classdesc = Util.getTypeName(configuration, containing, true) + " " +
+- getPreQualifiedClassLink(LinkInfoImpl.CONTEXT_INDEX, containing,
+- false);
++ String classdesc = Util.getTypeName(
++ configuration, containing, true) + " ";
+ if (member.isField()) {
+ if (member.isStatic()) {
+- printText("doclet.Static_variable_in", classdesc);
++ contentTree.addContent(
++ getResource("doclet.Static_variable_in", classdesc));
+ } else {
+- printText("doclet.Variable_in", classdesc);
++ contentTree.addContent(
++ getResource("doclet.Variable_in", classdesc));
+ }
+ } else if (member.isConstructor()) {
+- printText("doclet.Constructor_for", classdesc);
++ contentTree.addContent(
++ getResource("doclet.Constructor_for", classdesc));
+ } else if (member.isMethod()) {
+ if (member.isStatic()) {
+- printText("doclet.Static_method_in", classdesc);
++ contentTree.addContent(
++ getResource("doclet.Static_method_in", classdesc));
+ } else {
+- printText("doclet.Method_in", classdesc);
++ contentTree.addContent(
++ getResource("doclet.Method_in", classdesc));
+ }
+ }
++ addPreQualifiedClassLink(LinkInfoImpl.CONTEXT_INDEX, containing,
++ false, contentTree);
+ }
+ }
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/AbstractMemberWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/AbstractMemberWriter.java
+--- langtools/src/share/classes/com/sun/tools/doclets/formats/html/AbstractMemberWriter.java
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/AbstractMemberWriter.java
+@@ -25,10 +25,11 @@
+
+ package com.sun.tools.doclets.formats.html;
+
++import java.util.*;
+ import java.lang.reflect.Modifier;
+-import java.util.*;
+-
+ import com.sun.javadoc.*;
++import com.sun.tools.doclets.formats.html.markup.*;
++import com.sun.tools.doclets.internal.toolkit.*;
+ import com.sun.tools.doclets.internal.toolkit.util.*;
+ import com.sun.tools.doclets.internal.toolkit.taglets.*;
+
+@@ -60,36 +61,125 @@
+
+ /*** abstracts ***/
+
+- public abstract void printSummaryLabel();
++ /**
++ * Add the summary label for the member.
++ *
++ * @param memberTree the content tree to which the label will be added
++ */
++ public abstract void addSummaryLabel(Content memberTree);
+
+- public abstract void printTableSummary();
++ /**
++ * Get the summary for the member summary table.
++ *
++ * @return a string for the table summary
++ */
++ public abstract String getTableSummary();
+
+- public abstract void printSummaryTableHeader(ProgramElementDoc member);
++ /**
++ * Get the caption for the member summary table.
++ *
++ * @return a string for the table caption
++ */
++ public abstract String getCaption();
+
+- public abstract void printInheritedSummaryLabel(ClassDoc cd);
++ /**
++ * Get the summary table header for the member.
++ *
++ * @param member the member to be documented
++ * @return the summary table header
++ */
++ public abstract String[] getSummaryTableHeader(ProgramElementDoc member);
+
+- public abstract void printSummaryAnchor(ClassDoc cd);
++ /**
++ * Add inherited summary lable for the member.
++ *
++ * @param cd the class doc to which to link to
++ * @param inheritedTree the content tree to which the inherited summary label will be added
++ */
++ public abstract void addInheritedSummaryLabel(ClassDoc cd, Content inheritedTree);
+
+- public abstract void printInheritedSummaryAnchor(ClassDoc cd);
++ /**
++ * Add the anchor for the summary section of the member.
++ *
++ * @param cd the class doc to be documented
++ * @param memberTree the content tree to which the summary anchor will be added
++ */
++ public abstract void addSummaryAnchor(ClassDoc cd, Content memberTree);
+
+- protected abstract void printSummaryType(ProgramElementDoc member);
++ /**
++ * Add the anchor for the inherited summary section of the member.
++ *
++ * @param cd the class doc to be documented
++ * @param inheritedTree the content tree to which the inherited summary anchor will be added
++ */
++ public abstract void addInheritedSummaryAnchor(ClassDoc cd, Content inheritedTree);
+
+- protected void writeSummaryLink(ClassDoc cd, ProgramElementDoc member) {
+- writeSummaryLink(LinkInfoImpl.CONTEXT_MEMBER, cd, member);
++ /**
++ * Add the summary type for the member.
++ *
++ * @param member the member to be documented
++ * @param tdSummaryType the content tree to which the type will be added
++ */
++ protected abstract void addSummaryType(ProgramElementDoc member,
++ Content tdSummaryType);
++
++ /**
++ * Add the summary link for the member.
++ *
++ * @param cd the class doc to be documented
++ * @param member the member to be documented
++ * @param tdSummary the content tree to which the link will be added
++ */
++ protected void addSummaryLink(ClassDoc cd, ProgramElementDoc member,
++ Content tdSummary) {
++ addSummaryLink(LinkInfoImpl.CONTEXT_MEMBER, cd, member, tdSummary);
+ }
+
+- protected abstract void writeSummaryLink(int context,
+- ClassDoc cd,
+- ProgramElementDoc member);
++ /**
++ * Add the summary link for the member.
++ *
++ * @param context the id of the context where the link will be printed
++ * @param cd the class doc to be documented
++ * @param member the member to be documented
++ * @param tdSummary the content tree to which the summary link will be added
++ */
++ protected abstract void addSummaryLink(int context,
++ ClassDoc cd, ProgramElementDoc member, Content tdSummary);
+
+- protected abstract void writeInheritedSummaryLink(ClassDoc cd,
+- ProgramElementDoc member);
++ /**
++ * Add the inherited summary link for the member.
++ *
++ * @param cd the class doc to be documented
++ * @param member the member to be documented
++ * @param linksTree the content tree to which the inherited summary link will be added
++ */
++ protected abstract void addInheritedSummaryLink(ClassDoc cd,
++ ProgramElementDoc member, Content linksTree);
+
+- protected abstract void writeDeprecatedLink(ProgramElementDoc member);
++ /**
++ * Get the deprecated link.
++ *
++ * @param member the member being linked to
++ * @return a content tree representing the link
++ */
++ protected abstract Content getDeprecatedLink(ProgramElementDoc member);
+
+- protected abstract void printNavSummaryLink(ClassDoc cd, boolean link);
++ /**
++ * Get the navigation summary link.
++ *
++ * @param cd the class doc to be documented
++ * @param link true if its a link else the label to be printed
++ * @return a content tree for the navigation summary link.
++ */
++ protected abstract Content getNavSummaryLink(ClassDoc cd, boolean link);
+
+- protected abstract void printNavDetailLink(boolean link);
++ /**
++ * Add the navigation detail link.
++ *
++ * @param link true if its a link else the label to be printed
++ * @param liNav the content tree to which the navigation detail link will be added
++ */
++ protected abstract void addNavDetailLink(boolean link, Content liNav);
+
+ /*** ***/
+
+@@ -109,6 +199,17 @@
+ }
+
+ /**
++ * Add the member name to the content tree and modifies the display length.
++ *
++ * @param name the member name to be added to the content tree.
++ * @param htmltree the content tree to which the name will be added.
++ */
++ protected void addName(String name, Content htmltree) {
++ htmltree.addContent(name);
++ writer.displayLength += name.length();
++ }
++
++ /**
+ * Return a string describing the access modifier flags.
+ * Don't include native or synchronized.
+ *
+@@ -131,18 +232,24 @@
+ return type;
+ }
+
+- protected void printModifiers(MemberDoc member) {
++ /**
++ * Add the modifier for the member.
++ *
++ * @param member the member for which teh modifier will be added.
++ * @param htmltree the content tree to which the modifier information will be added.
++ */
++ protected void addModifiers(MemberDoc member, Content htmltree) {
+ String mod = modifierString(member);
+ // According to JLS, we should not be showing public modifier for
+ // interface methods.
+ if ((member.isField() || member.isMethod()) &&
+ writer instanceof ClassWriterImpl &&
+- ((ClassWriterImpl) writer).getClassDoc().isInterface()) {
++ ((ClassWriterImpl) writer).getClassDoc().isInterface()) {
+ mod = Util.replaceText(mod, "public", "").trim();
+ }
+ if(mod.length() > 0) {
+- print(mod);
+- print(' ');
++ htmltree.addContent(mod);
++ htmltree.addContent(writer.getSpace());
+ }
+ }
+
+@@ -158,66 +265,43 @@
+ }
+
+ /**
+- * Print 'static' if static and type link.
++ * Add the modifier and type for the member in the member summary.
++ *
++ * @param member the member to add the type for
++ * @param type the type to add
++ * @param tdSummaryType the content tree to which the modified and type will be added
+ */
+- protected void printStaticAndType(boolean isStatic, Type type) {
+- writer.printTypeSummaryHeader();
+- if (isStatic) {
+- print("static");
+- }
+- writer.space();
+- if (type != null) {
+- writer.printLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_MEMBER,
+- type));
+- }
+- writer.printTypeSummaryFooter();
+- }
+-
+- /**
+- * Print the modifier and type for the member in the member summary.
+- *
+- * @param member the member to print the type for.
+- * @param type the type to print.
+- */
+- protected void printModifierAndType(ProgramElementDoc member, Type type) {
+- writer.printTypeSummaryHeader();
+- printModifier(member);
++ protected void addModifierAndType(ProgramElementDoc member, Type type,
++ Content tdSummaryType) {
++ HtmlTree code = new HtmlTree(HtmlTag.CODE);
++ addModifier(member, code);
+ if (type == null) {
+- writer.space();
+ if (member.isClass()) {
+- print("class");
++ code.addContent("class");
+ } else {
+- print("interface");
++ code.addContent("interface");
+ }
++ code.addContent(writer.getSpace());
+ } else {
+ if (member instanceof ExecutableMemberDoc &&
+ ((ExecutableMemberDoc) member).typeParameters().length > 0) {
+ //Code to avoid ugly wrapping in member summary table.
+- writer.table(0,0,0);
+- writer.trAlignVAlign("right", "");
+- writer.tdNowrap();
+- writer.font("-1");
+- writer.code();
+- int displayLength = ((AbstractExecutableMemberWriter) this).
+- writeTypeParameters((ExecutableMemberDoc) member);
++ int displayLength = ((AbstractExecutableMemberWriter) this).addTypeParameters(
++ (ExecutableMemberDoc) member, code);
+ if (displayLength > 10) {
+- writer.br();
++ code.addContent(new HtmlTree(HtmlTag.BR));
+ }
+- writer.printLink(new LinkInfoImpl(
+- LinkInfoImpl.CONTEXT_SUMMARY_RETURN_TYPE, type));
+- writer.codeEnd();
+- writer.fontEnd();
+- writer.tdEnd();
+- writer.trEnd();
+- writer.tableEnd();
++ code.addContent(new RawHtml(
++ writer.getLink(new LinkInfoImpl(
++ LinkInfoImpl.CONTEXT_SUMMARY_RETURN_TYPE, type))));
+ } else {
+- writer.space();
+- writer.printLink(new LinkInfoImpl(
+- LinkInfoImpl.CONTEXT_SUMMARY_RETURN_TYPE, type));
++ code.addContent(new RawHtml(
++ writer.getLink(new LinkInfoImpl(
++ LinkInfoImpl.CONTEXT_SUMMARY_RETURN_TYPE, type))));
+ }
+
+ }
+- writer.printTypeSummaryFooter();
++ tdSummaryType.addContent(code);
+ }
+
+ private void printModifier(ProgramElementDoc member) {
+@@ -238,25 +322,53 @@
+ }
+
+ /**
+- * Print the deprecated output for the given member.
++ * Add the modifier for the member.
++ *
++ * @param member the member to add the type for
++ * @param code the content tree to which the modified will be added
++ */
++ private void addModifier(ProgramElementDoc member, Content code) {
++ if (member.isProtected()) {
++ code.addContent("protected ");
++ } else if (member.isPrivate()) {
++ code.addContent("private ");
++ } else if (!member.isPublic()) { // Package private
++ code.addContent(configuration().getText("doclet.Package_private"));
++ code.addContent(" ");
++ }
++ if (member.isMethod() && ((MethodDoc)member).isAbstract()) {
++ code.addContent("abstract ");
++ }
++ if (member.isStatic()) {
++ code.addContent("static ");
++ }
++ }
++
++ /**
++ * Add the deprecated information for the given member.
+ *
+ * @param member the member being documented.
++ * @param contentTree the content tree to which the deprecated information will be added.
+ */
+- protected void printDeprecated(ProgramElementDoc member) {
++ protected void addDeprecatedInfo(ProgramElementDoc member, Content contentTree) {
+ String output = (new DeprecatedTaglet()).getTagletOutput(member,
+ writer.getTagletWriterInstance(false)).toString().trim();
+ if (!output.isEmpty()) {
+- writer.printMemberDetailsListStartTag();
+- writer.print(output);
++ Content deprecatedContent = new RawHtml(output);
++ Content div = HtmlTree.DIV(HtmlStyle.block, deprecatedContent);
++ contentTree.addContent(div);
+ }
+ }
+
+- protected void printComment(ProgramElementDoc member) {
++ /**
++ * Add the comment for the given member.
++ *
++ * @param member the member being documented.
++ * @param contentTree the content tree to which the comment will be added.
++ */
++ protected void addComment(ProgramElementDoc member, Content htmltree) {
+ if (member.inlineTags().length > 0) {
+- writer.printMemberDetailsListStartTag();
+- writer.dd();
+- writer.printInlineComment(member);
+- writer.ddEnd();
++ writer.addInlineComment(member, htmltree);
+ }
+ }
+
+@@ -264,67 +376,19 @@
+ return member.name();
+ }
+
+- protected void printHead(MemberDoc member) {
+- writer.h3();
+- writer.print(member.name());
+- writer.h3End();
+- }
+-
+- protected void printFullComment(ProgramElementDoc member) {
+- if(configuration().nocomment){
+- return;
+- }
+- writer.dl();
+- print(((TagletOutputImpl)
+- (new DeprecatedTaglet()).getTagletOutput(member,
+- writer.getTagletWriterInstance(false))).toString());
+- printCommentAndTags(member);
+- writer.dlEnd();
+- }
+-
+- protected void printCommentAndTags(ProgramElementDoc member) {
+- printComment(member);
+- writer.printTags(member);
++ /**
++ * Get the header for the section.
++ *
++ * @param member the member being documented.
++ * @return a header content for the section.
++ */
++ protected Content getHead(MemberDoc member) {
++ Content memberContent = new RawHtml(member.name());
++ Content heading = HtmlTree.HEADING(HtmlConstants.MEMBER_HEADING, memberContent);
++ return heading;
+ }
+
+ /**
+- * Write the member footer.
+- */
+- protected void printMemberFooter() {
+- writer.printMemberDetailsListEndTag();
+- assert !writer.getMemberDetailsListPrinted();
+- }
+-
+- /**
+- * Forward to containing writer
+- */
+- public void printSummaryHeader(ClassDoc cd) {
+- printedSummaryHeader = true;
+- writer.printSummaryHeader(this, cd);
+- }
+-
+- /**
+- * Forward to containing writer
+- */
+- public void printInheritedSummaryHeader(ClassDoc cd) {
+- writer.printInheritedSummaryHeader(this, cd);
+- }
+-
+- /**
+- * Forward to containing writer
+- */
+- public void printInheritedSummaryFooter(ClassDoc cd) {
+- writer.printInheritedSummaryFooter(this, cd);
+- }
+-
+- /**
+- * Forward to containing writer
+- */
+- public void printSummaryFooter(ClassDoc cd) {
+- writer.printSummaryFooter(this, cd);
+- }
+-
+- /**
+ * Return true if the given <code>ProgramElement</code> is inherited
+ * by the class that is being documented.
+ *
+@@ -340,102 +404,134 @@
+ return true;
+ }
+
+-
+ /**
+- * Generate the code for listing the deprecated APIs. Create the table
+- * format for listing the API. Call methods from the sub-class to complete
+- * the generation.
++ * Add deprecated information to the documentation tree
++ *
++ * @param deprmembers list of deprecated members
++ * @param headingKey the caption for the deprecated members table
++ * @param tableSummary the summary for the deprecated members table
++ * @param tableHeader table headers for the deprecated members table
++ * @param contentTree the content tree to which the deprecated members table will be added
+ */
+- protected void printDeprecatedAPI(List<Doc> deprmembers, String headingKey, String tableSummary, String[] tableHeader) {
++ protected void addDeprecatedAPI(List<Doc> deprmembers, String headingKey,
++ String tableSummary, String[] tableHeader, Content contentTree) {
+ if (deprmembers.size() > 0) {
+- writer.tableIndexSummary(tableSummary);
+- writer.tableCaptionStart();
+- writer.printText(headingKey);
+- writer.tableCaptionEnd();
+- writer.summaryTableHeader(tableHeader, "col");
++ Content table = HtmlTree.TABLE(0, 3, 0, tableSummary,
++ writer.getTableCaption(configuration().getText(headingKey)));
++ table.addContent(writer.getSummaryTableHeader(tableHeader, "col"));
++ Content tbody = new HtmlTree(HtmlTag.TBODY);
+ for (int i = 0; i < deprmembers.size(); i++) {
+ ProgramElementDoc member =(ProgramElementDoc)deprmembers.get(i);
+- writer.trBgcolorStyle("white", "TableRowColor");
+- writer.summaryRow(0);
+- writeDeprecatedLink(member);
+- writer.br();
+- writer.printNbsps();
++ HtmlTree td = HtmlTree.TD(HtmlStyle.colOne, getDeprecatedLink(member));
+ if (member.tags("deprecated").length > 0)
+- writer.printInlineDeprecatedComment(member, member.tags("deprecated")[0]);
+- writer.space();
+- writer.summaryRowEnd();
+- writer.trEnd();
++ writer.addInlineDeprecatedComment(member,
++ member.tags("deprecated")[0], td);
++ HtmlTree tr = HtmlTree.TR(td);
++ if (i%2 == 0)
++ tr.addStyle(HtmlStyle.altColor);
++ else
++ tr.addStyle(HtmlStyle.rowColor);
++ tbody.addContent(tr);
+ }
+- writer.tableEnd();
+- writer.space();
+- writer.p();
++ table.addContent(tbody);
++ Content li = HtmlTree.LI(HtmlStyle.blockList, table);
++ Content ul = HtmlTree.UL(HtmlStyle.blockList, li);
++ contentTree.addContent(ul);
+ }
+ }
+
+ /**
+- * Print use info.
++ * Add use information to the documentation tree.
++ *
++ * @param mems list of program elements for which the use information will be added
++ * @param heading the section heading
++ * @param tableSummary the summary for the use table
++ * @param contentTree the content tree to which the use information will be added
+ */
+- protected void printUseInfo(List<? extends ProgramElementDoc> mems, String heading, String tableSummary) {
++ protected void addUseInfo(List<? extends ProgramElementDoc> mems,
++ String heading, String tableSummary, Content contentTree) {
+ if (mems == null) {
+ return;
+ }
+ List members = (List)mems;
+ boolean printedUseTableHeader = false;
+ if (members.size() > 0) {
+- writer.tableIndexSummary(tableSummary);
+- writer.tableSubCaptionStart();
+- writer.print(heading);
+- writer.tableCaptionEnd();
+- for (Iterator it = members.iterator(); it.hasNext(); ) {
++ Content table = HtmlTree.TABLE(0, 3, 0, tableSummary,
++ writer.getTableCaption(heading));
++ Content tbody = new HtmlTree(HtmlTag.TBODY);
++ Iterator<? extends ProgramElementDoc> it = members.iterator();
++ for (int i = 0; it.hasNext(); i++) {
+ ProgramElementDoc pgmdoc = (ProgramElementDoc)it.next();
+ ClassDoc cd = pgmdoc.containingClass();
+ if (!printedUseTableHeader) {
+- // Passing ProgramElementDoc helps decides printing
+- // interface or class header in case of nested classes.
+- this.printSummaryTableHeader(pgmdoc);
++ table.addContent(writer.getSummaryTableHeader(
++ this.getSummaryTableHeader(pgmdoc), "col"));
+ printedUseTableHeader = true;
+ }
+-
+- writer.printSummaryLinkType(this, pgmdoc);
++ HtmlTree tr = new HtmlTree(HtmlTag.TR);
++ if (i % 2 == 0) {
++ tr.addStyle(HtmlStyle.altColor);
++ } else {
++ tr.addStyle(HtmlStyle.rowColor);
++ }
++ HtmlTree tdFirst = new HtmlTree(HtmlTag.TD);
++ tdFirst.addStyle(HtmlStyle.colFirst);
++ writer.addSummaryType(this, pgmdoc, tdFirst);
++ tr.addContent(tdFirst);
++ HtmlTree tdLast = new HtmlTree(HtmlTag.TD);
++ tdLast.addStyle(HtmlStyle.colLast);
+ if (cd != null && !(pgmdoc instanceof ConstructorDoc)
+- && !(pgmdoc instanceof ClassDoc)) {
+- // Add class context
+- writer.strong(cd.name() + ".");
++ && !(pgmdoc instanceof ClassDoc)) {
++ HtmlTree name = new HtmlTree(HtmlTag.SPAN);
++ name.addStyle(HtmlStyle.strong);
++ name.addContent(cd.name() + ".");
++ tdLast.addContent(name);
+ }
+- writeSummaryLink(
+- pgmdoc instanceof ClassDoc ?
+- LinkInfoImpl.CONTEXT_CLASS_USE : LinkInfoImpl.CONTEXT_MEMBER,
+- cd, pgmdoc);
+- writer.printSummaryLinkComment(this, pgmdoc);
++ addSummaryLink(pgmdoc instanceof ClassDoc ?
++ LinkInfoImpl.CONTEXT_CLASS_USE : LinkInfoImpl.CONTEXT_MEMBER,
++ cd, pgmdoc, tdLast);
++ writer.addSummaryLinkComment(this, pgmdoc, tdLast);
++ tr.addContent(tdLast);
++ tbody.addContent(tr);
+ }
+- writer.tableEnd();
+- writer.space();
+- writer.p();
++ table.addContent(tbody);
++ contentTree.addContent(table);
+ }
+ }
+
+- protected void navDetailLink(List members) {
+- printNavDetailLink(members.size() > 0? true: false);
++ /**
++ * Add the navigation detail link.
++ *
++ * @param members the members to be linked
++ * @param liNav the content tree to which the navigation detail link will be added
++ */
++ protected void addNavDetailLink(List<?> members, Content liNav) {
++ addNavDetailLink(members.size() > 0 ? true : false, liNav);
+ }
+
+-
+- protected void navSummaryLink(List members,
+- VisibleMemberMap visibleMemberMap) {
++ /**
++ * Add the navigation summary link.
++ *
++ * @param members members to be linked
++ * @param visibleMemberMap the visible inherited members map
++ * @param liNav the content tree to which the navigation summary link will be added
++ */
++ protected void addNavSummaryLink(List<?> members,
++ VisibleMemberMap visibleMemberMap, Content liNav) {
+ if (members.size() > 0) {
+- printNavSummaryLink(null, true);
++ liNav.addContent(getNavSummaryLink(null, true));
+ return;
+- } else {
+- ClassDoc icd = classdoc.superclass();
+- while (icd != null) {
+- List inhmembers = visibleMemberMap.getMembersFor(icd);
+- if (inhmembers.size() > 0) {
+- printNavSummaryLink(icd, true);
+- return;
+- }
+- icd = icd.superclass();
++ }
++ ClassDoc icd = classdoc.superclass();
++ while (icd != null) {
++ List<?> inhmembers = visibleMemberMap.getMembersFor(icd);
++ if (inhmembers.size() > 0) {
++ liNav.addContent(getNavSummaryLink(icd, true));
++ return;
+ }
++ icd = icd.superclass();
+ }
+- printNavSummaryLink(null, false);
++ liNav.addContent(getNavSummaryLink(null, false));
+ }
+
+ protected void serialWarning(SourcePosition pos, String key, String a1, String a2) {
+@@ -453,12 +549,109 @@
+ }
+
+ /**
+- * {@inheritDoc}
++ * Add the member summary for the given class.
++ *
++ * @param classDoc the class that is being documented
++ * @param member the member being documented
++ * @param firstSentenceTags the first sentence tags to be added to the summary
++ * @param tableTree the content tree to which the documentation will be added
++ * @param counter the counter for determing style for the table row
+ */
+- public void writeMemberSummary(ClassDoc classDoc, ProgramElementDoc member,
+- Tag[] firstSentenceTags, boolean isFirst, boolean isLast) {
+- writer.printSummaryLinkType(this, member);
+- writeSummaryLink(classDoc, member);
+- writer.printSummaryLinkComment(this, member, firstSentenceTags);
++ public void addMemberSummary(ClassDoc classDoc, ProgramElementDoc member,
++ Tag[] firstSentenceTags, Content tableTree, int counter) {
++ HtmlTree tdSummaryType = new HtmlTree(HtmlTag.TD);
++ tdSummaryType.addStyle(HtmlStyle.colFirst);
++ writer.addSummaryType(this, member, tdSummaryType);
++ HtmlTree tdSummary = new HtmlTree(HtmlTag.TD);
++ setSummaryColumnStyle(tdSummary);
++ addSummaryLink(classDoc, member, tdSummary);
++ writer.addSummaryLinkComment(this, member, firstSentenceTags, tdSummary);
++ HtmlTree tr = HtmlTree.TR(tdSummaryType);
++ tr.addContent(tdSummary);
++ if (counter%2 == 0)
++ tr.addStyle(HtmlStyle.altColor);
++ else
++ tr.addStyle(HtmlStyle.rowColor);
++ tableTree.addContent(tr);
++ }
++
++ /**
++ * Set the style for the summary column.
++ *
++ * @param tdTree the column for which the style will be set
++ */
++ public void setSummaryColumnStyle(HtmlTree tdTree) {
++ tdTree.addStyle(HtmlStyle.colLast);
++ }
++
++ /**
++ * Add inherited member summary for the given class and member.
++ *
++ * @param classDoc the class the inherited member belongs to
++ * @param nestedClass the inherited member that is summarized
++ * @param isFirst true if this is the first member in the list
++ * @param isLast true if this is the last member in the list
++ * @param linksTree the content tree to which the summary will be added
++ */
++ public void addInheritedMemberSummary(ClassDoc classDoc,
++ ProgramElementDoc nestedClass, boolean isFirst, boolean isLast,
++ Content linksTree) {
++ writer.addInheritedMemberSummary(this, classDoc, nestedClass, isFirst,
++ linksTree);
++ }
++
++ /**
++ * Get the inherited summary header for the given class.
++ *
++ * @param classDoc the class the inherited member belongs to
++ * @return a content tree for the inherited summary header
++ */
++ public Content getInheritedSummaryHeader(ClassDoc classDoc) {
++ Content inheritedTree = writer.getMemberTreeHeader();
++ writer.addInheritedSummaryHeader(this, classDoc, inheritedTree);
++ return inheritedTree;
++ }
++
++ /**
++ * Get the inherited summary links tree.
++ *
++ * @return a content tree for the inherited summary links
++ */
++ public Content getInheritedSummaryLinksTree() {
++ return new HtmlTree(HtmlTag.CODE);
++ }
++
++ /**
++ * Get the summary table tree for the given class.
++ *
++ * @param classDoc the class for which the summary table is generated
++ * @return a content tree for the summary table
++ */
++ public Content getSummaryTableTree(ClassDoc classDoc) {
++ return writer.getSummaryTableTree(this, classDoc);
++ }
++
++ /**
++ * Get the member tree to be documented.
++ *
++ * @param memberTree the content tree of member to be documented
++ * @return a content tree that will be added to the class documentation
++ */
++ public Content getMemberTree(Content memberTree) {
++ return writer.getMemberTree(memberTree);
++ }
++
++ /**
++ * Get the member tree to be documented.
++ *
++ * @param memberTree the content tree of member to be documented
++ * @param isLastContent true if the content to be added is the last content
++ * @return a content tree that will be added to the class documentation
++ */
++ public Content getMemberTree(Content memberTree, boolean isLastContent) {
++ if (isLastContent)
++ return HtmlTree.UL(HtmlStyle.blockListLast, memberTree);
++ else
++ return HtmlTree.UL(HtmlStyle.blockList, memberTree);
+ }
+ }
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/AbstractPackageIndexWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/AbstractPackageIndexWriter.java
+--- langtools/src/share/classes/com/sun/tools/doclets/formats/html/AbstractPackageIndexWriter.java
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/AbstractPackageIndexWriter.java
+@@ -25,9 +25,11 @@
+
+ package com.sun.tools.doclets.formats.html;
+
+-import com.sun.javadoc.*;
+ import java.io.*;
+ import java.util.*;
++import com.sun.javadoc.*;
++import com.sun.tools.doclets.formats.html.markup.*;
++import com.sun.tools.doclets.internal.toolkit.*;
+
+ /**
+ * Abstract class to generate the overview files in
+@@ -56,105 +58,127 @@
+ packages = configuration.packages;
+ }
+
+- protected abstract void printNavigationBarHeader();
+-
+- protected abstract void printNavigationBarFooter();
+-
+- protected abstract void printOverviewHeader();
+-
+- protected abstract void printIndexHeader(String text, String tableSummary);
+-
+- protected abstract void printIndexRow(PackageDoc pkg);
+-
+- protected abstract void printIndexFooter();
++ /**
++ * Adds the navigation bar header to the documentation tree.
++ *
++ * @param body the document tree to which the navigation bar header will be added
++ */
++ protected abstract void addNavigationBarHeader(Content body);
+
+ /**
+- * Generate the contants in the package index file. Call appropriate
++ * Adds the navigation bar footer to the documentation tree.
++ *
++ * @param body the document tree to which the navigation bar footer will be added
++ */
++ protected abstract void addNavigationBarFooter(Content body);
++
++ /**
++ * Adds the overview header to the documentation tree.
++ *
++ * @param body the document tree to which the overview header will be added
++ */
++ protected abstract void addOverviewHeader(Content body);
++
++ /**
++ * Adds the packages list to the documentation tree.
++ *
++ * @param packages an array of packagedoc objects
++ * @param text caption for the table
++ * @param tableSummary summary for the table
++ * @param body the document tree to which the packages list will be added
++ */
++ protected abstract void addPackagesList(PackageDoc[] packages, String text,
++ String tableSummary, Content body);
++
++ /**
++ * Generate and prints the contents in the package index file. Call appropriate
+ * methods from the sub-class in order to generate Frame or Non
+ * Frame format.
++ *
+ * @param title the title of the window.
+ * @param includeScript boolean set true if windowtitle script is to be included
+ */
+- protected void generatePackageIndexFile(String title, boolean includeScript) throws IOException {
++ protected void buildPackageIndexFile(String title, boolean includeScript) throws IOException {
+ String windowOverview = configuration.getText(title);
+- printHtmlHeader(windowOverview,
+- configuration.metakeywords.getOverviewMetaKeywords(title,
+- configuration.doctitle),
+- includeScript);
+- printNavigationBarHeader();
+- printOverviewHeader();
+-
+- generateIndex();
+-
+- printOverview();
+-
+- printNavigationBarFooter();
+- printBodyHtmlEnd();
++ Content body = getBody(includeScript, getWindowTitle(windowOverview));
++ addNavigationBarHeader(body);
++ addOverviewHeader(body);
++ addIndex(body);
++ addOverview(body);
++ addNavigationBarFooter(body);
++ printHtmlDocument(configuration.metakeywords.getOverviewMetaKeywords(title,
++ configuration.doctitle), includeScript, body);
+ }
+
+ /**
+- * Default to no overview, overwrite to add overview.
++ * Default to no overview, override to add overview.
++ *
++ * @param body the document tree to which the overview will be added
+ */
+- protected void printOverview() throws IOException {
++ protected void addOverview(Content body) throws IOException {
+ }
+
+ /**
+- * Generate the frame or non-frame package index.
++ * Adds the frame or non-frame package index to the documentation tree.
++ *
++ * @param body the document tree to which the index will be added
+ */
+- protected void generateIndex() {
+- printIndexContents(packages, "doclet.Package_Summary",
++ protected void addIndex(Content body) {
++ addIndexContents(packages, "doclet.Package_Summary",
+ configuration.getText("doclet.Member_Table_Summary",
+ configuration.getText("doclet.Package_Summary"),
+- configuration.getText("doclet.packages")));
++ configuration.getText("doclet.packages")), body);
+ }
+
+ /**
+- * Generate code for package index contents. Call appropriate methods from
+- * the sub-classes.
++ * Adds package index contents. Call appropriate methods from
++ * the sub-classes. Adds it to the body HtmlTree
+ *
+- * @param packages Array of packages to be documented.
+- * @param text String which will be used as the heading.
++ * @param packages array of packages to be documented
++ * @param text string which will be used as the heading
++ * @param tableSummary summary for the table
++ * @param body the document tree to which the index contents will be added
+ */
+- protected void printIndexContents(PackageDoc[] packages, String text, String tableSummary) {
++ protected void addIndexContents(PackageDoc[] packages, String text,
++ String tableSummary, Content body) {
+ if (packages.length > 0) {
+ Arrays.sort(packages);
+- printIndexHeader(text, tableSummary);
+- printAllClassesPackagesLink();
+- for(int i = 0; i < packages.length; i++) {
+- if (packages[i] != null) {
+- printIndexRow(packages[i]);
+- }
+- }
+- printIndexFooter();
++ addAllClassesLink(body);
++ addPackagesList(packages, text, tableSummary, body);
+ }
+ }
+
+ /**
+- * Print the doctitle, if it is specified on the command line.
++ * Adds the doctitle to the documentation tree, if it is specified on the command line.
++ *
++ * @param body the document tree to which the title will be added
+ */
+- protected void printConfigurationTitle() {
++ protected void addConfigurationTitle(Content body) {
+ if (configuration.doctitle.length() > 0) {
+- center();
+- h1(configuration.doctitle);
+- centerEnd();
++ Content title = new RawHtml(configuration.doctitle);
++ Content heading = HtmlTree.HEADING(HtmlConstants.TITLE_HEADING,
++ HtmlStyle.title, title);
++ Content div = HtmlTree.DIV(HtmlStyle.header, heading);
++ body.addContent(div);
+ }
+ }
+
+ /**
+- * Highlight "Overview" in the strong format, in the navigation bar as this
+- * is the overview page.
++ * Returns highlighted "Overview", in the navigation bar as this is the
++ * overview page.
++ *
++ * @return a Content object to be added to the documentation tree
+ */
+- protected void navLinkContents() {
+- navCellRevStart();
+- fontStyle("NavBarFont1Rev");
+- strongText("doclet.Overview");
+- fontEnd();
+- navCellEnd();
++ protected Content getNavLinkContents() {
++ Content li = HtmlTree.LI(HtmlStyle.navBarCell1Rev, overviewLabel);
++ return li;
+ }
+
+ /**
+ * Do nothing. This will be overridden in PackageIndexFrameWriter.
++ *
++ * @param body the document tree to which the all classes link will be added
+ */
+- protected void printAllClassesPackagesLink() {
++ protected void addAllClassesLink(Content body) {
+ }
+ }
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/AbstractTreeWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/AbstractTreeWriter.java
+--- langtools/src/share/classes/com/sun/tools/doclets/formats/html/AbstractTreeWriter.java
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/AbstractTreeWriter.java
+@@ -25,11 +25,12 @@
+
+ package com.sun.tools.doclets.formats.html;
+
+-import com.sun.tools.doclets.internal.toolkit.util.*;
+-
+-import com.sun.javadoc.*;
+ import java.io.*;
+ import java.util.*;
++import com.sun.tools.doclets.internal.toolkit.util.*;
++import com.sun.tools.doclets.internal.toolkit.*;
++import com.sun.tools.doclets.formats.html.markup.*;
++import com.sun.javadoc.*;
+
+ /**
+ * Abstract class to print the class hierarchy page for all the Classes. This
+@@ -46,6 +47,8 @@
+ */
+ protected final ClassTree classtree;
+
++ private static final String LI_CIRCLE = "circle";
++
+ /**
+ * Constructor initilises classtree variable. This constructor will be used
+ * while generating global tree file "overview-tree.html".
+@@ -87,55 +90,64 @@
+ }
+
+ /**
+- * Generate each level of the class tree. For each sub-class or
++ * Add each level of the class tree. For each sub-class or
+ * sub-interface indents the next level information.
+- * Recurses itself to generate subclasses info.
+- * To iterate is human, to recurse is divine - L. Peter Deutsch.
++ * Recurses itself to add subclasses info.
+ *
+- * @param parent the superclass or superinterface of the list.
+- * @param list list of the sub-classes at this level.
+- * @param isEnum true if we are generating a tree for enums.
++ * @param parent the superclass or superinterface of the list
++ * @param list list of the sub-classes at this level
++ * @param isEnum true if we are generating a tree for enums
++ * @param contentTree the content tree to which the level information will be added
+ */
+- protected void generateLevelInfo(ClassDoc parent, List list,
+- boolean isEnum) {
+- if (list.size() > 0) {
+- ul();
+- for (int i = 0; i < list.size(); i++) {
++ protected void addLevelInfo(ClassDoc parent, List<ClassDoc> list,
++ boolean isEnum, Content contentTree) {
++ int size = list.size();
++ if (size > 0) {
++ Content ul = new HtmlTree(HtmlTag.UL);
++ for (int i = 0; i < size; i++) {
+ ClassDoc local = (ClassDoc)list.get(i);
+- printPartialInfo(local);
+- printExtendsImplements(parent, local);
+- generateLevelInfo(local, classtree.subs(local, isEnum),
+- isEnum); // Recurse
++ HtmlTree li = new HtmlTree(HtmlTag.LI);
++ li.addAttr(HtmlAttr.TYPE, LI_CIRCLE);
++ addPartialInfo(local, li);
++ addExtendsImplements(parent, local, li);
++ addLevelInfo(local, classtree.subs(local, isEnum),
++ isEnum, li); // Recurse
++ ul.addContent(li);
+ }
+- ulEnd();
++ contentTree.addContent(ul);
+ }
+ }
+
+ /**
+- * Generate the heading for the tree depending upon tree type if it's a
+- * Class Tree or Interface tree and also print the tree.
++ * Add the heading for the tree depending upon tree type if it's a
++ * Class Tree or Interface tree.
+ *
+ * @param list List of classes which are at the most base level, all the
+- * other classes in this run will derive from these classes.
+- * @param heading Heading for the tree.
++ * other classes in this run will derive from these classes
++ * @param heading heading for the tree
++ * @param div the content tree to which the tree will be added
+ */
+- protected void generateTree(List list, String heading) {
++ protected void addTree(List<ClassDoc> list, String heading, Content div) {
+ if (list.size() > 0) {
+ ClassDoc firstClassDoc = (ClassDoc)list.get(0);
+- printTreeHeading(heading);
+- generateLevelInfo(!firstClassDoc.isInterface()? firstClassDoc : null,
+- list,
+- list == classtree.baseEnums());
++ Content headingContent = getResource(heading);
++ div.addContent(HtmlTree.HEADING(HtmlConstants.CONTENT_HEADING, true,
++ headingContent));
++ addLevelInfo(!firstClassDoc.isInterface()? firstClassDoc : null,
++ list, list == classtree.baseEnums(), div);
+ }
+ }
+
+ /**
+- * Print the information regarding the classes which this class extends or
++ * Add information regarding the classes which this class extends or
+ * implements.
+ *
+- * @param cd The classdoc under consideration.
++ * @param parent the parent class of the class being documented
++ * @param cd the classdoc under consideration
++ * @param contentTree the content tree to which the information will be added
+ */
+- protected void printExtendsImplements(ClassDoc parent, ClassDoc cd) {
++ protected void addExtendsImplements(ClassDoc parent, ClassDoc cd,
++ Content contentTree) {
+ ClassDoc[] interfaces = cd.interfaces();
+ if (interfaces.length > (cd.isInterface()? 1 : 0)) {
+ Arrays.sort(interfaces);
+@@ -148,53 +160,43 @@
+ }
+ if (counter == 0) {
+ if (cd.isInterface()) {
+- print(" (" + configuration.getText("doclet.also") + " extends ");
++ contentTree.addContent(" (");
++ contentTree.addContent(getResource("doclet.also"));
++ contentTree.addContent(" extends ");
+ } else {
+- print(" (implements ");
++ contentTree.addContent(" (implements ");
+ }
+ } else {
+- print(", ");
++ contentTree.addContent(", ");
+ }
+- printPreQualifiedClassLink(LinkInfoImpl.CONTEXT_TREE,
+- interfaces[i]);
++ addPreQualifiedClassLink(LinkInfoImpl.CONTEXT_TREE,
++ interfaces[i], contentTree);
+ counter++;
+ }
+ }
+ if (counter > 0) {
+- println(")");
++ contentTree.addContent(")");
+ }
+ }
+ }
+
+ /**
+- * Print information about the class kind, if it's a "class" or "interface".
++ * Add information about the class kind, if it's a "class" or "interface".
+ *
+- * @param cd classdoc.
++ * @param cd the class being documented
++ * @param contentTree the content tree to which the information will be added
+ */
+- protected void printPartialInfo(ClassDoc cd) {
+- li("circle");
+- printPreQualifiedStrongClassLink(LinkInfoImpl.CONTEXT_TREE, cd);
++ protected void addPartialInfo(ClassDoc cd, Content contentTree) {
++ addPreQualifiedStrongClassLink(LinkInfoImpl.CONTEXT_TREE, cd, contentTree);
+ }
+
+ /**
+- * Print the heading for the tree.
++ * Get the tree label for the navigation bar.
+ *
+- * @param heading Heading for the tree.
++ * @return a content tree for the tree label
+ */
+- protected void printTreeHeading(String heading) {
+- h2();
+- println(configuration.getText(heading));
+- h2End();
+- }
+-
+- /**
+- * Highlight "Tree" word in the navigation bar, since this is the tree page.
+- */
+- protected void navLinkTree() {
+- navCellRevStart();
+- fontStyle("NavBarFont1Rev");
+- strongText("doclet.Tree");
+- fontEnd();
+- navCellEnd();
++ protected Content getNavLinkTree() {
++ Content li = HtmlTree.LI(HtmlStyle.navBarCell1Rev, treeLabel);
++ return li;
+ }
+ }
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/AllClassesFrameWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/AllClassesFrameWriter.java
+--- langtools/src/share/classes/com/sun/tools/doclets/formats/html/AllClassesFrameWriter.java
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/AllClassesFrameWriter.java
+@@ -25,11 +25,14 @@
+
+ package com.sun.tools.doclets.formats.html;
+
+-import com.sun.tools.doclets.internal.toolkit.util.*;
+-import com.sun.javadoc.*;
+ import java.io.*;
+ import java.util.*;
+
++import com.sun.javadoc.*;
++import com.sun.tools.doclets.internal.toolkit.*;
++import com.sun.tools.doclets.internal.toolkit.util.*;
++import com.sun.tools.doclets.formats.html.markup.*;
++
+ /**
+ * Generate the file with list of all the classes in this run. This page will be
+ * used in the left-hand bottom frame, when "All Classes" link is clicked in
+@@ -38,6 +41,7 @@
+ *
+ * @author Atul M Dambalkar
+ * @author Doug Kramer
++ * @author Bhavesh Patel (Modified)
+ */
+ public class AllClassesFrameWriter extends HtmlDocletWriter {
+
+@@ -57,6 +61,11 @@
+ protected IndexBuilder indexbuilder;
+
+ /**
++ * BR tag to be used within a document tree.
++ */
++ final HtmlTree BR = new HtmlTree(HtmlTag.BR);
++
++ /**
+ * Construct AllClassesFrameWriter object. Also initilises the indexbuilder
+ * variable in this class.
+ * @throws IOException
+@@ -84,12 +93,12 @@
+ try {
+ allclassgen = new AllClassesFrameWriter(configuration,
+ filename, indexbuilder);
+- allclassgen.generateAllClassesFile(true);
++ allclassgen.buildAllClassesFile(true);
+ allclassgen.close();
+ filename = OUTPUT_FILE_NAME_NOFRAMES;
+ allclassgen = new AllClassesFrameWriter(configuration,
+ filename, indexbuilder);
+- allclassgen.generateAllClassesFile(false);
++ allclassgen.buildAllClassesFile(false);
+ allclassgen.close();
+ } catch (IOException exc) {
+ configuration.standardmessage.
+@@ -100,30 +109,34 @@
+ }
+
+ /**
+- * Print all the classes in table format in the file.
++ * Print all the classes in the file.
+ * @param wantFrames True if we want frames.
+ */
+- protected void generateAllClassesFile(boolean wantFrames) throws IOException {
++ protected void buildAllClassesFile(boolean wantFrames) throws IOException {
+ String label = configuration.getText("doclet.All_Classes");
+-
+- printHtmlHeader(label, null, false);
+-
+- printAllClassesTableHeader();
+- printAllClasses(wantFrames);
+- printAllClassesTableFooter();
+-
+- printBodyHtmlEnd();
++ Content body = getBody(false, getWindowTitle(label));
++ Content heading = HtmlTree.HEADING(HtmlConstants.TITLE_HEADING,
++ HtmlStyle.bar, allclassesLabel);
++ body.addContent(heading);
++ Content ul = new HtmlTree(HtmlTag.UL);
++ // Generate the class links and add it to the tdFont tree.
++ addAllClasses(ul, wantFrames);
++ Content div = HtmlTree.DIV(HtmlStyle.indexContainer, ul);
++ body.addContent(div);
++ printHtmlDocument(null, false, body);
+ }
+
+ /**
+- * Use the sorted index of all the classes and print all the classes.
++ * Use the sorted index of all the classes and add all the classes to the
++ * content list.
+ *
++ * @param content HtmlTree content to which all classes information will be added
+ * @param wantFrames True if we want frames.
+ */
+- protected void printAllClasses(boolean wantFrames) {
++ protected void addAllClasses(Content content, boolean wantFrames) {
+ for (int i = 0; i < indexbuilder.elements().length; i++) {
+ Character unicode = (Character)((indexbuilder.elements())[i]);
+- generateContents(indexbuilder.getMemberList(unicode), wantFrames);
++ addContents(indexbuilder.getMemberList(unicode), wantFrames, content);
+ }
+ }
+
+@@ -136,46 +149,25 @@
+ *
+ * @param classlist Sorted list of classes.
+ * @param wantFrames True if we want frames.
++ * @param content HtmlTree content to which the links will be added
+ */
+- protected void generateContents(List classlist, boolean wantFrames) {
++ protected void addContents(List<Doc> classlist, boolean wantFrames,
++ Content content) {
+ for (int i = 0; i < classlist.size(); i++) {
+ ClassDoc cd = (ClassDoc)(classlist.get(i));
+ if (!Util.isCoreClass(cd)) {
+ continue;
+ }
+ String label = italicsClassName(cd, false);
++ Content linkContent;
+ if(wantFrames){
+- printLink(new LinkInfoImpl(LinkInfoImpl.ALL_CLASSES_FRAME, cd,
+- label, "classFrame")
+- );
++ linkContent = new RawHtml(getLink(new LinkInfoImpl(
++ LinkInfoImpl.ALL_CLASSES_FRAME, cd, label, "classFrame")));
+ } else {
+- printLink(new LinkInfoImpl(cd, label));
++ linkContent = new RawHtml(getLink(new LinkInfoImpl(cd, label)));
+ }
+- br();
++ Content li = HtmlTree.LI(linkContent);
++ content.addContent(li);
+ }
+ }
+-
+- /**
+- * Print the heading "All Classes" and also print Html table tag.
+- */
+- protected void printAllClassesTableHeader() {
+- fontSizeStyle("+1", "FrameHeadingFont");
+- strongText("doclet.All_Classes");
+- fontEnd();
+- br();
+- table();
+- tr();
+- tdNowrap();
+- fontStyle("FrameItemFont");
+- }
+-
+- /**
+- * Print Html closing table tag.
+- */
+- protected void printAllClassesTableFooter() {
+- fontEnd();
+- tdEnd();
+- trEnd();
+- tableEnd();
+- }
+ }
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeOptionalMemberWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeOptionalMemberWriterImpl.java
+--- langtools/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeOptionalMemberWriterImpl.java
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeOptionalMemberWriterImpl.java
+@@ -28,6 +28,7 @@
+ import java.io.*;
+
+ import com.sun.javadoc.*;
++import com.sun.tools.doclets.formats.html.markup.*;
+ import com.sun.tools.doclets.internal.toolkit.*;
+
+ /**
+@@ -54,29 +55,26 @@
+ /**
+ * {@inheritDoc}
+ */
+- public void writeMemberSummaryHeader(ClassDoc classDoc) {
+- writer.println("<!-- =========== ANNOTATION TYPE OPTIONAL MEMBER SUMMARY =========== -->");
+- writer.println();
+- writer.printSummaryHeader(this, classDoc);
++ public Content getMemberSummaryHeader(ClassDoc classDoc,
++ Content memberSummaryTree) {
++ memberSummaryTree.addContent(
++ HtmlConstants.START_OF_ANNOTATION_TYPE_OPTIONAL_MEMBER_SUMMARY);
++ Content memberTree = writer.getMemberTreeHeader();
++ writer.addSummaryHeader(this, classDoc, memberTree);
++ return memberTree;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- public void writeDefaultValueInfo(MemberDoc member) {
++ public void addDefaultValueInfo(MemberDoc member, Content annotationDocTree) {
+ if (((AnnotationTypeElementDoc) member).defaultValue() != null) {
+- writer.printMemberDetailsListStartTag();
+- writer.dd();
+- writer.dl();
+- writer.dt();
+- writer.strong(ConfigurationImpl.getInstance().
+- getText("doclet.Default"));
+- writer.dtEnd();
+- writer.dd();
+- writer.print(((AnnotationTypeElementDoc) member).defaultValue());
+- writer.ddEnd();
+- writer.dlEnd();
+- writer.ddEnd();
++ Content dt = HtmlTree.DT(writer.getResource("doclet.Default"));
++ Content dl = HtmlTree.DL(dt);
++ Content dd = HtmlTree.DD(new StringContent(
++ ((AnnotationTypeElementDoc) member).defaultValue().toString()));
++ dl.addContent(dd);
++ annotationDocTree.addContent(dl);
+ }
+ }
+
+@@ -90,45 +88,58 @@
+ /**
+ * {@inheritDoc}
+ */
+- public void printSummaryLabel() {
+- writer.printText("doclet.Annotation_Type_Optional_Member_Summary");
++ public void addSummaryLabel(Content memberTree) {
++ Content label = HtmlTree.HEADING(HtmlConstants.SUMMARY_HEADING,
++ writer.getResource("doclet.Annotation_Type_Optional_Member_Summary"));
++ memberTree.addContent(label);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- public void printTableSummary() {
+- writer.tableIndexSummary(configuration().getText("doclet.Member_Table_Summary",
++ public String getTableSummary() {
++ return configuration().getText("doclet.Member_Table_Summary",
+ configuration().getText("doclet.Annotation_Type_Optional_Member_Summary"),
+- configuration().getText("doclet.annotation_type_optional_members")));
++ configuration().getText("doclet.annotation_type_optional_members"));
+ }
+
+- public void printSummaryTableHeader(ProgramElementDoc member) {
++ /**
++ * {@inheritDoc}
++ */
++ public String getCaption() {
++ return configuration().getText("doclet.Annotation_Type_Optional_Members");
++ }
++
++ /**
++ * {@inheritDoc}
++ */
++ public String[] getSummaryTableHeader(ProgramElementDoc member) {
+ String[] header = new String[] {
+ writer.getModifierTypeHeader(),
+ configuration().getText("doclet.0_and_1",
+ configuration().getText("doclet.Annotation_Type_Optional_Member"),
+ configuration().getText("doclet.Description"))
+ };
+- writer.summaryTableHeader(header, "col");
++ return header;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- public void printSummaryAnchor(ClassDoc cd) {
+- writer.anchor("annotation_type_optional_element_summary");
++ public void addSummaryAnchor(ClassDoc cd, Content memberTree) {
++ memberTree.addContent(writer.getMarkerAnchor(
++ "annotation_type_optional_element_summary"));
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- protected void printNavSummaryLink(ClassDoc cd, boolean link) {
++ protected Content getNavSummaryLink(ClassDoc cd, boolean link) {
+ if (link) {
+- writer.printHyperLink("", "annotation_type_optional_element_summary",
+- configuration().getText("doclet.navAnnotationTypeOptionalMember"));
++ return writer.getHyperLink("", "annotation_type_optional_element_summary",
++ writer.getResource("doclet.navAnnotationTypeOptionalMember"));
+ } else {
+- writer.printText("doclet.navAnnotationTypeOptionalMember");
++ return writer.getResource("doclet.navAnnotationTypeOptionalMember");
+ }
+ }
+ }
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeRequiredMemberWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeRequiredMemberWriterImpl.java
+--- langtools/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeRequiredMemberWriterImpl.java
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeRequiredMemberWriterImpl.java
+@@ -28,6 +28,7 @@
+ import java.io.*;
+
+ import com.sun.javadoc.*;
++import com.sun.tools.doclets.formats.html.markup.*;
+ import com.sun.tools.doclets.internal.toolkit.*;
+
+ /**
+@@ -51,122 +52,102 @@
+ }
+
+ /**
+- * Write the annotation type member summary header for the given class.
+- *
+- * @param classDoc the class the summary belongs to.
++ * {@inheritDoc}
+ */
+- public void writeMemberSummaryHeader(ClassDoc classDoc) {
+- writer.println("<!-- =========== ANNOTATION TYPE REQUIRED MEMBER SUMMARY =========== -->");
+- writer.println();
+- writer.printSummaryHeader(this, classDoc);
+- }
+-
+- /**
+- * Write the annotation type member summary footer for the given class.
+- *
+- * @param classDoc the class the summary belongs to.
+- */
+- public void writeMemberSummaryFooter(ClassDoc classDoc) {
+- writer.printSummaryFooter(this, classDoc);
++ public Content getMemberSummaryHeader(ClassDoc classDoc,
++ Content memberSummaryTree) {
++ memberSummaryTree.addContent(
++ HtmlConstants.START_OF_ANNOTATION_TYPE_REQUIRED_MEMBER_SUMMARY);
++ Content memberTree = writer.getMemberTreeHeader();
++ writer.addSummaryHeader(this, classDoc, memberTree);
++ return memberTree;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- public void writeInheritedMemberSummaryHeader(ClassDoc classDoc) {
+- //Not appliable.
++ public void addAnnotationDetailsTreeHeader(ClassDoc classDoc,
++ Content memberDetailsTree) {
++ if (!writer.printedAnnotationHeading) {
++ memberDetailsTree.addContent(writer.getMarkerAnchor(
++ "annotation_type_element_detail"));
++ Content heading = HtmlTree.HEADING(HtmlConstants.DETAILS_HEADING,
++ writer.annotationTypeDetailsLabel);
++ memberDetailsTree.addContent(heading);
++ writer.printedAnnotationHeading = true;
++ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- public void writeInheritedMemberSummary(ClassDoc classDoc,
+- ProgramElementDoc member, boolean isFirst, boolean isLast) {
+- //Not appliable.
++ public Content getAnnotationDocTreeHeader(MemberDoc member,
++ Content annotationDetailsTree) {
++ annotationDetailsTree.addContent(
++ writer.getMarkerAnchor(member.name() +
++ ((ExecutableMemberDoc) member).signature()));
++ Content annotationDocTree = writer.getMemberTreeHeader();
++ Content heading = new HtmlTree(HtmlConstants.MEMBER_HEADING);
++ heading.addContent(member.name());
++ annotationDocTree.addContent(heading);
++ return annotationDocTree;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- public void writeInheritedMemberSummaryFooter(ClassDoc classDoc) {
+- //Not appliable.
++ public Content getSignature(MemberDoc member) {
++ Content pre = new HtmlTree(HtmlTag.PRE);
++ writer.addAnnotationInfo(member, pre);
++ addModifiers(member, pre);
++ Content link = new RawHtml(
++ writer.getLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_MEMBER,
++ getType(member))));
++ pre.addContent(link);
++ pre.addContent(writer.getSpace());
++ if (configuration().linksource) {
++ Content memberName = new StringContent(member.name());
++ writer.addSrcLink(member, memberName, pre);
++ } else {
++ addName(member.name(), pre);
++ }
++ return pre;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- public void writeHeader(ClassDoc classDoc, String header) {
+- writer.println();
+- writer.println("<!-- ============ ANNOTATION TYPE MEMBER DETAIL =========== -->");
+- writer.println();
+- writer.anchor("annotation_type_element_detail");
+- writer.printTableHeadingBackground(header);
+- writer.println();
++ public void addDeprecated(MemberDoc member, Content annotationDocTree) {
++ addDeprecatedInfo(member, annotationDocTree);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- public void writeMemberHeader(MemberDoc member, boolean isFirst) {
+- if (! isFirst) {
+- writer.printMemberHeader();
+- writer.println("");
+- }
+- writer.anchor(member.name() + ((ExecutableMemberDoc) member).signature());
+- writer.h3();
+- writer.print(member.name());
+- writer.h3End();
++ public void addComments(MemberDoc member, Content annotationDocTree) {
++ addComment(member, annotationDocTree);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- public void writeSignature(MemberDoc member) {
+- writer.pre();
+- writer.writeAnnotationInfo(member);
+- printModifiers(member);
+- writer.printLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_MEMBER,
+- getType(member)));
+- print(' ');
+- if (configuration().linksource) {
+- writer.printSrcLink(member, member.name());
+- } else {
+- strong(member.name());
+- }
+- writer.preEnd();
+- assert !writer.getMemberDetailsListPrinted();
++ public void addTags(MemberDoc member, Content annotationDocTree) {
++ writer.addTagsInfo(member, annotationDocTree);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- public void writeComments(MemberDoc member) {
+- printComment(member);
++ public Content getAnnotationDetails(Content annotationDetailsTree) {
++ return getMemberTree(annotationDetailsTree);
+ }
+
+ /**
+- * Write the tag output for the given member.
+- *
+- * @param member the member being documented.
++ * {@inheritDoc}
+ */
+- public void writeTags(MemberDoc member) {
+- writer.printTags(member);
+- }
+-
+- /**
+- * Write the annotation type member footer.
+- */
+- public void writeMemberFooter() {
+- printMemberFooter();
+- }
+-
+- /**
+- * Write the footer for the annotation type member documentation.
+- *
+- * @param classDoc the class that the annotation type member belong to.
+- */
+- public void writeFooter(ClassDoc classDoc) {
+- //No footer to write for annotation type member documentation
++ public Content getAnnotationDoc(Content annotationDocTree,
++ boolean isLastContent) {
++ return getMemberTree(annotationDocTree, isLastContent);
+ }
+
+ /**
+@@ -179,113 +160,120 @@
+ /**
+ * {@inheritDoc}
+ */
+- public void printSummaryLabel() {
+- writer.printText("doclet.Annotation_Type_Required_Member_Summary");
++ public void addSummaryLabel(Content memberTree) {
++ Content label = HtmlTree.HEADING(HtmlConstants.SUMMARY_HEADING,
++ writer.getResource("doclet.Annotation_Type_Required_Member_Summary"));
++ memberTree.addContent(label);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- public void printTableSummary() {
+- writer.tableIndexSummary(configuration().getText("doclet.Member_Table_Summary",
++ public String getTableSummary() {
++ return configuration().getText("doclet.Member_Table_Summary",
+ configuration().getText("doclet.Annotation_Type_Required_Member_Summary"),
+- configuration().getText("doclet.annotation_type_required_members")));
++ configuration().getText("doclet.annotation_type_required_members"));
+ }
+
+- public void printSummaryTableHeader(ProgramElementDoc member) {
++ /**
++ * {@inheritDoc}
++ */
++ public String getCaption() {
++ return configuration().getText("doclet.Annotation_Type_Required_Members");
++ }
++
++ /**
++ * {@inheritDoc}
++ */
++ public String[] getSummaryTableHeader(ProgramElementDoc member) {
+ String[] header = new String[] {
+ writer.getModifierTypeHeader(),
+ configuration().getText("doclet.0_and_1",
+ configuration().getText("doclet.Annotation_Type_Required_Member"),
+ configuration().getText("doclet.Description"))
+ };
+- writer.summaryTableHeader(header, "col");
++ return header;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- public void printSummaryAnchor(ClassDoc cd) {
+- writer.anchor("annotation_type_required_element_summary");
++ public void addSummaryAnchor(ClassDoc cd, Content memberTree) {
++ memberTree.addContent(writer.getMarkerAnchor(
++ "annotation_type_required_element_summary"));
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- public void printInheritedSummaryAnchor(ClassDoc cd) {
+- } // no such
+-
+- /**
+- * {@inheritDoc}
+- */
+- public void printInheritedSummaryLabel(ClassDoc cd) {
+- // no such
++ public void addInheritedSummaryAnchor(ClassDoc cd, Content inheritedTree) {
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- protected void writeSummaryLink(int context, ClassDoc cd, ProgramElementDoc member) {
+- writer.strong();
+- writer.printDocLink(context, (MemberDoc) member, member.name(), false);
+- writer.strongEnd();
++ public void addInheritedSummaryLabel(ClassDoc cd, Content inheritedTree) {
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- protected void writeInheritedSummaryLink(ClassDoc cd,
+- ProgramElementDoc member) {
++ protected void addSummaryLink(int context, ClassDoc cd, ProgramElementDoc member,
++ Content tdSummary) {
++ Content strong = HtmlTree.STRONG(new RawHtml(
++ writer.getDocLink(context, (MemberDoc) member, member.name(), false)));
++ Content code = HtmlTree.CODE(strong);
++ tdSummary.addContent(code);
++ }
++
++ /**
++ * {@inheritDoc}
++ */
++ protected void addInheritedSummaryLink(ClassDoc cd,
++ ProgramElementDoc member, Content linksTree) {
+ //Not applicable.
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- protected void printSummaryType(ProgramElementDoc member) {
++ protected void addSummaryType(ProgramElementDoc member, Content tdSummaryType) {
+ MemberDoc m = (MemberDoc)member;
+- printModifierAndType(m, getType(m));
++ addModifierAndType(m, getType(m), tdSummaryType);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- protected void writeDeprecatedLink(ProgramElementDoc member) {
+- writer.printDocLink(LinkInfoImpl.CONTEXT_MEMBER,
+- (MemberDoc) member, ((MemberDoc)member).qualifiedName(), false);
++ protected Content getDeprecatedLink(ProgramElementDoc member) {
++ return writer.getDocLink(LinkInfoImpl.CONTEXT_MEMBER,
++ (MemberDoc) member, ((MemberDoc)member).qualifiedName());
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- protected void printNavSummaryLink(ClassDoc cd, boolean link) {
++ protected Content getNavSummaryLink(ClassDoc cd, boolean link) {
+ if (link) {
+- writer.printHyperLink("", "annotation_type_required_element_summary",
+- configuration().getText("doclet.navAnnotationTypeRequiredMember"));
++ return writer.getHyperLink("", "annotation_type_required_element_summary",
++ writer.getResource("doclet.navAnnotationTypeRequiredMember"));
+ } else {
+- writer.printText("doclet.navAnnotationTypeRequiredMember");
++ return writer.getResource("doclet.navAnnotationTypeRequiredMember");
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- protected void printNavDetailLink(boolean link) {
++ protected void addNavDetailLink(boolean link, Content liNav) {
+ if (link) {
+- writer.printHyperLink("", "annotation_type_element_detail",
+- configuration().getText("doclet.navAnnotationTypeMember"));
++ liNav.addContent(writer.getHyperLink("", "annotation_type_element_detail",
++ writer.getResource("doclet.navAnnotationTypeMember")));
+ } else {
+- writer.printText("doclet.navAnnotationTypeMember");
++ liNav.addContent(writer.getResource("doclet.navAnnotationTypeMember"));
+ }
+ }
+
+- /**
+- * {@inheritDoc}
+- */
+- public void writeDeprecated(MemberDoc member) {
+- printDeprecated(member);
+- }
+-
+ private Type getType(MemberDoc member) {
+ if (member instanceof FieldDoc) {
+ return ((FieldDoc) member).type();
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeWriterImpl.java
+--- langtools/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeWriterImpl.java
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeWriterImpl.java
+@@ -29,6 +29,7 @@
+ import com.sun.tools.doclets.internal.toolkit.*;
+ import com.sun.tools.doclets.internal.toolkit.util.*;
+ import com.sun.tools.doclets.internal.toolkit.builders.*;
++import com.sun.tools.doclets.formats.html.markup.*;
+
+ /**
+ * Generate the Class Information Page.
+@@ -40,6 +41,7 @@
+ *
+ * @author Atul M Dambalkar
+ * @author Robert Field
++ * @author Bhavesh Patel (Modified)
+ */
+ public class AnnotationTypeWriterImpl extends SubWriterHolderWriter
+ implements AnnotationTypeWriter {
+@@ -69,126 +71,168 @@
+ }
+
+ /**
+- * Print this package link
++ * Get this package link.
++ *
++ * @return a content tree for the package link
+ */
+- protected void navLinkPackage() {
+- navCellStart();
+- printHyperLink("package-summary.html", "",
+- configuration.getText("doclet.Package"), true, "NavBarFont1");
+- navCellEnd();
++ protected Content getNavLinkPackage() {
++ Content linkContent = getHyperLink("package-summary.html", "",
++ packageLabel);
++ Content li = HtmlTree.LI(linkContent);
++ return li;
+ }
+
+ /**
+- * Print class page indicator
++ * Get the class link.
++ *
++ * @return a content tree for the class link
+ */
+- protected void navLinkClass() {
+- navCellRevStart();
+- fontStyle("NavBarFont1Rev");
+- strongText("doclet.Class");
+- fontEnd();
+- navCellEnd();
++ protected Content getNavLinkClass() {
++ Content li = HtmlTree.LI(HtmlStyle.navBarCell1Rev, classLabel);
++ return li;
+ }
+
+ /**
+- * Print class use link
++ * Get the class use link.
++ *
++ * @return a content tree for the class use link
+ */
+- protected void navLinkClassUse() {
+- navCellStart();
+- printHyperLink("class-use/" + filename, "",
+- configuration.getText("doclet.navClassUse"), true, "NavBarFont1");
+- navCellEnd();
++ protected Content getNavLinkClassUse() {
++ Content linkContent = getHyperLink("class-use/" + filename, "", useLabel);
++ Content li = HtmlTree.LI(linkContent);
++ return li;
+ }
+
+ /**
+- * Print previous package link
++ * Get link to previous class.
++ *
++ * @return a content tree for the previous class link
+ */
+- protected void navLinkPrevious() {
+- if (prev == null) {
+- printText("doclet.Prev_Class");
+- } else {
+- printLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_CLASS,
+- prev.asClassDoc(), "",
+- configuration.getText("doclet.Prev_Class"), true));
++ public Content getNavLinkPrevious() {
++ Content li;
++ if (prev != null) {
++ Content prevLink = new RawHtml(getLink(new LinkInfoImpl(
++ LinkInfoImpl.CONTEXT_CLASS, prev.asClassDoc(), "",
++ configuration.getText("doclet.Prev_Class"), true)));
++ li = HtmlTree.LI(prevLink);
+ }
++ else
++ li = HtmlTree.LI(prevclassLabel);
++ return li;
+ }
+
+ /**
+- * Print next package link
++ * Get link to next class.
++ *
++ * @return a content tree for the next class link
+ */
+- protected void navLinkNext() {
+- if (next == null) {
+- printText("doclet.Next_Class");
+- } else {
+- printLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_CLASS,
+- next.asClassDoc(), "",
+- configuration.getText("doclet.Next_Class"), true));
++ public Content getNavLinkNext() {
++ Content li;
++ if (next != null) {
++ Content nextLink = new RawHtml(getLink(new LinkInfoImpl(
++ LinkInfoImpl.CONTEXT_CLASS, next.asClassDoc(), "",
++ configuration.getText("doclet.Next_Class"), true)));
++ li = HtmlTree.LI(nextLink);
+ }
++ else
++ li = HtmlTree.LI(nextclassLabel);
++ return li;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- public void writeHeader(String header) {
+-
++ public Content getHeader(String header) {
+ String pkgname = (annotationType.containingPackage() != null)?
+ annotationType.containingPackage().name(): "";
+ String clname = annotationType.name();
+-
+- printHtmlHeader(clname,
+- configuration.metakeywords.getMetaKeywords(annotationType), true);
+- printTop();
+- navLinks(true);
+- hr();
+- println("<!-- ======== START OF CLASS DATA ======== -->");
+- h2();
++ Content bodyTree = getBody(true, getWindowTitle(clname));
++ addTop(bodyTree);
++ addNavLinks(true, bodyTree);
++ bodyTree.addContent(HtmlConstants.START_OF_CLASS_DATA);
++ HtmlTree div = new HtmlTree(HtmlTag.DIV);
++ div.addStyle(HtmlStyle.header);
+ if (pkgname.length() > 0) {
+- font("-1"); print(pkgname); fontEnd(); br();
++ Content pkgNameContent = new StringContent(pkgname);
++ Content pkgNamePara = HtmlTree.P(HtmlStyle.subTitle, pkgNameContent);
++ div.addContent(pkgNamePara);
+ }
+- print(header + getTypeParameterLinks(new LinkInfoImpl(
+- LinkInfoImpl.CONTEXT_CLASS_HEADER,
+- annotationType, false)));
+- h2End();
++ LinkInfoImpl linkInfo = new LinkInfoImpl(
++ LinkInfoImpl.CONTEXT_CLASS_HEADER, annotationType, false);
++ Content headerContent = new StringContent(header);
++ Content heading = HtmlTree.HEADING(HtmlConstants.CLASS_PAGE_HEADING, true,
++ HtmlStyle.title, headerContent);
++ heading.addContent(new RawHtml(getTypeParameterLinks(linkInfo)));
++ div.addContent(heading);
++ bodyTree.addContent(div);
++ return bodyTree;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- public void writeFooter() {
+- println("<!-- ========= END OF CLASS DATA ========= -->");
+- hr();
+- navLinks(false);
+- printBottom();
+- printBodyHtmlEnd();
++ public Content getAnnotationContentHeader() {
++ return getContentHeader();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- public void writeAnnotationTypeSignature(String modifiers) {
+- preNoNewLine();
+- writeAnnotationInfo(annotationType);
+- print(modifiers);
+- String name = annotationType.name() +
+- getTypeParameterLinks(new LinkInfoImpl(
+- LinkInfoImpl.CONTEXT_CLASS_SIGNATURE, annotationType, false));
+- if (configuration().linksource) {
+- printSrcLink(annotationType, name);
+- } else {
+- strong(name);
+- }
+- preEnd();
+- p();
++ public void addFooter(Content contentTree) {
++ contentTree.addContent(HtmlConstants.END_OF_CLASS_DATA);
++ addNavLinks(false, contentTree);
++ addBottom(contentTree);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- public void writeAnnotationTypeDescription() {
++ public void printDocument(Content contentTree) {
++ printHtmlDocument(configuration.metakeywords.getMetaKeywords(annotationType),
++ true, contentTree);
++ }
++
++ /**
++ * {@inheritDoc}
++ */
++ public Content getAnnotationInfoTreeHeader() {
++ return getMemberTreeHeader();
++ }
++
++ /**
++ * {@inheritDoc}
++ */
++ public Content getAnnotationInfo(Content annotationInfoTree) {
++ return getMemberTree(HtmlStyle.description, annotationInfoTree);
++ }
++
++ /**
++ * {@inheritDoc}
++ */
++ public void addAnnotationTypeSignature(String modifiers, Content annotationInfoTree) {
++ annotationInfoTree.addContent(new HtmlTree(HtmlTag.BR));
++ Content pre = new HtmlTree(HtmlTag.PRE);
++ addAnnotationInfo(annotationType, pre);
++ pre.addContent(modifiers);
++ LinkInfoImpl linkInfo = new LinkInfoImpl(
++ LinkInfoImpl.CONTEXT_CLASS_SIGNATURE, annotationType, false);
++ Content name = new RawHtml (annotationType.name() +
++ getTypeParameterLinks(linkInfo));
++ if (configuration().linksource) {
++ addSrcLink(annotationType, name, pre);
++ } else {
++ pre.addContent(HtmlTree.STRONG(name));
++ }
++ annotationInfoTree.addContent(pre);
++ }
++
++ /**
++ * {@inheritDoc}
++ */
++ public void addAnnotationTypeDescription(Content annotationInfoTree) {
+ if(!configuration.nocomment) {
+- // generate documentation for the class.
+ if (annotationType.inlineTags().length > 0) {
+- printInlineComment(annotationType);
+- p();
++ addInlineComment(annotationType, annotationInfoTree);
+ }
+ }
+ }
+@@ -196,148 +240,152 @@
+ /**
+ * {@inheritDoc}
+ */
+- public void writeAnnotationTypeTagInfo() {
+- boolean needHr = annotationType.elements().length > 0;
++ public void addAnnotationTypeTagInfo(Content annotationInfoTree) {
+ if(!configuration.nocomment) {
+- // Print Information about all the tags here
+- printTags(annotationType);
+- if (needHr) {
+- hr();
+- }
+- p();
+- } else if (needHr) {
+- hr();
++ addTagsInfo(annotationType, annotationInfoTree);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- public void writeAnnotationTypeDeprecationInfo() {
+- hr();
++ public void addAnnotationTypeDeprecationInfo(Content annotationInfoTree) {
++ Content hr = new HtmlTree(HtmlTag.HR);
++ annotationInfoTree.addContent(hr);
+ Tag[] deprs = annotationType.tags("deprecated");
+ if (Util.isDeprecated(annotationType)) {
+- strongText("doclet.Deprecated");
++ Content strong = HtmlTree.STRONG(deprecatedPhrase);
++ Content div = HtmlTree.DIV(HtmlStyle.block, strong);
+ if (deprs.length > 0) {
+ Tag[] commentTags = deprs[0].inlineTags();
+ if (commentTags.length > 0) {
+-
+- space();
+- printInlineDeprecatedComment(annotationType, deprs[0]);
++ div.addContent(getSpace());
++ addInlineDeprecatedComment(annotationType, deprs[0], div);
+ }
+ }
+- p();
++ annotationInfoTree.addContent(div);
+ }
+ }
+
+- protected void navLinkTree() {
+- navCellStart();
+- printHyperLink("package-tree.html", "",
+- configuration.getText("doclet.Tree"), true, "NavBarFont1");
+- navCellEnd();
++ /**
++ * {@inheritDoc}
++ */
++ public void addAnnotationDetailsMarker(Content memberDetails) {
++ memberDetails.addContent(HtmlConstants.START_OF_ANNOTATION_TYPE_DETAILS);
+ }
+
+- protected void printSummaryDetailLinks() {
++ /**
++ * {@inheritDoc}
++ */
++ protected Content getNavLinkTree() {
++ Content treeLinkContent = getHyperLink("package-tree.html",
++ "", treeLabel, "", "");
++ Content li = HtmlTree.LI(treeLinkContent);
++ return li;
++ }
++
++ /**
++ * Add summary details to the navigation bar.
++ *
++ * @param subDiv the content tree to which the summary detail links will be added
++ */
++ protected void addSummaryDetailLinks(Content subDiv) {
+ try {
+- tr();
+- tdVAlignClass("top", "NavBarCell3");
+- font("-2");
+- print(" ");
+- navSummaryLinks();
+- fontEnd();
+- tdEnd();
+-
+- tdVAlignClass("top", "NavBarCell3");
+- font("-2");
+- navDetailLinks();
+- fontEnd();
+- tdEnd();
+- trEnd();
++ Content div = HtmlTree.DIV(getNavSummaryLinks());
++ div.addContent(getNavDetailLinks());
++ subDiv.addContent(div);
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new DocletAbortException();
+ }
+ }
+
+- protected void navSummaryLinks() throws Exception {
+- printText("doclet.Summary");
+- space();
++ /**
++ * Get summary links for navigation bar.
++ *
++ * @return the content tree for the navigation summary links
++ */
++ protected Content getNavSummaryLinks() throws Exception {
++ Content li = HtmlTree.LI(summaryLabel);
++ li.addContent(getSpace());
++ Content ulNav = HtmlTree.UL(HtmlStyle.subNavList, li);
+ MemberSummaryBuilder memberSummaryBuilder = (MemberSummaryBuilder)
+- configuration.getBuilderFactory().getMemberSummaryBuilder(this);
+- writeNavSummaryLink(memberSummaryBuilder,
+- "doclet.navAnnotationTypeRequiredMember",
+- VisibleMemberMap.ANNOTATION_TYPE_MEMBER_REQUIRED);
+- navGap();
+- writeNavSummaryLink(memberSummaryBuilder,
+- "doclet.navAnnotationTypeOptionalMember",
+- VisibleMemberMap.ANNOTATION_TYPE_MEMBER_OPTIONAL);
++ configuration.getBuilderFactory().getMemberSummaryBuilder(this);
++ Content liNavReq = new HtmlTree(HtmlTag.LI);
++ addNavSummaryLink(memberSummaryBuilder,
++ "doclet.navAnnotationTypeRequiredMember",
++ VisibleMemberMap.ANNOTATION_TYPE_MEMBER_REQUIRED, liNavReq);
++ addNavGap(liNavReq);
++ ulNav.addContent(liNavReq);
++ Content liNavOpt = new HtmlTree(HtmlTag.LI);
++ addNavSummaryLink(memberSummaryBuilder,
++ "doclet.navAnnotationTypeOptionalMember",
++ VisibleMemberMap.ANNOTATION_TYPE_MEMBER_OPTIONAL, liNavOpt);
++ ulNav.addContent(liNavOpt);
++ return ulNav;
+ }
+
+- private void writeNavSummaryLink(MemberSummaryBuilder builder,
+- String label, int type) {
++ /**
++ * Add the navigation summary link.
++ *
++ * @param builder builder for the member to be documented
++ * @param label the label for the navigation
++ * @param type type to be documented
++ * @param liNav the content tree to which the navigation summary link will be added
++ */
++ protected void addNavSummaryLink(MemberSummaryBuilder builder,
++ String label, int type, Content liNav) {
+ AbstractMemberWriter writer = ((AbstractMemberWriter) builder.
+- getMemberSummaryWriter(type));
++ getMemberSummaryWriter(type));
+ if (writer == null) {
+- printText(label);
++ liNav.addContent(getResource(label));
+ } else {
+- writer.printNavSummaryLink(null,
+- ! builder.getVisibleMemberMap(type).noVisibleMembers());
++ liNav.addContent(writer.getNavSummaryLink(null,
++ ! builder.getVisibleMemberMap(type).noVisibleMembers()));
+ }
+ }
+
+ /**
+- * Method navDetailLinks
++ * Get detail links for the navigation bar.
+ *
+- * @throws Exception
+- *
++ * @return the content tree for the detail links
+ */
+- protected void navDetailLinks() throws Exception {
+- printText("doclet.Detail");
+- space();
++ protected Content getNavDetailLinks() throws Exception {
++ Content li = HtmlTree.LI(detailLabel);
++ li.addContent(getSpace());
++ Content ulNav = HtmlTree.UL(HtmlStyle.subNavList, li);
+ MemberSummaryBuilder memberSummaryBuilder = (MemberSummaryBuilder)
+- configuration.getBuilderFactory().getMemberSummaryBuilder(this);
++ configuration.getBuilderFactory().getMemberSummaryBuilder(this);
+ AbstractMemberWriter writerOptional =
+- ((AbstractMemberWriter) memberSummaryBuilder.
++ ((AbstractMemberWriter) memberSummaryBuilder.
+ getMemberSummaryWriter(VisibleMemberMap.ANNOTATION_TYPE_MEMBER_OPTIONAL));
+ AbstractMemberWriter writerRequired =
+- ((AbstractMemberWriter) memberSummaryBuilder.
++ ((AbstractMemberWriter) memberSummaryBuilder.
+ getMemberSummaryWriter(VisibleMemberMap.ANNOTATION_TYPE_MEMBER_REQUIRED));
+ if (writerOptional != null){
+- writerOptional.printNavDetailLink(annotationType.elements().length > 0);
++ Content liNavOpt = new HtmlTree(HtmlTag.LI);
++ writerOptional.addNavDetailLink(annotationType.elements().length > 0, liNavOpt);
++ ulNav.addContent(liNavOpt);
+ } else if (writerRequired != null){
+- writerRequired.printNavDetailLink(annotationType.elements().length > 0);
++ Content liNavReq = new HtmlTree(HtmlTag.LI);
++ writerRequired.addNavDetailLink(annotationType.elements().length > 0, liNavReq);
++ ulNav.addContent(liNavReq);
+ } else {
+- printText("doclet.navAnnotationTypeMember");
++ Content liNav = HtmlTree.LI(getResource("doclet.navAnnotationTypeMember"));
++ ulNav.addContent(liNav);
+ }
+- }
+-
+- protected void navGap() {
+- space();
+- print('|');
+- space();
++ return ulNav;
+ }
+
+ /**
+- * If this is an inner class or interface, write the enclosing class or
+- * interface.
++ * Add gap between navigation bar elements.
++ *
++ * @param liNav the content tree to which the gap will be added
+ */
+- public void writeNestedClassInfo() {
+- ClassDoc outerClass = annotationType.containingClass();
+- if (outerClass != null) {
+- dl();
+- dt();
+- if (annotationType.isInterface()) {
+- strongText("doclet.Enclosing_Interface");
+- } else {
+- strongText("doclet.Enclosing_Class");
+- }
+- dtEnd();
+- dd();
+- printLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_CLASS, outerClass,
+- false));
+- ddEnd();
+- dlEnd();
+- }
++ protected void addNavGap(Content liNav) {
++ liNav.addContent(getSpace());
++ liNav.addContent("|");
++ liNav.addContent(getSpace());
+ }
+
+ /**
+@@ -346,11 +394,4 @@
+ public AnnotationTypeDoc getAnnotationTypeDoc() {
+ return annotationType;
+ }
+-
+- /**
+- * {@inheritDoc}
+- */
+- public void completeMemberSummaryBuild() {
+- p();
+- }
+ }
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/ClassUseWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/ClassUseWriter.java
+--- langtools/src/share/classes/com/sun/tools/doclets/formats/html/ClassUseWriter.java
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/ClassUseWriter.java
+@@ -25,10 +25,12 @@
+
+ package com.sun.tools.doclets.formats.html;
+
+-import com.sun.tools.doclets.internal.toolkit.util.*;
+-import com.sun.javadoc.*;
+ import java.io.*;
+ import java.util.*;
++import com.sun.javadoc.*;
++import com.sun.tools.doclets.internal.toolkit.util.*;
++import com.sun.tools.doclets.formats.html.markup.*;
++import com.sun.tools.doclets.internal.toolkit.*;
+
+ /**
+ * Generate class usage information.
+@@ -207,257 +209,301 @@
+ }
+
+ /**
+- * Print the class use list.
++ * Generate the class use list.
+ */
+ protected void generateClassUseFile() throws IOException {
+-
+- printClassUseHeader();
+-
++ Content body = getClassUseHeader();
++ HtmlTree div = new HtmlTree(HtmlTag.DIV);
++ div.addStyle(HtmlStyle.classUseContainer);
+ if (pkgSet.size() > 0) {
+- generateClassUse();
++ addClassUse(div);
+ } else {
+- printText("doclet.ClassUse_No.usage.of.0",
+- classdoc.qualifiedName());
+- p();
++ div.addContent(getResource("doclet.ClassUse_No.usage.of.0",
++ classdoc.qualifiedName()));
+ }
+-
+- printClassUseFooter();
+- }
+-
+- protected void generateClassUse() throws IOException {
+- if (configuration.packages.length > 1) {
+- generatePackageList();
+- generatePackageAnnotationList();
+- }
+- generateClassList();
+- }
+-
+- protected void generatePackageList() throws IOException {
+- tableIndexSummary(useTableSummary);
+- tableCaptionStart();
+- printText("doclet.ClassUse_Packages.that.use.0",
+- getLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_CLASS_USE_HEADER, classdoc,
+- false)));
+- tableCaptionEnd();
+- summaryTableHeader(packageTableHeader, "col");
+-
+- for (Iterator it = pkgSet.iterator(); it.hasNext();) {
+- PackageDoc pkg = (PackageDoc)it.next();
+- generatePackageUse(pkg);
+- }
+- tableEnd();
+- space();
+- p();
+- }
+-
+- protected void generatePackageAnnotationList() throws IOException {
+- if ((! classdoc.isAnnotationType()) ||
+- pkgToPackageAnnotations == null ||
+- pkgToPackageAnnotations.size() == 0)
+- return;
+- tableIndexSummary(useTableSummary);
+- tableCaptionStart();
+- printText("doclet.ClassUse_PackageAnnotation",
+- getLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_CLASS_USE_HEADER, classdoc,
+- false)));
+- tableCaptionEnd();
+- summaryTableHeader(packageTableHeader, "col");
+- for (Iterator it = pkgToPackageAnnotations.iterator(); it.hasNext();) {
+- PackageDoc pkg = (PackageDoc)it.next();
+- trBgcolorStyle("white", "TableRowColor");
+- summaryRow(0);
+- //Just want an anchor here.
+- printPackageLink(pkg, pkg.name(), true);
+- summaryRowEnd();
+- summaryRow(0);
+- printSummaryComment(pkg);
+- space();
+- summaryRowEnd();
+- trEnd();
+- }
+- tableEnd();
+- space();
+- p();
+- }
+-
+- protected void generateClassList() throws IOException {
+- for (Iterator it = pkgSet.iterator(); it.hasNext();) {
+- PackageDoc pkg = (PackageDoc)it.next();
+- anchor(pkg.name());
+- tableIndexSummary();
+- tableHeaderStart("#CCCCFF");
+- printText("doclet.ClassUse_Uses.of.0.in.1",
+- getLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_CLASS_USE_HEADER,
+- classdoc, false)),
+- getPackageLink(pkg, Util.getPackageName(pkg), false));
+- tableHeaderEnd();
+- tableEnd();
+- space();
+- p();
+- generateClassUse(pkg);
+- }
++ body.addContent(div);
++ addNavLinks(false, body);
++ addBottom(body);
++ printHtmlDocument(null, true, body);
+ }
+
+ /**
+- * Print the package use list.
++ * Add the class use documentation.
++ *
++ * @param contentTree the content tree to which the class use information will be added
+ */
+- protected void generatePackageUse(PackageDoc pkg) throws IOException {
+- trBgcolorStyle("white", "TableRowColor");
+- summaryRow(0);
+- //Just want an anchor here.
+- printHyperLink("", pkg.name(), Util.getPackageName(pkg), true);
+- summaryRowEnd();
+- summaryRow(0);
+- printSummaryComment(pkg);
+- space();
+- summaryRowEnd();
+- trEnd();
++ protected void addClassUse(Content contentTree) throws IOException {
++ HtmlTree ul = new HtmlTree(HtmlTag.UL);
++ ul.addStyle(HtmlStyle.blockList);
++ if (configuration.packages.length > 1) {
++ addPackageList(ul);
++ addPackageAnnotationList(ul);
++ }
++ addClassList(ul);
++ contentTree.addContent(ul);
+ }
+
+ /**
+- * Print the class use list.
++ * Add the packages list that use the given class.
++ *
++ * @param contentTree the content tree to which the packages list will be added
+ */
+- protected void generateClassUse(PackageDoc pkg) throws IOException {
+- String classLink = getLink(new LinkInfoImpl(
+- LinkInfoImpl.CONTEXT_CLASS_USE_HEADER, classdoc, false));
+- String pkgLink = getPackageLink(pkg, Util.getPackageName(pkg), false);
+- classSubWriter.printUseInfo(pkgToClassAnnotations.get(pkg.name()),
+- configuration.getText("doclet.ClassUse_Annotation", classLink,
+- pkgLink), classUseTableSummary);
+- classSubWriter.printUseInfo(pkgToClassTypeParameter.get(pkg.name()),
+- configuration.getText("doclet.ClassUse_TypeParameter", classLink,
+- pkgLink), classUseTableSummary);
+- classSubWriter.printUseInfo(pkgToSubclass.get(pkg.name()),
+- configuration.getText("doclet.ClassUse_Subclass", classLink,
+- pkgLink), subclassUseTableSummary);
+- classSubWriter.printUseInfo(pkgToSubinterface.get(pkg.name()),
+- configuration.getText("doclet.ClassUse_Subinterface", classLink,
+- pkgLink), subinterfaceUseTableSummary);
+- classSubWriter.printUseInfo(pkgToImplementingClass.get(pkg.name()),
+- configuration.getText("doclet.ClassUse_ImplementingClass", classLink,
+- pkgLink), classUseTableSummary);
+- fieldSubWriter.printUseInfo(pkgToField.get(pkg.name()),
+- configuration.getText("doclet.ClassUse_Field", classLink,
+- pkgLink), fieldUseTableSummary);
+- fieldSubWriter.printUseInfo(pkgToFieldAnnotations.get(pkg.name()),
+- configuration.getText("doclet.ClassUse_FieldAnnotations", classLink,
+- pkgLink), fieldUseTableSummary);
+- fieldSubWriter.printUseInfo(pkgToFieldTypeParameter.get(pkg.name()),
+- configuration.getText("doclet.ClassUse_FieldTypeParameter", classLink,
+- pkgLink), fieldUseTableSummary);
+- methodSubWriter.printUseInfo(pkgToMethodAnnotations.get(pkg.name()),
+- configuration.getText("doclet.ClassUse_MethodAnnotations", classLink,
+- pkgLink), methodUseTableSummary);
+- methodSubWriter.printUseInfo(pkgToMethodParameterAnnotations.get(pkg.name()),
+- configuration.getText("doclet.ClassUse_MethodParameterAnnotations", classLink,
+- pkgLink), methodUseTableSummary);
+- methodSubWriter.printUseInfo(pkgToMethodTypeParameter.get(pkg.name()),
+- configuration.getText("doclet.ClassUse_MethodTypeParameter", classLink,
+- pkgLink), methodUseTableSummary);
+- methodSubWriter.printUseInfo(pkgToMethodReturn.get(pkg.name()),
+- configuration.getText("doclet.ClassUse_MethodReturn", classLink,
+- pkgLink), methodUseTableSummary);
+- methodSubWriter.printUseInfo(pkgToMethodReturnTypeParameter.get(pkg.name()),
+- configuration.getText("doclet.ClassUse_MethodReturnTypeParameter", classLink,
+- pkgLink), methodUseTableSummary);
+- methodSubWriter.printUseInfo(pkgToMethodArgs.get(pkg.name()),
+- configuration.getText("doclet.ClassUse_MethodArgs", classLink,
+- pkgLink), methodUseTableSummary);
+- methodSubWriter.printUseInfo(pkgToMethodArgTypeParameter.get(pkg.name()),
+- configuration.getText("doclet.ClassUse_MethodArgsTypeParameters", classLink,
+- pkgLink), methodUseTableSummary);
+- methodSubWriter.printUseInfo(pkgToMethodThrows.get(pkg.name()),
+- configuration.getText("doclet.ClassUse_MethodThrows", classLink,
+- pkgLink), methodUseTableSummary);
+- constrSubWriter.printUseInfo(pkgToConstructorAnnotations.get(pkg.name()),
+- configuration.getText("doclet.ClassUse_ConstructorAnnotations", classLink,
+- pkgLink), constructorUseTableSummary);
+- constrSubWriter.printUseInfo(pkgToConstructorParameterAnnotations.get(pkg.name()),
+- configuration.getText("doclet.ClassUse_ConstructorParameterAnnotations", classLink,
+- pkgLink), constructorUseTableSummary);
+- constrSubWriter.printUseInfo(pkgToConstructorArgs.get(pkg.name()),
+- configuration.getText("doclet.ClassUse_ConstructorArgs", classLink,
+- pkgLink), constructorUseTableSummary);
+- constrSubWriter.printUseInfo(pkgToConstructorArgTypeParameter.get(pkg.name()),
+- configuration.getText("doclet.ClassUse_ConstructorArgsTypeParameters", classLink,
+- pkgLink), constructorUseTableSummary);
+- constrSubWriter.printUseInfo(pkgToConstructorThrows.get(pkg.name()),
+- configuration.getText("doclet.ClassUse_ConstructorThrows", classLink,
+- pkgLink), constructorUseTableSummary);
++ protected void addPackageList(Content contentTree) throws IOException {
++ Content table = HtmlTree.TABLE(0, 3, 0, useTableSummary,
++ getTableCaption(configuration().getText(
++ "doclet.ClassUse_Packages.that.use.0",
++ getLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_CLASS_USE_HEADER, classdoc,
++ false)))));
++ table.addContent(getSummaryTableHeader(packageTableHeader, "col"));
++ Content tbody = new HtmlTree(HtmlTag.TBODY);
++ Iterator<PackageDoc> it = pkgSet.iterator();
++ for (int i = 0; it.hasNext(); i++) {
++ PackageDoc pkg = it.next();
++ HtmlTree tr = new HtmlTree(HtmlTag.TR);
++ if (i % 2 == 0) {
++ tr.addStyle(HtmlStyle.altColor);
++ } else {
++ tr.addStyle(HtmlStyle.rowColor);
++ }
++ addPackageUse(pkg, tr);
++ tbody.addContent(tr);
++ }
++ table.addContent(tbody);
++ Content li = HtmlTree.LI(HtmlStyle.blockList, table);
++ contentTree.addContent(li);
+ }
+
+ /**
+- * Print the header for the class use Listing.
++ * Add the package annotation list.
++ *
++ * @param contentTree the content tree to which the package annotation list will be added
+ */
+- protected void printClassUseHeader() {
+- String cltype = configuration.getText(classdoc.isInterface()?
+- "doclet.Interface":
+- "doclet.Class");
+- String clname = classdoc.qualifiedName();
+- printHtmlHeader(configuration.getText("doclet.Window_ClassUse_Header",
+- cltype, clname), null, true);
+- printTop();
+- navLinks(true);
+- hr();
+- center();
+- h2();
+- strongText("doclet.ClassUse_Title", cltype, clname);
+- h2End();
+- centerEnd();
++ protected void addPackageAnnotationList(Content contentTree) throws IOException {
++ if ((!classdoc.isAnnotationType()) ||
++ pkgToPackageAnnotations == null ||
++ pkgToPackageAnnotations.size() == 0) {
++ return;
++ }
++ Content table = HtmlTree.TABLE(0, 3, 0, useTableSummary,
++ getTableCaption(configuration().getText(
++ "doclet.ClassUse_PackageAnnotation",
++ getLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_CLASS_USE_HEADER, classdoc,
++ false)))));
++ table.addContent(getSummaryTableHeader(packageTableHeader, "col"));
++ Content tbody = new HtmlTree(HtmlTag.TBODY);
++ Iterator<PackageDoc> it = pkgToPackageAnnotations.iterator();
++ for (int i = 0; it.hasNext(); i++) {
++ PackageDoc pkg = it.next();
++ HtmlTree tr = new HtmlTree(HtmlTag.TR);
++ if (i % 2 == 0) {
++ tr.addStyle(HtmlStyle.altColor);
++ } else {
++ tr.addStyle(HtmlStyle.rowColor);
++ }
++ Content tdFirst = HtmlTree.TD(HtmlStyle.colFirst,
++ getPackageLink(pkg, new StringContent(pkg.name())));
++ tr.addContent(tdFirst);
++ HtmlTree tdLast = new HtmlTree(HtmlTag.TD);
++ tdLast.addStyle(HtmlStyle.colLast);
++ if (pkg != null) {
++ addSummaryComment(pkg, tdLast);
++ } else {
++ tdLast.addContent(getSpace());
++ }
++ tr.addContent(tdLast);
++ tbody.addContent(tr);
++ }
++ table.addContent(tbody);
++ Content li = HtmlTree.LI(HtmlStyle.blockList, table);
++ contentTree.addContent(li);
+ }
+
+ /**
+- * Print the footer for the class use Listing.
++ * Add the class list that use the given class.
++ *
++ * @param contentTree the content tree to which the class list will be added
+ */
+- protected void printClassUseFooter() {
+- hr();
+- navLinks(false);
+- printBottom();
+- printBodyHtmlEnd();
+- }
+-
+-
+- /**
+- * Print this package link
+- */
+- protected void navLinkPackage() {
+- navCellStart();
+- printHyperLink("../package-summary.html", "",
+- configuration.getText("doclet.Package"), true, "NavBarFont1");
+- navCellEnd();
++ protected void addClassList(Content contentTree) throws IOException {
++ HtmlTree ul = new HtmlTree(HtmlTag.UL);
++ ul.addStyle(HtmlStyle.blockList);
++ for (Iterator<PackageDoc> it = pkgSet.iterator(); it.hasNext();) {
++ PackageDoc pkg = it.next();
++ Content li = HtmlTree.LI(HtmlStyle.blockList, getMarkerAnchor(pkg.name()));
++ Content link = new RawHtml(
++ configuration.getText("doclet.ClassUse_Uses.of.0.in.1",
++ getLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_CLASS_USE_HEADER,
++ classdoc, false)),
++ getPackageLinkString(pkg, Util.getPackageName(pkg), false)));
++ Content heading = HtmlTree.HEADING(HtmlConstants.SUMMARY_HEADING, link);
++ li.addContent(heading);
++ addClassUse(pkg, li);
++ ul.addContent(li);
++ }
++ Content li = HtmlTree.LI(HtmlStyle.blockList, ul);
++ contentTree.addContent(li);
+ }
+
+ /**
+- * Print class page indicator
++ * Add the package use information.
++ *
++ * @param pkg the package that uses the given class
++ * @param contentTree the content tree to which the package use information will be added
+ */
+- protected void navLinkClass() {
+- navCellStart();
+- printLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_CLASS_USE_HEADER, classdoc, "",
+- configuration.getText("doclet.Class"), true, "NavBarFont1"));
+- navCellEnd();
++ protected void addPackageUse(PackageDoc pkg, Content contentTree) throws IOException {
++ Content tdFirst = HtmlTree.TD(HtmlStyle.colFirst,
++ getHyperLink("", pkg.name(), new StringContent(Util.getPackageName(pkg))));
++ contentTree.addContent(tdFirst);
++ HtmlTree tdLast = new HtmlTree(HtmlTag.TD);
++ tdLast.addStyle(HtmlStyle.colLast);
++ if (pkg != null)
++ addSummaryComment(pkg, tdLast);
++ else
++ tdLast.addContent(getSpace());
++ contentTree.addContent(tdLast);
+ }
+
+ /**
+- * Print class use link
++ * Add the class use information.
++ *
++ * @param pkg the package that uses the given class
++ * @param contentTree the content tree to which the class use information will be added
+ */
+- protected void navLinkClassUse() {
+- navCellRevStart();
+- fontStyle("NavBarFont1Rev");
+- strongText("doclet.navClassUse");
+- fontEnd();
+- navCellEnd();
++ protected void addClassUse(PackageDoc pkg, Content contentTree) throws IOException {
++ String classLink = getLink(new LinkInfoImpl(
++ LinkInfoImpl.CONTEXT_CLASS_USE_HEADER, classdoc, false));
++ String pkgLink = getPackageLinkString(pkg, Util.getPackageName(pkg), false);
++ classSubWriter.addUseInfo(pkgToClassAnnotations.get(pkg.name()),
++ configuration.getText("doclet.ClassUse_Annotation", classLink,
++ pkgLink), classUseTableSummary, contentTree);
++ classSubWriter.addUseInfo(pkgToClassTypeParameter.get(pkg.name()),
++ configuration.getText("doclet.ClassUse_TypeParameter", classLink,
++ pkgLink), classUseTableSummary, contentTree);
++ classSubWriter.addUseInfo(pkgToSubclass.get(pkg.name()),
++ configuration.getText("doclet.ClassUse_Subclass", classLink,
++ pkgLink), subclassUseTableSummary, contentTree);
++ classSubWriter.addUseInfo(pkgToSubinterface.get(pkg.name()),
++ configuration.getText("doclet.ClassUse_Subinterface", classLink,
++ pkgLink), subinterfaceUseTableSummary, contentTree);
++ classSubWriter.addUseInfo(pkgToImplementingClass.get(pkg.name()),
++ configuration.getText("doclet.ClassUse_ImplementingClass", classLink,
++ pkgLink), classUseTableSummary, contentTree);
++ fieldSubWriter.addUseInfo(pkgToField.get(pkg.name()),
++ configuration.getText("doclet.ClassUse_Field", classLink,
++ pkgLink), fieldUseTableSummary, contentTree);
++ fieldSubWriter.addUseInfo(pkgToFieldAnnotations.get(pkg.name()),
++ configuration.getText("doclet.ClassUse_FieldAnnotations", classLink,
++ pkgLink), fieldUseTableSummary, contentTree);
++ fieldSubWriter.addUseInfo(pkgToFieldTypeParameter.get(pkg.name()),
++ configuration.getText("doclet.ClassUse_FieldTypeParameter", classLink,
++ pkgLink), fieldUseTableSummary, contentTree);
++ methodSubWriter.addUseInfo(pkgToMethodAnnotations.get(pkg.name()),
++ configuration.getText("doclet.ClassUse_MethodAnnotations", classLink,
++ pkgLink), methodUseTableSummary, contentTree);
++ methodSubWriter.addUseInfo(pkgToMethodParameterAnnotations.get(pkg.name()),
++ configuration.getText("doclet.ClassUse_MethodParameterAnnotations", classLink,
++ pkgLink), methodUseTableSummary, contentTree);
++ methodSubWriter.addUseInfo(pkgToMethodTypeParameter.get(pkg.name()),
++ configuration.getText("doclet.ClassUse_MethodTypeParameter", classLink,
++ pkgLink), methodUseTableSummary, contentTree);
++ methodSubWriter.addUseInfo(pkgToMethodReturn.get(pkg.name()),
++ configuration.getText("doclet.ClassUse_MethodReturn", classLink,
++ pkgLink), methodUseTableSummary, contentTree);
++ methodSubWriter.addUseInfo(pkgToMethodReturnTypeParameter.get(pkg.name()),
++ configuration.getText("doclet.ClassUse_MethodReturnTypeParameter", classLink,
++ pkgLink), methodUseTableSummary, contentTree);
++ methodSubWriter.addUseInfo(pkgToMethodArgs.get(pkg.name()),
++ configuration.getText("doclet.ClassUse_MethodArgs", classLink,
++ pkgLink), methodUseTableSummary, contentTree);
++ methodSubWriter.addUseInfo(pkgToMethodArgTypeParameter.get(pkg.name()),
++ configuration.getText("doclet.ClassUse_MethodArgsTypeParameters", classLink,
++ pkgLink), methodUseTableSummary, contentTree);
++ methodSubWriter.addUseInfo(pkgToMethodThrows.get(pkg.name()),
++ configuration.getText("doclet.ClassUse_MethodThrows", classLink,
++ pkgLink), methodUseTableSummary, contentTree);
++ constrSubWriter.addUseInfo(pkgToConstructorAnnotations.get(pkg.name()),
++ configuration.getText("doclet.ClassUse_ConstructorAnnotations", classLink,
++ pkgLink), constructorUseTableSummary, contentTree);
++ constrSubWriter.addUseInfo(pkgToConstructorParameterAnnotations.get(pkg.name()),
++ configuration.getText("doclet.ClassUse_ConstructorParameterAnnotations", classLink,
++ pkgLink), constructorUseTableSummary, contentTree);
++ constrSubWriter.addUseInfo(pkgToConstructorArgs.get(pkg.name()),
++ configuration.getText("doclet.ClassUse_ConstructorArgs", classLink,
++ pkgLink), constructorUseTableSummary, contentTree);
++ constrSubWriter.addUseInfo(pkgToConstructorArgTypeParameter.get(pkg.name()),
++ configuration.getText("doclet.ClassUse_ConstructorArgsTypeParameters", classLink,
++ pkgLink), constructorUseTableSummary, contentTree);
++ constrSubWriter.addUseInfo(pkgToConstructorThrows.get(pkg.name()),
++ configuration.getText("doclet.ClassUse_ConstructorThrows", classLink,
++ pkgLink), constructorUseTableSummary, contentTree);
+ }
+
+- protected void navLinkTree() {
+- navCellStart();
+- if (classdoc.containingPackage().isIncluded()) {
+- printHyperLink("../package-tree.html", "",
+- configuration.getText("doclet.Tree"), true, "NavBarFont1");
+- } else {
+- printHyperLink(relativePath + "overview-tree.html", "",
+- configuration.getText("doclet.Tree"), true, "NavBarFont1");
+- }
+- navCellEnd();
++ /**
++ * Get the header for the class use Listing.
++ *
++ * @return a content tree representing the class use header
++ */
++ protected Content getClassUseHeader() {
++ String cltype = configuration.getText(classdoc.isInterface()?
++ "doclet.Interface":"doclet.Class");
++ String clname = classdoc.qualifiedName();
++ String title = configuration.getText("doclet.Window_ClassUse_Header",
++ cltype, clname);
++ Content bodyTree = getBody(true, getWindowTitle(title));
++ addTop(bodyTree);
++ addNavLinks(true, bodyTree);
++ Content headContent = getResource("doclet.ClassUse_Title", cltype, clname);
++ Content heading = HtmlTree.HEADING(HtmlConstants.CLASS_PAGE_HEADING,
++ true, HtmlStyle.title, headContent);
++ Content div = HtmlTree.DIV(HtmlStyle.header, heading);
++ bodyTree.addContent(div);
++ return bodyTree;
+ }
+
++ /**
++ * Get this package link.
++ *
++ * @return a content tree for the package link
++ */
++ protected Content getNavLinkPackage() {
++ Content linkContent = getHyperLink("../package-summary.html", "",
++ packageLabel);
++ Content li = HtmlTree.LI(linkContent);
++ return li;
++ }
++
++ /**
++ * Get class page link.
++ *
++ * @return a content tree for the class page link
++ */
++ protected Content getNavLinkClass() {
++ Content linkContent = new RawHtml(getLink(new LinkInfoImpl(
++ LinkInfoImpl.CONTEXT_CLASS_USE_HEADER, classdoc, "",
++ configuration.getText("doclet.Class"), false)));
++ Content li = HtmlTree.LI(linkContent);
++ return li;
++ }
++
++ /**
++ * Get the use link.
++ *
++ * @return a content tree for the use link
++ */
++ protected Content getNavLinkClassUse() {
++ Content li = HtmlTree.LI(HtmlStyle.navBarCell1Rev, useLabel);
++ return li;
++ }
++
++ /**
++ * Get the tree link.
++ *
++ * @return a content tree for the tree link
++ */
++ protected Content getNavLinkTree() {
++ Content linkContent = classdoc.containingPackage().isIncluded() ?
++ getHyperLink("../package-tree.html", "", treeLabel) :
++ getHyperLink(relativePath + "overview-tree.html", "", treeLabel);
++ Content li = HtmlTree.LI(linkContent);
++ return li;
++ }
+ }
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/ClassWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/ClassWriterImpl.java
+--- langtools/src/share/classes/com/sun/tools/doclets/formats/html/ClassWriterImpl.java
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/ClassWriterImpl.java
+@@ -32,6 +32,7 @@
+ import com.sun.tools.doclets.internal.toolkit.util.*;
+ import com.sun.tools.doclets.internal.toolkit.builders.*;
+ import com.sun.tools.doclets.internal.toolkit.taglets.*;
++import com.sun.tools.doclets.formats.html.markup.*;
+
+ /**
+ * Generate the Class Information Page.
+@@ -43,6 +44,7 @@
+ *
+ * @author Atul M Dambalkar
+ * @author Robert Field
++ * @author Bhavesh Patel (Modified)
+ */
+ public class ClassWriterImpl extends SubWriterHolderWriter
+ implements ClassWriter {
+@@ -76,124 +78,173 @@
+ }
+
+ /**
+- * Print this package link
++ * Get this package link.
++ *
++ * @return a content tree for the package link
+ */
+- protected void navLinkPackage() {
+- navCellStart();
+- printHyperLink("package-summary.html", "",
+- configuration.getText("doclet.Package"), true, "NavBarFont1");
+- navCellEnd();
++ protected Content getNavLinkPackage() {
++ Content linkContent = getHyperLink("package-summary.html", "",
++ packageLabel);
++ Content li = HtmlTree.LI(linkContent);
++ return li;
+ }
+
+ /**
+- * Print class page indicator
++ * Get the class link.
++ *
++ * @return a content tree for the class link
+ */
+- protected void navLinkClass() {
+- navCellRevStart();
+- fontStyle("NavBarFont1Rev");
+- strongText("doclet.Class");
+- fontEnd();
+- navCellEnd();
++ protected Content getNavLinkClass() {
++ Content li = HtmlTree.LI(HtmlStyle.navBarCell1Rev, classLabel);
++ return li;
+ }
+
+ /**
+- * Print class use link
++ * Get the class use link.
++ *
++ * @return a content tree for the class use link
+ */
+- protected void navLinkClassUse() {
+- navCellStart();
+- printHyperLink("class-use/" + filename, "",
+- configuration.getText("doclet.navClassUse"), true, "NavBarFont1");
+- navCellEnd();
++ protected Content getNavLinkClassUse() {
++ Content linkContent = getHyperLink("class-use/" + filename, "", useLabel);
++ Content li = HtmlTree.LI(linkContent);
++ return li;
+ }
+
+ /**
+- * Print previous package link
++ * Get link to previous class.
++ *
++ * @return a content tree for the previous class link
+ */
+- protected void navLinkPrevious() {
+- if (prev == null) {
+- printText("doclet.Prev_Class");
+- } else {
+- printLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_CLASS, prev, "",
+- configuration.getText("doclet.Prev_Class"), true));
++ public Content getNavLinkPrevious() {
++ Content li;
++ if (prev != null) {
++ Content prevLink = new RawHtml(getLink(new LinkInfoImpl(
++ LinkInfoImpl.CONTEXT_CLASS, prev, "",
++ configuration.getText("doclet.Prev_Class"), true)));
++ li = HtmlTree.LI(prevLink);
+ }
++ else
++ li = HtmlTree.LI(prevclassLabel);
++ return li;
+ }
+
+ /**
+- * Print next package link
++ * Get link to next class.
++ *
++ * @return a content tree for the next class link
+ */
+- protected void navLinkNext() {
+- if (next == null) {
+- printText("doclet.Next_Class");
+- } else {
+- printLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_CLASS, next, "",
+- configuration.getText("doclet.Next_Class"), true));
++ public Content getNavLinkNext() {
++ Content li;
++ if (next != null) {
++ Content nextLink = new RawHtml(getLink(new LinkInfoImpl(
++ LinkInfoImpl.CONTEXT_CLASS, next, "",
++ configuration.getText("doclet.Next_Class"), true)));
++ li = HtmlTree.LI(nextLink);
+ }
++ else
++ li = HtmlTree.LI(nextclassLabel);
++ return li;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- public void writeHeader(String header) {
++ public Content getHeader(String header) {
+ String pkgname = (classDoc.containingPackage() != null)?
+ classDoc.containingPackage().name(): "";
+ String clname = classDoc.name();
+- printHtmlHeader(clname,
+- configuration.metakeywords.getMetaKeywords(classDoc), true);
+- printTop();
+- navLinks(true);
+- hr();
+- println("<!-- ======== START OF CLASS DATA ======== -->");
+- h2();
++ Content bodyTree = getBody(true, getWindowTitle(clname));
++ addTop(bodyTree);
++ addNavLinks(true, bodyTree);
++ bodyTree.addContent(HtmlConstants.START_OF_CLASS_DATA);
++ HtmlTree div = new HtmlTree(HtmlTag.DIV);
++ div.addStyle(HtmlStyle.header);
+ if (pkgname.length() > 0) {
+- font("-1"); print(pkgname); fontEnd(); br();
++ Content pkgNameContent = new StringContent(pkgname);
++ Content pkgNamePara = HtmlTree.P(HtmlStyle.subTitle, pkgNameContent);
++ div.addContent(pkgNamePara);
+ }
+ LinkInfoImpl linkInfo = new LinkInfoImpl( LinkInfoImpl.CONTEXT_CLASS_HEADER,
+- classDoc, false);
++ classDoc, false);
+ //Let's not link to ourselves in the header.
+ linkInfo.linkToSelf = false;
+- print(header + getTypeParameterLinks(linkInfo));
+- h2End();
++ Content headerContent = new StringContent(header);
++ Content heading = HtmlTree.HEADING(HtmlConstants.CLASS_PAGE_HEADING, true,
++ HtmlStyle.title, headerContent);
++ heading.addContent(new RawHtml(getTypeParameterLinks(linkInfo)));
++ div.addContent(heading);
++ bodyTree.addContent(div);
++ return bodyTree;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- public void writeFooter() {
+- println("<!-- ========= END OF CLASS DATA ========= -->");
+- hr();
+- navLinks(false);
+- printBottom();
+- printBodyHtmlEnd();
++ public Content getClassContentHeader() {
++ return getContentHeader();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- public void writeClassSignature(String modifiers) {
++ public void addFooter(Content contentTree) {
++ contentTree.addContent(HtmlConstants.END_OF_CLASS_DATA);
++ addNavLinks(false, contentTree);
++ addBottom(contentTree);
++ }
++
++ /**
++ * {@inheritDoc}
++ */
++ public void printDocument(Content contentTree) {
++ printHtmlDocument(configuration.metakeywords.getMetaKeywords(classDoc),
++ true, contentTree);
++ }
++
++ /**
++ * {@inheritDoc}
++ */
++ public Content getClassInfoTreeHeader() {
++ return getMemberTreeHeader();
++ }
++
++ /**
++ * {@inheritDoc}
++ */
++ public Content getClassInfo(Content classInfoTree) {
++ return getMemberTree(HtmlStyle.description, classInfoTree);
++ }
++
++ /**
++ * {@inheritDoc}
++ */
++ public void addClassSignature(String modifiers, Content classInfoTree) {
+ boolean isInterface = classDoc.isInterface();
+- preNoNewLine();
+- writeAnnotationInfo(classDoc);
+- print(modifiers);
++ classInfoTree.addContent(new HtmlTree(HtmlTag.BR));
++ Content pre = new HtmlTree(HtmlTag.PRE);
++ addAnnotationInfo(classDoc, pre);
++ pre.addContent(modifiers);
+ LinkInfoImpl linkInfo = new LinkInfoImpl(
+- LinkInfoImpl.CONTEXT_CLASS_SIGNATURE, classDoc, false);
++ LinkInfoImpl.CONTEXT_CLASS_SIGNATURE, classDoc, false);
+ //Let's not link to ourselves in the signature.
+ linkInfo.linkToSelf = false;
+- String name = classDoc.name() +
+- getTypeParameterLinks(linkInfo);
++ Content name = new RawHtml (classDoc.name() +
++ getTypeParameterLinks(linkInfo));
+ if (configuration().linksource) {
+- printSrcLink(classDoc, name);
++ addSrcLink(classDoc, name, pre);
+ } else {
+- strong(name);
++ pre.addContent(HtmlTree.STRONG(name));
+ }
+ if (!isInterface) {
+ Type superclass = Util.getFirstVisibleSuperClass(classDoc,
+- configuration());
++ configuration());
+ if (superclass != null) {
+- println();
+- print("extends ");
+- printLink(new LinkInfoImpl(
+- LinkInfoImpl.CONTEXT_CLASS_SIGNATURE_PARENT_NAME,
+- superclass));
++ pre.addContent("\n");
++ pre.addContent("extends ");
++ Content link = new RawHtml(getLink(new LinkInfoImpl(
++ LinkInfoImpl.CONTEXT_CLASS_SIGNATURE_PARENT_NAME,
++ superclass)));
++ pre.addContent(link);
+ }
+ }
+ Type[] implIntfacs = classDoc.interfaceTypes();
+@@ -202,34 +253,33 @@
+ for (int i = 0; i < implIntfacs.length; i++) {
+ ClassDoc classDoc = implIntfacs[i].asClassDoc();
+ if (! (classDoc.isPublic() ||
+- Util.isLinkable(classDoc, configuration()))) {
++ Util.isLinkable(classDoc, configuration()))) {
+ continue;
+ }
+ if (counter == 0) {
+- println();
+- print(isInterface? "extends " : "implements ");
++ pre.addContent("\n");
++ pre.addContent(isInterface? "extends " : "implements ");
+ } else {
+- print(", ");
++ pre.addContent(", ");
+ }
+- printLink(new LinkInfoImpl(
+- LinkInfoImpl.CONTEXT_CLASS_SIGNATURE_PARENT_NAME,
+- implIntfacs[i]));
++ Content link = new RawHtml(getLink(new LinkInfoImpl(
++ LinkInfoImpl.CONTEXT_CLASS_SIGNATURE_PARENT_NAME,
++ implIntfacs[i])));
++ pre.addContent(link);
+ counter++;
+ }
+ }
+- preEnd();
+- p();
++ classInfoTree.addContent(pre);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- public void writeClassDescription() {
++ public void addClassDescription(Content classInfoTree) {
+ if(!configuration.nocomment) {
+ // generate documentation for the class.
+ if (classDoc.inlineTags().length > 0) {
+- printInlineComment(classDoc);
+- p();
++ addInlineComment(classDoc, classInfoTree);
+ }
+ }
+ }
+@@ -237,131 +287,118 @@
+ /**
+ * {@inheritDoc}
+ */
+- public void writeClassTagInfo() {
++ public void addClassTagInfo(Content classInfoTree) {
+ if(!configuration.nocomment) {
+ // Print Information about all the tags here
+- printTags(classDoc);
+- hr();
+- p();
++ addTagsInfo(classDoc, classInfoTree);
++ }
++ }
++
++ /**
++ * Get the class hierarchy tree for the given class.
++ *
++ * @param type the class to print the hierarchy for
++ * @return a content tree for class inheritence
++ */
++ private Content getClassInheritenceTree(Type type) {
++ Type sup;
++ HtmlTree classTreeUl = new HtmlTree(HtmlTag.UL);
++ classTreeUl.addStyle(HtmlStyle.inheritance);
++ Content liTree = null;
++ do {
++ sup = Util.getFirstVisibleSuperClass(
++ type instanceof ClassDoc ? (ClassDoc) type : type.asClassDoc(),
++ configuration());
++ if (sup != null) {
++ HtmlTree ul = new HtmlTree(HtmlTag.UL);
++ ul.addStyle(HtmlStyle.inheritance);
++ ul.addContent(getTreeForClassHelper(type));
++ if (liTree != null)
++ ul.addContent(liTree);
++ Content li = HtmlTree.LI(ul);
++ liTree = li;
++ type = sup;
++ }
++ else
++ classTreeUl.addContent(getTreeForClassHelper(type));
++ }
++ while (sup != null);
++ if (liTree != null)
++ classTreeUl.addContent(liTree);
++ return classTreeUl;
++ }
++
++ /**
++ * Get the class helper tree for the given class.
++ *
++ * @param type the class to print the helper for
++ * @return a content tree for class helper
++ */
++ private Content getTreeForClassHelper(Type type) {
++ Content li = new HtmlTree(HtmlTag.LI);
++ if (type.equals(classDoc)) {
++ String typeParameters = getTypeParameterLinks(
++ new LinkInfoImpl(LinkInfoImpl.CONTEXT_TREE,
++ classDoc, false));
++ if (configuration.shouldExcludeQualifier(
++ classDoc.containingPackage().name())) {
++ li.addContent(type.asClassDoc().name());
++ li.addContent(new RawHtml(typeParameters));
++ } else {
++ li.addContent(type.asClassDoc().qualifiedName());
++ li.addContent(new RawHtml(typeParameters));
++ }
+ } else {
+- hr();
++ Content link = new RawHtml(getLink(new LinkInfoImpl(
++ LinkInfoImpl.CONTEXT_CLASS_TREE_PARENT,
++ type instanceof ClassDoc ? (ClassDoc) type : type,
++ configuration.getClassName(type.asClassDoc()), false)));
++ li.addContent(link);
++ }
++ return li;
++ }
++
++ /**
++ * {@inheritDoc}
++ */
++ public void addClassTree(Content classContentTree) {
++ if (!classDoc.isClass()) {
++ return;
++ }
++ classContentTree.addContent(getClassInheritenceTree(classDoc));
++ }
++
++ /**
++ * {@inheritDoc}
++ */
++ public void addTypeParamInfo(Content classInfoTree) {
++ if (classDoc.typeParamTags().length > 0) {
++ TagletOutput output = (new ParamTaglet()).getTagletOutput(classDoc,
++ getTagletWriterInstance(false));
++ Content typeParam = new RawHtml(output.toString());
++ Content dl = HtmlTree.DL(typeParam);
++ classInfoTree.addContent(dl);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- public void writeClassDeprecationInfo() {
+- hr();
+- Tag[] deprs = classDoc.tags("deprecated");
+- if (Util.isDeprecated(classDoc)) {
+- strongText("doclet.Deprecated");
+- if (deprs.length > 0) {
+- Tag[] commentTags = deprs[0].inlineTags();
+- if (commentTags.length > 0) {
+- space();
+- printInlineDeprecatedComment(classDoc, deprs[0]);
+- }
+- }
+- p();
+- }
+- }
+-
+- /**
+- * Generate the indent and get the line image for the class tree.
+- * For user accessibility, the image includes the alt attribute
+- * "extended by". (This method is not intended for a class
+- * implementing an interface, where "implemented by" would be required.)
+- *
+- * indent integer indicating the number of spaces to indent
+- */
+- private void writeStep(int indent) {
+- print(spaces(4 * indent - 2));
+- print("<IMG SRC=\"" + relativepathNoSlash + "/resources/inherit.gif\" " +
+- "ALT=\"" + configuration.getText("doclet.extended_by") + " \">");
+- }
+-
+- /**
+- * Print the class hierarchy tree for the given class.
+- * @param type the class to print the hierarchy for.
+- * @return return the amount that should be indented in
+- * the next level of the tree.
+- */
+- private int writeTreeForClassHelper(Type type) {
+- Type sup = Util.getFirstVisibleSuperClass(
+- type instanceof ClassDoc ? (ClassDoc) type : type.asClassDoc(),
+- configuration());
+- int indent = 0;
+- if (sup != null) {
+- indent = writeTreeForClassHelper(sup);
+- writeStep(indent);
+- }
+-
+- if (type.equals(classDoc)) {
+- String typeParameters = getTypeParameterLinks(
+- new LinkInfoImpl(
+- LinkInfoImpl.CONTEXT_TREE,
+- classDoc, false));
+- if (configuration.shouldExcludeQualifier(
+- classDoc.containingPackage().name())) {
+- strong(type.asClassDoc().name() + typeParameters);
+- } else {
+- strong(type.asClassDoc().qualifiedName() + typeParameters);
+- }
+- } else {
+- print(getLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_CLASS_TREE_PARENT,
+- type instanceof ClassDoc ? (ClassDoc) type : type,
+- configuration.getClassName(type.asClassDoc()), false)));
+- }
+- println();
+- return indent + 1;
+- }
+-
+- /**
+- * Print the class hierarchy tree for this class only.
+- */
+- public void writeClassTree() {
+- if (! classDoc.isClass()) {
+- return;
+- }
+- pre();
+- writeTreeForClassHelper(classDoc);
+- preEnd();
+- }
+-
+- /**
+- * Write the type parameter information.
+- */
+- public void writeTypeParamInfo() {
+- if (classDoc.typeParamTags().length > 0) {
+- dl();
+- dt();
+- TagletOutput output = (new ParamTaglet()).getTagletOutput(classDoc,
+- getTagletWriterInstance(false));
+- print(output.toString());
+- dtEnd();
+- dlEnd();
+- }
+- }
+-
+- /**
+- * {@inheritDoc}
+- */
+- public void writeSubClassInfo() {
++ public void addSubClassInfo(Content classInfoTree) {
+ if (classDoc.isClass()) {
+ if (classDoc.qualifiedName().equals("java.lang.Object") ||
+- classDoc.qualifiedName().equals("org.omg.CORBA.Object")) {
++ classDoc.qualifiedName().equals("org.omg.CORBA.Object")) {
+ return; // Don't generate the list, too huge
+ }
+ List subclasses = classtree.subs(classDoc, false);
+ if (subclasses.size() > 0) {
+- dl();
+- dt();
+- strongText("doclet.Subclasses");
+- dtEnd();
+- writeClassLinks(LinkInfoImpl.CONTEXT_SUBCLASSES,
+- subclasses);
+- dlEnd();
++ Content label = getResource(
++ "doclet.Subclasses");
++ Content dt = HtmlTree.DT(label);
++ Content dl = HtmlTree.DL(dt);
++ dl.addContent(getClassLinks(LinkInfoImpl.CONTEXT_SUBCLASSES,
++ subclasses));
++ classInfoTree.addContent(dl);
+ }
+ }
+ }
+@@ -369,140 +406,196 @@
+ /**
+ * {@inheritDoc}
+ */
+- public void writeSubInterfacesInfo() {
++ public void addSubInterfacesInfo(Content classInfoTree) {
+ if (classDoc.isInterface()) {
+ List subInterfaces = classtree.allSubs(classDoc, false);
+ if (subInterfaces.size() > 0) {
+- dl();
+- dt();
+- strongText("doclet.Subinterfaces");
+- dtEnd();
+- writeClassLinks(LinkInfoImpl.CONTEXT_SUBINTERFACES,
+- subInterfaces);
+- dlEnd();
++ Content label = getResource(
++ "doclet.Subinterfaces");
++ Content dt = HtmlTree.DT(label);
++ Content dl = HtmlTree.DL(dt);
++ dl.addContent(getClassLinks(LinkInfoImpl.CONTEXT_SUBINTERFACES,
++ subInterfaces));
++ classInfoTree.addContent(dl);
+ }
+ }
+ }
+
+ /**
+- * If this is the interface which are the classes, that implement this?
+- */
+- public void writeInterfaceUsageInfo () {
+- if (! classDoc.isInterface()) {
+- return;
+- }
+- if (classDoc.qualifiedName().equals("java.lang.Cloneable") ||
+- classDoc.qualifiedName().equals("java.io.Serializable")) {
+- return; // Don't generate the list, too big
+- }
+- List implcl = classtree.implementingclasses(classDoc);
+- if (implcl.size() > 0) {
+- dl();
+- dt();
+- strongText("doclet.Implementing_Classes");
+- dtEnd();
+- writeClassLinks(LinkInfoImpl.CONTEXT_IMPLEMENTED_CLASSES,
+- implcl);
+- dlEnd();
+- }
+- }
+-
+- /**
+ * {@inheritDoc}
+ */
+- public void writeImplementedInterfacesInfo() {
+- //NOTE: we really should be using ClassDoc.interfaceTypes() here, but
+- // it doesn't walk up the tree like we want it to.
+- List interfaceArray = Util.getAllInterfaces(classDoc, configuration);
+- if (classDoc.isClass() && interfaceArray.size() > 0) {
+- dl();
+- dt();
+- strongText("doclet.All_Implemented_Interfaces");
+- dtEnd();
+- writeClassLinks(LinkInfoImpl.CONTEXT_IMPLEMENTED_INTERFACES,
+- interfaceArray);
+- dlEnd();
++ public void addInterfaceUsageInfo (Content classInfoTree) {
++ if (! classDoc.isInterface()) {
++ return;
++ }
++ if (classDoc.qualifiedName().equals("java.lang.Cloneable") ||
++ classDoc.qualifiedName().equals("java.io.Serializable")) {
++ return; // Don't generate the list, too big
++ }
++ List<ClassDoc> implcl = classtree.implementingclasses(classDoc);
++ if (implcl.size() > 0) {
++ Content label = getResource(
++ "doclet.Implementing_Classes");
++ Content dt = HtmlTree.DT(label);
++ Content dl = HtmlTree.DL(dt);
++ dl.addContent(getClassLinks(LinkInfoImpl.CONTEXT_IMPLEMENTED_CLASSES,
++ implcl));
++ classInfoTree.addContent(dl);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- public void writeSuperInterfacesInfo() {
++ public void addImplementedInterfacesInfo(Content classInfoTree) {
++ //NOTE: we really should be using ClassDoc.interfaceTypes() here, but
++ // it doesn't walk up the tree like we want it to.
++ List<Type> interfaceArray = Util.getAllInterfaces(classDoc, configuration);
++ if (classDoc.isClass() && interfaceArray.size() > 0) {
++ Content label = getResource(
++ "doclet.All_Implemented_Interfaces");
++ Content dt = HtmlTree.DT(label);
++ Content dl = HtmlTree.DL(dt);
++ dl.addContent(getClassLinks(LinkInfoImpl.CONTEXT_IMPLEMENTED_INTERFACES,
++ interfaceArray));
++ classInfoTree.addContent(dl);
++ }
++ }
++
++ /**
++ * {@inheritDoc}
++ */
++ public void addSuperInterfacesInfo(Content classInfoTree) {
+ //NOTE: we really should be using ClassDoc.interfaceTypes() here, but
+ // it doesn't walk up the tree like we want it to.
+ List interfaceArray = Util.getAllInterfaces(classDoc, configuration);
+ if (classDoc.isInterface() && interfaceArray.size() > 0) {
+- dl();
+- dt();
+- strongText("doclet.All_Superinterfaces");
+- dtEnd();
+- writeClassLinks(LinkInfoImpl.CONTEXT_SUPER_INTERFACES,
+- interfaceArray);
+- dlEnd();
++ Content label = getResource(
++ "doclet.All_Superinterfaces");
++ Content dt = HtmlTree.DT(label);
++ Content dl = HtmlTree.DL(dt);
++ dl.addContent(getClassLinks(LinkInfoImpl.CONTEXT_SUPER_INTERFACES,
++ interfaceArray));
++ classInfoTree.addContent(dl);
+ }
+ }
+
+ /**
+- * Generate links to the given classes.
++ * {@inheritDoc}
+ */
+- private void writeClassLinks(int context, List list) {
++ public void addNestedClassInfo(Content classInfoTree) {
++ ClassDoc outerClass = classDoc.containingClass();
++ if (outerClass != null) {
++ Content label;
++ if (outerClass.isInterface()) {
++ label = getResource(
++ "doclet.Enclosing_Interface");
++ } else {
++ label = getResource(
++ "doclet.Enclosing_Class");
++ }
++ Content dt = HtmlTree.DT(label);
++ Content dl = HtmlTree.DL(dt);
++ Content dd = new HtmlTree(HtmlTag.DD);
++ dd.addContent(new RawHtml(getLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_CLASS, outerClass,
++ false))));
++ dl.addContent(dd);
++ classInfoTree.addContent(dl);
++ }
++ }
++
++ /**
++ * {@inheritDoc}
++ */
++ public void addClassDeprecationInfo(Content classInfoTree) {
++ Content hr = new HtmlTree(HtmlTag.HR);
++ classInfoTree.addContent(hr);
++ Tag[] deprs = classDoc.tags("deprecated");
++ if (Util.isDeprecated(classDoc)) {
++ Content strong = HtmlTree.STRONG(deprecatedPhrase);
++ Content div = HtmlTree.DIV(HtmlStyle.block, strong);
++ if (deprs.length > 0) {
++ Tag[] commentTags = deprs[0].inlineTags();
++ if (commentTags.length > 0) {
++ div.addContent(getSpace());
++ addInlineDeprecatedComment(classDoc, deprs[0], div);
++ }
++ }
++ classInfoTree.addContent(div);
++ }
++ }
++
++ /**
++ * Get links to the given classes.
++ *
++ * @param context the id of the context where the link will be printed
++ * @param list the list of classes
++ * @return a content tree for the class list
++ */
++ private Content getClassLinks(int context, List<?> list) {
+ Object[] typeList = list.toArray();
+- //Sort the list to be printed.
+- print(' ');
+- dd();
++ Content dd = new HtmlTree(HtmlTag.DD);
+ for (int i = 0; i < list.size(); i++) {
+ if (i > 0) {
+- print(", ");
++ Content separator = new StringContent(", ");
++ dd.addContent(separator);
+ }
+ if (typeList[i] instanceof ClassDoc) {
+- printLink(new LinkInfoImpl(context, (ClassDoc)(typeList[i])));
+-
++ Content link = new RawHtml(getLink(
++ new LinkInfoImpl(context, (ClassDoc)(typeList[i]))));
++ dd.addContent(link);
+ } else {
+- printLink(new LinkInfoImpl(context, (Type)(typeList[i])));
++ Content link = new RawHtml(getLink(
++ new LinkInfoImpl(context, (Type)(typeList[i]))));
++ dd.addContent(link);
+ }
+ }
+- ddEnd();
++ return dd;
+ }
+
+- protected void navLinkTree() {
+- navCellStart();
+- printHyperLink("package-tree.html", "",
+- configuration.getText("doclet.Tree"), true, "NavBarFont1");
+- navCellEnd();
++ /**
++ * {@inheritDoc}
++ */
++ protected Content getNavLinkTree() {
++ Content treeLinkContent = getHyperLink("package-tree.html",
++ "", treeLabel, "", "");
++ Content li = HtmlTree.LI(treeLinkContent);
++ return li;
+ }
+
+- protected void printSummaryDetailLinks() {
++ /**
++ * Add summary details to the navigation bar.
++ *
++ * @param subDiv the content tree to which the summary detail links will be added
++ */
++ protected void addSummaryDetailLinks(Content subDiv) {
+ try {
+- tr();
+- tdVAlignClass("top", "NavBarCell3");
+- font("-2");
+- print(" ");
+- navSummaryLinks();
+- fontEnd();
+- tdEnd();
+- tdVAlignClass("top", "NavBarCell3");
+- font("-2");
+- navDetailLinks();
+- fontEnd();
+- tdEnd();
+- trEnd();
++ Content div = HtmlTree.DIV(getNavSummaryLinks());
++ div.addContent(getNavDetailLinks());
++ subDiv.addContent(div);
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new DocletAbortException();
+ }
+ }
+
+- protected void navSummaryLinks() throws Exception {
+- printText("doclet.Summary");
+- space();
++ /**
++ * Get summary links for navigation bar.
++ *
++ * @return the content tree for the navigation summary links
++ */
++ protected Content getNavSummaryLinks() throws Exception {
++ Content li = HtmlTree.LI(summaryLabel);
++ li.addContent(getSpace());
++ Content ulNav = HtmlTree.UL(HtmlStyle.subNavList, li);
+ MemberSummaryBuilder memberSummaryBuilder = (MemberSummaryBuilder)
+- configuration.getBuilderFactory().getMemberSummaryBuilder(this);
++ configuration.getBuilderFactory().getMemberSummaryBuilder(this);
+ String[] navLinkLabels = new String[] {
+ "doclet.navNested", "doclet.navEnum", "doclet.navField", "doclet.navConstructor",
+- "doclet.navMethod"
++ "doclet.navMethod"
+ };
+ for (int i = 0; i < navLinkLabels.length; i++ ) {
++ Content liNav = new HtmlTree(HtmlTag.LI);
+ if (i == VisibleMemberMap.ENUM_CONSTANTS && ! classDoc.isEnum()) {
+ continue;
+ }
+@@ -511,38 +604,41 @@
+ }
+ AbstractMemberWriter writer =
+ ((AbstractMemberWriter) memberSummaryBuilder.
+- getMemberSummaryWriter(i));
++ getMemberSummaryWriter(i));
+ if (writer == null) {
+- printText(navLinkLabels[i]);
++ liNav.addContent(getResource(navLinkLabels[i]));
+ } else {
+- writer.navSummaryLink(
+- memberSummaryBuilder.members(i),
+- memberSummaryBuilder.getVisibleMemberMap(i));
++ writer.addNavSummaryLink(
++ memberSummaryBuilder.members(i),
++ memberSummaryBuilder.getVisibleMemberMap(i), liNav);
+ }
+ if (i < navLinkLabels.length-1) {
+- navGap();
++ addNavGap(liNav);
+ }
++ ulNav.addContent(liNav);
+ }
++ return ulNav;
+ }
+
+ /**
+- * Method navDetailLinks
++ * Get detail links for the navigation bar.
+ *
+- * @throws Exception
+- *
++ * @return the content tree for the detail links
+ */
+- protected void navDetailLinks() throws Exception {
+- printText("doclet.Detail");
+- space();
++ protected Content getNavDetailLinks() throws Exception {
++ Content li = HtmlTree.LI(detailLabel);
++ li.addContent(getSpace());
++ Content ulNav = HtmlTree.UL(HtmlStyle.subNavList, li);
+ MemberSummaryBuilder memberSummaryBuilder = (MemberSummaryBuilder)
+- configuration.getBuilderFactory().getMemberSummaryBuilder(this);
++ configuration.getBuilderFactory().getMemberSummaryBuilder(this);
+ String[] navLinkLabels = new String[] {
+ "doclet.navNested", "doclet.navEnum", "doclet.navField", "doclet.navConstructor",
+- "doclet.navMethod"
++ "doclet.navMethod"
+ };
+ for (int i = 1; i < navLinkLabels.length; i++ ) {
++ Content liNav = new HtmlTree(HtmlTag.LI);
+ AbstractMemberWriter writer =
+- ((AbstractMemberWriter) memberSummaryBuilder.
++ ((AbstractMemberWriter) memberSummaryBuilder.
+ getMemberSummaryWriter(i));
+ if (i == VisibleMemberMap.ENUM_CONSTANTS && ! classDoc.isEnum()) {
+ continue;
+@@ -551,43 +647,27 @@
+ continue;
+ }
+ if (writer == null) {
+- printText(navLinkLabels[i]);
++ liNav.addContent(getResource(navLinkLabels[i]));
+ } else {
+- writer.navDetailLink(memberSummaryBuilder.members(i));
++ writer.addNavDetailLink(memberSummaryBuilder.members(i), liNav);
+ }
+ if (i < navLinkLabels.length - 1) {
+- navGap();
++ addNavGap(liNav);
+ }
++ ulNav.addContent(liNav);
+ }
+- }
+-
+- protected void navGap() {
+- space();
+- print('|');
+- space();
++ return ulNav;
+ }
+
+ /**
+- * If this is an inner class or interface, write the enclosing class or
+- * interface.
++ * Add gap between navigation bar elements.
++ *
++ * @param liNav the content tree to which the gap will be added
+ */
+- public void writeNestedClassInfo() {
+- ClassDoc outerClass = classDoc.containingClass();
+- if (outerClass != null) {
+- dl();
+- dt();
+- if (outerClass.isInterface()) {
+- strongText("doclet.Enclosing_Interface");
+- } else {
+- strongText("doclet.Enclosing_Class");
+- }
+- dtEnd();
+- dd();
+- printLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_CLASS, outerClass,
+- false));
+- ddEnd();
+- dlEnd();
+- }
++ protected void addNavGap(Content liNav) {
++ liNav.addContent(getSpace());
++ liNav.addContent("|");
++ liNav.addContent(getSpace());
+ }
+
+ /**
+@@ -598,11 +678,4 @@
+ public ClassDoc getClassDoc() {
+ return classDoc;
+ }
+-
+- /**
+- * {@inheritDoc}
+- */
+- public void completeMemberSummaryBuild() {
+- p();
+- }
+ }
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/ConstantsSummaryWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/ConstantsSummaryWriterImpl.java
+--- langtools/src/share/classes/com/sun/tools/doclets/formats/html/ConstantsSummaryWriterImpl.java
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/ConstantsSummaryWriterImpl.java
+@@ -25,11 +25,12 @@
+
+ package com.sun.tools.doclets.formats.html;
+
++import java.io.*;
++import java.util.*;
++import com.sun.javadoc.*;
+ import com.sun.tools.doclets.internal.toolkit.*;
+ import com.sun.tools.doclets.internal.toolkit.util.*;
+-import com.sun.javadoc.*;
+-import java.io.*;
+-import java.util.*;
++import com.sun.tools.doclets.formats.html.markup.*;
+
+ /**
+ * Write the Constants Summary Page in HTML format.
+@@ -76,67 +77,106 @@
+ /**
+ * {@inheritDoc}
+ */
+- public void writeHeader() {
+- printHtmlHeader(configuration.getText("doclet.Constants_Summary"),
+- null, true);
+- printTop();
+- navLinks(true);
+- hr();
+-
+- center();
+- h1(); printText("doclet.Constants_Summary"); h1End();
+- centerEnd();
+-
+- hr(4, "noshade");
++ public Content getHeader() {
++ String label = configuration.getText("doclet.Constants_Summary");
++ Content bodyTree = getBody(true, getWindowTitle(label));
++ addTop(bodyTree);
++ addNavLinks(true, bodyTree);
++ return bodyTree;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- public void writeFooter() {
+- hr();
+- navLinks(false);
+- printBottom();
+- printBodyHtmlEnd();
++ public Content getContentsHeader() {
++ return new HtmlTree(HtmlTag.UL);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- public void writeContentsHeader() {
+- strong(configuration.getText("doclet.Contents"));
+- ul();
++ public void addLinkToPackageContent(PackageDoc pkg, String parsedPackageName,
++ Set<String> printedPackageHeaders, Content contentListTree) {
++ String packageName = pkg.name();
++ //add link to summary
++ Content link;
++ if (packageName.length() == 0) {
++ link = getHyperLink("#" + DocletConstants.UNNAMED_PACKAGE_ANCHOR,
++ "", defaultPackageLabel, "", "");
++ } else {
++ Content packageNameContent = getPackageLabel(parsedPackageName);
++ packageNameContent.addContent(".*");
++ link = getHyperLink("#" + parsedPackageName,
++ "", packageNameContent, "", "");
++ printedPackageHeaders.add(parsedPackageName);
++ }
++ contentListTree.addContent(HtmlTree.LI(link));
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- public void writeContentsFooter() {
+- ulEnd();
+- println();
++ public Content getContentsList(Content contentListTree) {
++ Content titleContent = getResource(
++ "doclet.Constants_Summary");
++ Content pHeading = HtmlTree.HEADING(HtmlConstants.TITLE_HEADING, true,
++ HtmlStyle.title, titleContent);
++ Content div = HtmlTree.DIV(HtmlStyle.header, pHeading);
++ Content headingContent = getResource(
++ "doclet.Contents");
++ div.addContent(HtmlTree.HEADING(HtmlConstants.CONTENT_HEADING, true,
++ headingContent));
++ div.addContent(contentListTree);
++ return div;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- public void writeLinkToPackageContent(PackageDoc pkg, String parsedPackageName, Set printedPackageHeaders) {
+- String packageName = pkg.name();
+- //add link to summary
+- li();
+- if (packageName.length() == 0) {
+- printHyperLink("#" + DocletConstants.UNNAMED_PACKAGE_ANCHOR,
+- DocletConstants.DEFAULT_PACKAGE_NAME);
+- } else {
+- printHyperLink("#" + parsedPackageName, parsedPackageName + ".*");
+- printedPackageHeaders.add(parsedPackageName);
+- }
+- println();
++ public Content getConstantSummaries() {
++ HtmlTree summariesDiv = new HtmlTree(HtmlTag.DIV);
++ summariesDiv.addStyle(HtmlStyle.constantValuesContainer);
++ return summariesDiv;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- public void writeConstantMembersHeader(ClassDoc cd) {
++ public void addPackageName(PackageDoc pkg, String parsedPackageName,
++ Content summariesTree) {
++ Content pkgNameContent;
++ if (parsedPackageName.length() == 0) {
++ summariesTree.addContent(getMarkerAnchor(
++ DocletConstants.UNNAMED_PACKAGE_ANCHOR));
++ pkgNameContent = defaultPackageLabel;
++ } else {
++ summariesTree.addContent(getMarkerAnchor(
++ parsedPackageName));
++ pkgNameContent = getPackageLabel(parsedPackageName);
++ }
++ Content headingContent = new StringContent(".*");
++ Content heading = HtmlTree.HEADING(HtmlConstants.PACKAGE_HEADING, true,
++ pkgNameContent);
++ heading.addContent(headingContent);
++ summariesTree.addContent(heading);
++ }
++
++ /**
++ * {@inheritDoc}
++ */
++ public Content getClassConstantHeader() {
++ HtmlTree ul = new HtmlTree(HtmlTag.UL);
++ ul.addStyle(HtmlStyle.blockList);
++ return ul;
++ }
++
++ /**
++ * Get the table caption and header for the constant summary table
++ *
++ * @param cd classdoc to be documented
++ * @return constant members header content
++ */
++ public Content getConstantMembersHeader(ClassDoc cd) {
+ //generate links backward only to public classes.
+ String classlink = (cd.isPublic() || cd.isProtected())?
+ getLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_CONSTANT_SUMMARY, cd,
+@@ -144,112 +184,120 @@
+ cd.qualifiedName();
+ String name = cd.containingPackage().name();
+ if (name.length() > 0) {
+- writeClassName(name + "." + classlink);
++ return getClassName(name + "." + classlink);
+ } else {
+- writeClassName(classlink);
++ return getClassName(classlink);
+ }
+ }
+
+ /**
++ * Get the class name in the table caption and the table header.
++ *
++ * @param classStr the class name to print.
++ * @return the table caption and header
++ */
++ protected Content getClassName(String classStr) {
++ Content table = HtmlTree.TABLE(0, 3, 0, constantsTableSummary,
++ getTableCaption(classStr));
++ table.addContent(getSummaryTableHeader(constantsTableHeader, "col"));
++ return table;
++ }
++
++ /**
+ * {@inheritDoc}
+ */
+- public void writeConstantMembersFooter(ClassDoc cd) {
+- tableFooter(false);
+- p();
++ public void addConstantMembers(ClassDoc cd, List<FieldDoc> fields,
++ Content classConstantTree) {
++ currentClassDoc = cd;
++ Content tbody = new HtmlTree(HtmlTag.TBODY);
++ for (int i = 0; i < fields.size(); ++i) {
++ HtmlTree tr = new HtmlTree(HtmlTag.TR);
++ if (i%2 == 0)
++ tr.addStyle(HtmlStyle.altColor);
++ else
++ tr.addStyle(HtmlStyle.rowColor);
++ addConstantMember(fields.get(i), tr);
++ tbody.addContent(tr);
++ }
++ Content table = getConstantMembersHeader(cd);
++ table.addContent(tbody);
++ Content li = HtmlTree.LI(HtmlStyle.blockList, table);
++ classConstantTree.addContent(li);
+ }
+
+ /**
+- * Print the class name in the table heading.
+- * @param classStr the heading to print.
++ * Add the row for the constant summary table.
++ *
++ * @param member the field to be documented.
++ * @param trTree an htmltree object for the table row
+ */
+- protected void writeClassName(String classStr) {
+- table(1, 3, 0, constantsTableSummary);
+- tableSubCaptionStart();
+- write(classStr);
+- tableCaptionEnd();
+- summaryTableHeader(constantsTableHeader, "col");
++ private void addConstantMember(FieldDoc member, HtmlTree trTree) {
++ trTree.addContent(getTypeColumn(member));
++ trTree.addContent(getNameColumn(member));
++ trTree.addContent(getValue(member));
+ }
+
+- private void tableFooter(boolean isHeader) {
+- fontEnd();
+- if (isHeader) {
+- thEnd();
+- } else {
+- tdEnd();
++ /**
++ * Get the type column for the constant summary table row.
++ *
++ * @param member the field to be documented.
++ * @return the type column of the constant table row
++ */
++ private Content getTypeColumn(FieldDoc member) {
++ Content anchor = getMarkerAnchor(currentClassDoc.qualifiedName() +
++ "." + member.name());
++ Content tdType = HtmlTree.TD(HtmlStyle.colFirst, anchor);
++ Content code = new HtmlTree(HtmlTag.CODE);
++ StringTokenizer mods = new StringTokenizer(member.modifiers());
++ while(mods.hasMoreTokens()) {
++ Content modifier = new StringContent(mods.nextToken());
++ code.addContent(modifier);
++ code.addContent(getSpace());
+ }
+- trEnd();
+- tableEnd();
+- p();
++ Content type = new RawHtml(getLink(new LinkInfoImpl(
++ LinkInfoImpl.CONTEXT_CONSTANT_SUMMARY, member.type())));
++ code.addContent(type);
++ tdType.addContent(code);
++ return tdType;
++ }
++
++ /**
++ * Get the name column for the constant summary table row.
++ *
++ * @param member the field to be documented.
++ * @return the name column of the constant table row
++ */
++ private Content getNameColumn(FieldDoc member) {
++ Content nameContent = new RawHtml(getDocLink(
++ LinkInfoImpl.CONTEXT_CONSTANT_SUMMARY, member, member.name(), false));
++ Content code = HtmlTree.CODE(nameContent);
++ return HtmlTree.TD(code);
++ }
++
++ /**
++ * Get the value column for the constant summary table row.
++ *
++ * @param member the field to be documented.
++ * @return the value column of the constant table row
++ */
++ private Content getValue(FieldDoc member) {
++ Content valueContent = new StringContent(member.constantValueExpression());
++ Content code = HtmlTree.CODE(valueContent);
++ return HtmlTree.TD(HtmlStyle.colLast, code);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- public void writePackageName(PackageDoc pkg, String parsedPackageName) {
+- String pkgname;
+- if (parsedPackageName.length() == 0) {
+- anchor(DocletConstants.UNNAMED_PACKAGE_ANCHOR);
+- pkgname = DocletConstants.DEFAULT_PACKAGE_NAME;
+- } else {
+- anchor(parsedPackageName);
+- pkgname = parsedPackageName;
+- }
+- table(1, "100%", 3, 0);
+- trBgcolorStyle("#CCCCFF", "TableHeadingColor");
+- thAlign("left");
+- font("+2");
+- write(pkgname + ".*");
+- tableFooter(true);
++ public void addFooter(Content contentTree) {
++ addNavLinks(false, contentTree);
++ addBottom(contentTree);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- public void writeConstantMembers(ClassDoc cd, List fields) {
+- currentClassDoc = cd;
+- for (int i = 0; i < fields.size(); ++i) {
+- writeConstantMember((FieldDoc)(fields.get(i)));
+- }
+- }
+-
+- private void writeConstantMember(FieldDoc member) {
+- trBgcolorStyle("white", "TableRowColor");
+- anchor(currentClassDoc.qualifiedName() + "." + member.name());
+- writeTypeColumn(member);
+- writeNameColumn(member);
+- writeValue(member);
+- trEnd();
+- }
+-
+- private void writeTypeColumn(FieldDoc member) {
+- tdAlign("right");
+- font("-1");
+- code();
+- StringTokenizer mods = new StringTokenizer(member.modifiers());
+- while(mods.hasMoreTokens()) {
+- print(mods.nextToken() + "&nbsp;");
+- }
+- printLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_CONSTANT_SUMMARY,
+- member.type()));
+- codeEnd();
+- fontEnd();
+- tdEnd();
+- }
+-
+- private void writeNameColumn(FieldDoc member) {
+- tdAlign("left");
+- code();
+- printDocLink(LinkInfoImpl.CONTEXT_CONSTANT_SUMMARY, member,
+- member.name(), false);
+- codeEnd();
+- tdEnd();
+- }
+-
+- private void writeValue(FieldDoc member) {
+- tdAlign("right");
+- code();
+- print(Util.escapeHtmlChars(member.constantValueExpression()));
+- codeEnd();
+- tdEnd();
++ public void printDocument(Content contentTree) {
++ printHtmlDocument(null, true, contentTree);
+ }
+ }
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/ConstructorWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/ConstructorWriterImpl.java
+--- langtools/src/share/classes/com/sun/tools/doclets/formats/html/ConstructorWriterImpl.java
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/ConstructorWriterImpl.java
+@@ -29,6 +29,7 @@
+ import java.util.*;
+
+ import com.sun.javadoc.*;
++import com.sun.tools.doclets.formats.html.markup.*;
+ import com.sun.tools.doclets.internal.toolkit.*;
+ import com.sun.tools.doclets.internal.toolkit.util.*;
+
+@@ -43,7 +44,6 @@
+ implements ConstructorWriter, MemberSummaryWriter {
+
+ private boolean foundNonPubConstructor = false;
+- private boolean printedSummaryHeader = false;
+
+ /**
+ * Construct a new ConstructorWriterImpl.
+@@ -75,125 +75,112 @@
+ }
+
+ /**
+- * Write the constructors summary header for the given class.
+- *
+- * @param classDoc the class the summary belongs to.
++ * {@inheritDoc}
+ */
+- public void writeMemberSummaryHeader(ClassDoc classDoc) {
+- printedSummaryHeader = true;
+- writer.println();
+- writer.println("<!-- ======== CONSTRUCTOR SUMMARY ======== -->");
+- writer.println();
+- writer.printSummaryHeader(this, classDoc);
++ public Content getMemberSummaryHeader(ClassDoc classDoc,
++ Content memberSummaryTree) {
++ memberSummaryTree.addContent(HtmlConstants.START_OF_CONSTRUCTOR_SUMMARY);
++ Content memberTree = writer.getMemberTreeHeader();
++ writer.addSummaryHeader(this, classDoc, memberTree);
++ return memberTree;
+ }
+
+ /**
+- * Write the constructors summary footer for the given class.
+- *
+- * @param classDoc the class the summary belongs to.
++ * {@inheritDoc}
+ */
+- public void writeMemberSummaryFooter(ClassDoc classDoc) {
+- writer.printSummaryFooter(this, classDoc);
++ public Content getConstructorDetailsTreeHeader(ClassDoc classDoc,
++ Content memberDetailsTree) {
++ memberDetailsTree.addContent(HtmlConstants.START_OF_CONSTRUCTOR_DETAILS);
++ Content constructorDetailsTree = writer.getMemberTreeHeader();
++ constructorDetailsTree.addContent(writer.getMarkerAnchor("constructor_detail"));
++ Content heading = HtmlTree.HEADING(HtmlConstants.DETAILS_HEADING,
++ writer.constructorDetailsLabel);
++ constructorDetailsTree.addContent(heading);
++ return constructorDetailsTree;
+ }
+
+ /**
+- * Write the header for the constructor documentation.
+- *
+- * @param classDoc the class that the constructors belong to.
++ * {@inheritDoc}
+ */
+- public void writeHeader(ClassDoc classDoc, String header) {
+- writer.println();
+- writer.println("<!-- ========= CONSTRUCTOR DETAIL ======== -->");
+- writer.println();
+- writer.anchor("constructor_detail");
+- writer.printTableHeadingBackground(header);
++ public Content getConstructorDocTreeHeader(ConstructorDoc constructor,
++ Content constructorDetailsTree) {
++ String erasureAnchor;
++ if ((erasureAnchor = getErasureAnchor(constructor)) != null) {
++ constructorDetailsTree.addContent(writer.getMarkerAnchor((erasureAnchor)));
++ }
++ constructorDetailsTree.addContent(
++ writer.getMarkerAnchor(writer.getAnchor(constructor)));
++ Content constructorDocTree = writer.getMemberTreeHeader();
++ Content heading = new HtmlTree(HtmlConstants.MEMBER_HEADING);
++ heading.addContent(constructor.name());
++ constructorDocTree.addContent(heading);
++ return constructorDocTree;
+ }
+
+ /**
+- * Write the constructor header for the given constructor.
+- *
+- * @param constructor the constructor being documented.
+- * @param isFirst the flag to indicate whether or not the constructor is the
+- * first to be documented.
++ * {@inheritDoc}
+ */
+- public void writeConstructorHeader(ConstructorDoc constructor, boolean isFirst) {
+- if (! isFirst) {
+- writer.printMemberHeader();
++ public Content getSignature(ConstructorDoc constructor) {
++ writer.displayLength = 0;
++ Content pre = new HtmlTree(HtmlTag.PRE);
++ writer.addAnnotationInfo(constructor, pre);
++ addModifiers(constructor, pre);
++ if (configuration().linksource) {
++ Content constructorName = new StringContent(constructor.name());
++ writer.addSrcLink(constructor, constructorName, pre);
++ } else {
++ addName(constructor.name(), pre);
+ }
+- writer.println();
+- String erasureAnchor;
+- if ((erasureAnchor = getErasureAnchor(constructor)) != null) {
+- writer.anchor(erasureAnchor);
+- }
+- writer.anchor(constructor);
+- writer.h3();
+- writer.print(constructor.name());
+- writer.h3End();
++ addParameters(constructor, pre);
++ addExceptions(constructor, pre);
++ return pre;
+ }
+
+ /**
+- * Write the signature for the given constructor.
+- *
+- * @param constructor the constructor being documented.
++ * {@inheritDoc}
+ */
+- public void writeSignature(ConstructorDoc constructor) {
+- writer.displayLength = 0;
+- writer.pre();
+- writer.writeAnnotationInfo(constructor);
+- printModifiers(constructor);
+- //printReturnType((ConstructorDoc)constructor);
+- if (configuration().linksource) {
+- writer.printSrcLink(constructor, constructor.name());
+- } else {
+- strong(constructor.name());
+- }
+- writeParameters(constructor);
+- writeExceptions(constructor);
+- writer.preEnd();
+- assert !writer.getMemberDetailsListPrinted();
++ @Override
++ public void setSummaryColumnStyle(HtmlTree tdTree) {
++ if (foundNonPubConstructor)
++ tdTree.addStyle(HtmlStyle.colLast);
++ else
++ tdTree.addStyle(HtmlStyle.colOne);
+ }
+
+ /**
+- * Write the deprecated output for the given constructor.
+- *
+- * @param constructor the constructor being documented.
++ * {@inheritDoc}
+ */
+- public void writeDeprecated(ConstructorDoc constructor) {
+- printDeprecated(constructor);
++ public void addDeprecated(ConstructorDoc constructor, Content constructorDocTree) {
++ addDeprecatedInfo(constructor, constructorDocTree);
+ }
+
+ /**
+- * Write the comments for the given constructor.
+- *
+- * @param constructor the constructor being documented.
++ * {@inheritDoc}
+ */
+- public void writeComments(ConstructorDoc constructor) {
+- printComment(constructor);
++ public void addComments(ConstructorDoc constructor, Content constructorDocTree) {
++ addComment(constructor, constructorDocTree);
+ }
+
+ /**
+- * Write the tag output for the given constructor.
+- *
+- * @param constructor the constructor being documented.
++ * {@inheritDoc}
+ */
+- public void writeTags(ConstructorDoc constructor) {
+- writer.printTags(constructor);
++ public void addTags(ConstructorDoc constructor, Content constructorDocTree) {
++ writer.addTagsInfo(constructor, constructorDocTree);
+ }
+
+ /**
+- * Write the constructor footer.
++ * {@inheritDoc}
+ */
+- public void writeConstructorFooter() {
+- printMemberFooter();
++ public Content getConstructorDetails(Content constructorDetailsTree) {
++ return getMemberTree(constructorDetailsTree);
+ }
+
+ /**
+- * Write the footer for the constructor documentation.
+- *
+- * @param classDoc the class that the constructors belong to.
++ * {@inheritDoc}
+ */
+- public void writeFooter(ClassDoc classDoc) {
+- //No footer to write for constructor documentation
++ public Content getConstructorDoc(Content constructorDocTree,
++ boolean isLastContent) {
++ return getMemberTree(constructorDocTree, isLastContent);
+ }
+
+ /**
+@@ -212,17 +199,35 @@
+ this.foundNonPubConstructor = foundNonPubConstructor;
+ }
+
+- public void printSummaryLabel() {
+- writer.printText("doclet.Constructor_Summary");
++ /**
++ * {@inheritDoc}
++ */
++ public void addSummaryLabel(Content memberTree) {
++ Content label = HtmlTree.HEADING(HtmlConstants.SUMMARY_HEADING,
++ writer.getResource("doclet.Constructor_Summary"));
++ memberTree.addContent(label);
+ }
+
+- public void printTableSummary() {
+- writer.tableIndexSummary(configuration().getText("doclet.Member_Table_Summary",
++ /**
++ * {@inheritDoc}
++ */
++ public String getTableSummary() {
++ return configuration().getText("doclet.Member_Table_Summary",
+ configuration().getText("doclet.Constructor_Summary"),
+- configuration().getText("doclet.constructors")));
++ configuration().getText("doclet.constructors"));
+ }
+
+- public void printSummaryTableHeader(ProgramElementDoc member) {
++ /**
++ * {@inheritDoc}
++ */
++ public String getCaption() {
++ return configuration().getText("doclet.Constructors");
++ }
++
++ /**
++ * {@inheritDoc}
++ */
++ public String[] getSummaryTableHeader(ProgramElementDoc member) {
+ String[] header;
+ if (foundNonPubConstructor) {
+ header = new String[] {
+@@ -239,87 +244,73 @@
+ configuration().getText("doclet.Description"))
+ };
+ }
+- writer.summaryTableHeader(header, "col");
++ return header;
+ }
+
+- public void printSummaryAnchor(ClassDoc cd) {
+- writer.anchor("constructor_summary");
++ /**
++ * {@inheritDoc}
++ */
++ public void addSummaryAnchor(ClassDoc cd, Content memberTree) {
++ memberTree.addContent(writer.getMarkerAnchor("constructor_summary"));
+ }
+
+- public void printInheritedSummaryAnchor(ClassDoc cd) {
+- } // no such
++ /**
++ * {@inheritDoc}
++ */
++ public void addInheritedSummaryAnchor(ClassDoc cd, Content inheritedTree) {
++ }
+
+- public void printInheritedSummaryLabel(ClassDoc cd) {
+- // no such
++ /**
++ * {@inheritDoc}
++ */
++ public void addInheritedSummaryLabel(ClassDoc cd, Content inheritedTree) {
+ }
+
+ public int getMemberKind() {
+ return VisibleMemberMap.CONSTRUCTORS;
+ }
+
+- protected void navSummaryLink(List members) {
+- printNavSummaryLink(classdoc,
+- members.size() > 0? true: false);
+- }
+-
+- protected void printNavSummaryLink(ClassDoc cd, boolean link) {
++ /**
++ * {@inheritDoc}
++ */
++ protected Content getNavSummaryLink(ClassDoc cd, boolean link) {
+ if (link) {
+- writer.printHyperLink("", "constructor_summary",
+- ConfigurationImpl.getInstance().getText("doclet.navConstructor"));
++ return writer.getHyperLink("", "constructor_summary",
++ writer.getResource("doclet.navConstructor"));
+ } else {
+- writer.printText("doclet.navConstructor");
+- }
+- }
+-
+- protected void printNavDetailLink(boolean link) {
+- if (link) {
+- writer.printHyperLink("", "constructor_detail",
+- ConfigurationImpl.getInstance().getText("doclet.navConstructor"));
+- } else {
+- writer.printText("doclet.navConstructor");
+- }
+- }
+-
+- protected void printSummaryType(ProgramElementDoc member) {
+- if (foundNonPubConstructor) {
+- writer.printTypeSummaryHeader();
+- if (member.isProtected()) {
+- print("protected ");
+- } else if (member.isPrivate()) {
+- print("private ");
+- } else if (member.isPublic()) {
+- writer.space();
+- } else {
+- writer.printText("doclet.Package_private");
+- }
+- writer.printTypeSummaryFooter();
+- }
+- }
+-
+- /**
+- * Write the inherited member summary header for the given class.
+- *
+- * @param classDoc the class the summary belongs to.
+- */
+- public void writeInheritedMemberSummaryHeader(ClassDoc classDoc) {
+- if(! printedSummaryHeader){
+- //We don't want inherited summary to not be under heading.
+- writeMemberSummaryHeader(classDoc);
+- writeMemberSummaryFooter(classDoc);
+- printedSummaryHeader = true;
++ return writer.getResource("doclet.navConstructor");
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- public void writeInheritedMemberSummary(ClassDoc classDoc,
+- ProgramElementDoc member, boolean isFirst, boolean isLast) {}
++ protected void addNavDetailLink(boolean link, Content liNav) {
++ if (link) {
++ liNav.addContent(writer.getHyperLink("", "constructor_detail",
++ writer.getResource("doclet.navConstructor")));
++ } else {
++ liNav.addContent(writer.getResource("doclet.navConstructor"));
++ }
++ }
+
+ /**
+- * Write the inherited member summary footer for the given class.
+- *
+- * @param classDoc the class the summary belongs to.
++ * {@inheritDoc}
+ */
+- public void writeInheritedMemberSummaryFooter(ClassDoc classDoc) {}
++ protected void addSummaryType(ProgramElementDoc member, Content tdSummaryType) {
++ if (foundNonPubConstructor) {
++ Content code = new HtmlTree(HtmlTag.CODE);
++ if (member.isProtected()) {
++ code.addContent("protected ");
++ } else if (member.isPrivate()) {
++ code.addContent("private ");
++ } else if (member.isPublic()) {
++ code.addContent(writer.getSpace());
++ } else {
++ code.addContent(
++ configuration().getText("doclet.Package_private"));
++ }
++ tdSummaryType.addContent(code);
++ }
++ }
+ }
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/DeprecatedListWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/DeprecatedListWriter.java
+--- langtools/src/share/classes/com/sun/tools/doclets/formats/html/DeprecatedListWriter.java
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/DeprecatedListWriter.java
+@@ -25,9 +25,11 @@
+
+ package com.sun.tools.doclets.formats.html;
+
++import java.io.*;
++import com.sun.tools.doclets.internal.toolkit.*;
+ import com.sun.tools.doclets.internal.toolkit.util.DeprecatedAPIListBuilder;
+ import com.sun.tools.doclets.internal.toolkit.util.*;
+-import java.io.*;
++import com.sun.tools.doclets.formats.html.markup.*;
+
+ /**
+ * Generate File to list all the deprecated classes and class members with the
+@@ -125,28 +127,21 @@
+ }
+
+ /**
+- * Print the deprecated API list. Separately print all class kinds and
+- * member kinds.
++ * Generate the deprecated API list.
+ *
+ * @param deprapi list of deprecated API built already.
+ */
+ protected void generateDeprecatedListFile(DeprecatedAPIListBuilder deprapi)
+- throws IOException {
+- writeHeader();
+-
+- strong(configuration.getText("doclet.Contents"));
+- ul();
+- for (int i = 0; i < DeprecatedAPIListBuilder.NUM_TYPES; i++) {
+- writeIndexLink(deprapi, i);
+- }
+- ulEnd();
+- println();
+-
++ throws IOException {
++ Content body = getHeader();
++ body.addContent(getContentsList(deprapi));
+ String memberTableSummary;
+ String[] memberTableHeader = new String[1];
++ HtmlTree div = new HtmlTree(HtmlTag.DIV);
++ div.addStyle(HtmlStyle.contentContainer);
+ for (int i = 0; i < DeprecatedAPIListBuilder.NUM_TYPES; i++) {
+ if (deprapi.hasDocumentation(i)) {
+- writeAnchor(deprapi, i);
++ addAnchor(deprapi, i, div);
+ memberTableSummary =
+ configuration.getText("doclet.Member_Table_Summary",
+ configuration.getText(HEADING_KEYS[i]),
+@@ -154,66 +149,87 @@
+ memberTableHeader[0] = configuration.getText("doclet.0_and_1",
+ configuration.getText(HEADER_KEYS[i]),
+ configuration.getText("doclet.Description"));
+- writers[i].printDeprecatedAPI(deprapi.getList(i),
+- HEADING_KEYS[i], memberTableSummary, memberTableHeader);
++ writers[i].addDeprecatedAPI(deprapi.getList(i),
++ HEADING_KEYS[i], memberTableSummary, memberTableHeader, div);
+ }
+ }
+- printDeprecatedFooter();
++ body.addContent(div);
++ addNavLinks(false, body);
++ addBottom(body);
++ printHtmlDocument(null, true, body);
+ }
+
+- private void writeIndexLink(DeprecatedAPIListBuilder builder,
+- int type) {
++ /**
++ * Add the index link.
++ *
++ * @param builder the deprecated list builder
++ * @param type the type of list being documented
++ * @param contentTree the content tree to which the index link will be added
++ */
++ private void addIndexLink(DeprecatedAPIListBuilder builder,
++ int type, Content contentTree) {
+ if (builder.hasDocumentation(type)) {
+- li();
+- printHyperLink("#" + ANCHORS[type],
+- configuration.getText(HEADING_KEYS[type]));
+- println();
+- }
+- }
+-
+- private void writeAnchor(DeprecatedAPIListBuilder builder, int type) {
+- if (builder.hasDocumentation(type)) {
+- anchor(ANCHORS[type]);
++ Content li = HtmlTree.LI(getHyperLink("#" + ANCHORS[type],
++ getResource(HEADING_KEYS[type])));
++ contentTree.addContent(li);
+ }
+ }
+
+ /**
+- * Print the navigation bar and header for the deprecated API Listing.
++ * Get the contents list.
++ *
++ * @param deprapi the deprecated list builder
++ * @return a content tree for the contents list
+ */
+- protected void writeHeader() {
+- printHtmlHeader(configuration.getText("doclet.Window_Deprecated_List"),
+- null, true);
+- printTop();
+- navLinks(true);
+- hr();
+- center();
+- h2();
+- strongText("doclet.Deprecated_API");
+- h2End();
+- centerEnd();
+-
+- hr(4, "noshade");
++ public Content getContentsList(DeprecatedAPIListBuilder deprapi) {
++ Content headContent = getResource("doclet.Deprecated_API");
++ Content heading = HtmlTree.HEADING(HtmlConstants.TITLE_HEADING, true,
++ HtmlStyle.title, headContent);
++ Content div = HtmlTree.DIV(HtmlStyle.header, heading);
++ Content headingContent = getResource("doclet.Contents");
++ div.addContent(HtmlTree.HEADING(HtmlConstants.CONTENT_HEADING, true,
++ headingContent));
++ Content ul = new HtmlTree(HtmlTag.UL);
++ for (int i = 0; i < DeprecatedAPIListBuilder.NUM_TYPES; i++) {
++ addIndexLink(deprapi, i, ul);
++ }
++ div.addContent(ul);
++ return div;
+ }
+
+ /**
+- * Print the navigation bar and the footer for the deprecated API Listing.
++ * Add the anchor.
++ *
++ * @param builder the deprecated list builder
++ * @param type the type of list being documented
++ * @param contentTree the content tree to which the anchor will be added
+ */
+- protected void printDeprecatedFooter() {
+- hr();
+- navLinks(false);
+- printBottom();
+- printBodyHtmlEnd();
++ private void addAnchor(DeprecatedAPIListBuilder builder, int type, Content htmlTree) {
++ if (builder.hasDocumentation(type)) {
++ htmlTree.addContent(getMarkerAnchor(ANCHORS[type]));
++ }
+ }
+
+ /**
+- * Highlight the word "Deprecated" in the navigation bar as this is the same
+- * page.
++ * Get the header for the deprecated API Listing.
++ *
++ * @return a content tree for the header
+ */
+- protected void navLinkDeprecated() {
+- navCellRevStart();
+- fontStyle("NavBarFont1Rev");
+- strongText("doclet.navDeprecated");
+- fontEnd();
+- navCellEnd();
++ public Content getHeader() {
++ String title = configuration.getText("doclet.Window_Deprecated_List");
++ Content bodyTree = getBody(true, getWindowTitle(title));
++ addTop(bodyTree);
++ addNavLinks(true, bodyTree);
++ return bodyTree;
++ }
++
++ /**
++ * Get the deprecated label.
++ *
++ * @return a content tree for the deprecated label
++ */
++ protected Content getNavLinkDeprecated() {
++ Content li = HtmlTree.LI(HtmlStyle.navBarCell1Rev, deprecatedLabel);
++ return li;
+ }
+ }
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/EnumConstantWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/EnumConstantWriterImpl.java
+--- langtools/src/share/classes/com/sun/tools/doclets/formats/html/EnumConstantWriterImpl.java
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/EnumConstantWriterImpl.java
+@@ -28,6 +28,7 @@
+ import java.io.*;
+
+ import com.sun.javadoc.*;
++import com.sun.tools.doclets.formats.html.markup.*;
+ import com.sun.tools.doclets.internal.toolkit.*;
+ import com.sun.tools.doclets.internal.toolkit.util.*;
+
+@@ -40,8 +41,6 @@
+ public class EnumConstantWriterImpl extends AbstractMemberWriter
+ implements EnumConstantWriter, MemberSummaryWriter {
+
+- private boolean printedSummaryHeader = false;
+-
+ public EnumConstantWriterImpl(SubWriterHolderWriter writer,
+ ClassDoc classdoc) {
+ super(writer, classdoc);
+@@ -52,136 +51,98 @@
+ }
+
+ /**
+- * Write the enum constant summary header for the given class.
+- *
+- * @param classDoc the class the summary belongs to.
++ * {@inheritDoc}
+ */
+- public void writeMemberSummaryHeader(ClassDoc classDoc) {
+- printedSummaryHeader = true;
+- writer.println("<!-- =========== ENUM CONSTANT SUMMARY =========== -->");
+- writer.println();
+- writer.printSummaryHeader(this, classDoc);
+- }
+-
+- /**
+- * Write the enum constant summary footer for the given class.
+- *
+- * @param classDoc the class the summary belongs to.
+- */
+- public void writeMemberSummaryFooter(ClassDoc classDoc) {
+- writer.printSummaryFooter(this, classDoc);
+- }
+-
+- /**
+- * Write the inherited enum constant summary header for the given class.
+- *
+- * @param classDoc the class the summary belongs to.
+- */
+- public void writeInheritedMemberSummaryHeader(ClassDoc classDoc) {
+- if(! printedSummaryHeader){
+- //We don't want inherited summary to not be under heading.
+- writeMemberSummaryHeader(classDoc);
+- writeMemberSummaryFooter(classDoc);
+- printedSummaryHeader = true;
+- }
+- writer.printInheritedSummaryHeader(this, classDoc);
++ public Content getMemberSummaryHeader(ClassDoc classDoc,
++ Content memberSummaryTree) {
++ memberSummaryTree.addContent(HtmlConstants.START_OF_ENUM_CONSTANT_SUMMARY);
++ Content memberTree = writer.getMemberTreeHeader();
++ writer.addSummaryHeader(this, classDoc, memberTree);
++ return memberTree;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- public void writeInheritedMemberSummary(ClassDoc classDoc,
+- ProgramElementDoc enumConstant, boolean isFirst, boolean isLast) {
+- writer.printInheritedSummaryMember(this, classDoc, enumConstant, isFirst);
+- }
+-
+- /**
+- * Write the inherited enum constant summary footer for the given class.
+- *
+- * @param classDoc the class the summary belongs to.
+- */
+- public void writeInheritedMemberSummaryFooter(ClassDoc classDoc) {
+- writer.printInheritedSummaryFooter(this, classDoc);
++ public Content getEnumConstantsDetailsTreeHeader(ClassDoc classDoc,
++ Content memberDetailsTree) {
++ memberDetailsTree.addContent(HtmlConstants.START_OF_ENUM_CONSTANT_DETAILS);
++ Content enumConstantsDetailsTree = writer.getMemberTreeHeader();
++ enumConstantsDetailsTree.addContent(writer.getMarkerAnchor("enum_constant_detail"));
++ Content heading = HtmlTree.HEADING(HtmlConstants.DETAILS_HEADING,
++ writer.enumConstantsDetailsLabel);
++ enumConstantsDetailsTree.addContent(heading);
++ return enumConstantsDetailsTree;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- public void writeHeader(ClassDoc classDoc, String header) {
+- writer.println();
+- writer.println("<!-- ============ ENUM CONSTANT DETAIL =========== -->");
+- writer.println();
+- writer.anchor("enum_constant_detail");
+- writer.printTableHeadingBackground(header);
+- writer.println();
++ public Content getEnumConstantsTreeHeader(FieldDoc enumConstant,
++ Content enumConstantsDetailsTree) {
++ enumConstantsDetailsTree.addContent(
++ writer.getMarkerAnchor(enumConstant.name()));
++ Content enumConstantsTree = writer.getMemberTreeHeader();
++ Content heading = new HtmlTree(HtmlConstants.MEMBER_HEADING);
++ heading.addContent(enumConstant.name());
++ enumConstantsTree.addContent(heading);
++ return enumConstantsTree;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- public void writeEnumConstantHeader(FieldDoc enumConstant, boolean isFirst) {
+- if (! isFirst) {
+- writer.printMemberHeader();
+- writer.println("");
++ public Content getSignature(FieldDoc enumConstant) {
++ Content pre = new HtmlTree(HtmlTag.PRE);
++ writer.addAnnotationInfo(enumConstant, pre);
++ addModifiers(enumConstant, pre);
++ Content enumConstantLink = new RawHtml(writer.getLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_MEMBER,
++ enumConstant.type())));
++ pre.addContent(enumConstantLink);
++ pre.addContent(" ");
++ if (configuration().linksource) {
++ Content enumConstantName = new StringContent(enumConstant.name());
++ writer.addSrcLink(enumConstant, enumConstantName, pre);
++ } else {
++ addName(enumConstant.name(), pre);
+ }
+- writer.anchor(enumConstant.name());
+- writer.h3();
+- writer.print(enumConstant.name());
+- writer.h3End();
++ return pre;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- public void writeSignature(FieldDoc enumConstant) {
+- writer.pre();
+- writer.writeAnnotationInfo(enumConstant);
+- printModifiers(enumConstant);
+- writer.printLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_MEMBER,
+- enumConstant.type()));
+- print(' ');
+- if (configuration().linksource) {
+- writer.printSrcLink(enumConstant, enumConstant.name());
+- } else {
+- strong(enumConstant.name());
+- }
+- writer.preEnd();
+- assert !writer.getMemberDetailsListPrinted();
++ public void addDeprecated(FieldDoc enumConstant, Content enumConstantsTree) {
++ addDeprecatedInfo(enumConstant, enumConstantsTree);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- public void writeDeprecated(FieldDoc enumConstant) {
+- printDeprecated(enumConstant);
++ public void addComments(FieldDoc enumConstant, Content enumConstantsTree) {
++ addComment(enumConstant, enumConstantsTree);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- public void writeComments(FieldDoc enumConstant) {
+- printComment(enumConstant);
++ public void addTags(FieldDoc enumConstant, Content enumConstantsTree) {
++ writer.addTagsInfo(enumConstant, enumConstantsTree);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- public void writeTags(FieldDoc enumConstant) {
+- writer.printTags(enumConstant);
++ public Content getEnumConstantsDetails(Content enumConstantsDetailsTree) {
++ return getMemberTree(enumConstantsDetailsTree);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- public void writeEnumConstantFooter() {
+- printMemberFooter();
+- }
+-
+- /**
+- * {@inheritDoc}
+- */
+- public void writeFooter(ClassDoc classDoc) {
+- //No footer to write for enum constant documentation
++ public Content getEnumConstants(Content enumConstantsTree,
++ boolean isLastContent) {
++ return getMemberTree(enumConstantsTree, isLastContent);
+ }
+
+ /**
+@@ -195,75 +156,127 @@
+ return VisibleMemberMap.ENUM_CONSTANTS;
+ }
+
+- public void printSummaryLabel() {
+- writer.printText("doclet.Enum_Constant_Summary");
++ /**
++ * {@inheritDoc}
++ */
++ public void addSummaryLabel(Content memberTree) {
++ Content label = HtmlTree.HEADING(HtmlConstants.SUMMARY_HEADING,
++ writer.getResource("doclet.Enum_Constant_Summary"));
++ memberTree.addContent(label);
+ }
+
+- public void printTableSummary() {
+- writer.tableIndexSummary(configuration().getText("doclet.Member_Table_Summary",
++ /**
++ * {@inheritDoc}
++ */
++ public String getTableSummary() {
++ return configuration().getText("doclet.Member_Table_Summary",
+ configuration().getText("doclet.Enum_Constant_Summary"),
+- configuration().getText("doclet.enum_constants")));
++ configuration().getText("doclet.enum_constants"));
+ }
+
+- public void printSummaryTableHeader(ProgramElementDoc member) {
++ /**
++ * {@inheritDoc}
++ */
++ public String getCaption() {
++ return configuration().getText("doclet.Enum_Constants");
++ }
++
++ /**
++ * {@inheritDoc}
++ */
++ public String[] getSummaryTableHeader(ProgramElementDoc member) {
+ String[] header = new String[] {
+ configuration().getText("doclet.0_and_1",
+ configuration().getText("doclet.Enum_Constant"),
+ configuration().getText("doclet.Description"))
+ };
+- writer.summaryTableHeader(header, "col");
++ return header;
+ }
+
+- public void printSummaryAnchor(ClassDoc cd) {
+- writer.anchor("enum_constant_summary");
++ /**
++ * {@inheritDoc}
++ */
++ public void addSummaryAnchor(ClassDoc cd, Content memberTree) {
++ memberTree.addContent(writer.getMarkerAnchor("enum_constant_summary"));
+ }
+
+- public void printInheritedSummaryAnchor(ClassDoc cd) {
+- } // no such
+-
+- public void printInheritedSummaryLabel(ClassDoc cd) {
+- // no such
++ /**
++ * {@inheritDoc}
++ */
++ public void addInheritedSummaryAnchor(ClassDoc cd, Content inheritedTree) {
+ }
+
+- protected void writeSummaryLink(int context, ClassDoc cd, ProgramElementDoc member) {
+- writer.strong();
+- writer.printDocLink(context, (MemberDoc) member, member.name(), false);
+- writer.strongEnd();
++ /**
++ * {@inheritDoc}
++ */
++ public void addInheritedSummaryLabel(ClassDoc cd, Content inheritedTree) {
+ }
+
+- protected void writeInheritedSummaryLink(ClassDoc cd,
+- ProgramElementDoc member) {
+- writer.printDocLink(LinkInfoImpl.CONTEXT_MEMBER, (MemberDoc)member,
+- member.name(), false);
++ /**
++ * {@inheritDoc}
++ */
++ protected void addSummaryLink(int context, ClassDoc cd, ProgramElementDoc member,
++ Content tdSummary) {
++ Content strong = HtmlTree.STRONG(new RawHtml(
++ writer.getDocLink(context, (MemberDoc) member, member.name(), false)));
++ Content code = HtmlTree.CODE(strong);
++ tdSummary.addContent(code);
+ }
+
+- protected void printSummaryType(ProgramElementDoc member) {
++ /**
++ * {@inheritDoc}
++ */
++ @Override
++ public void setSummaryColumnStyle(HtmlTree tdTree) {
++ tdTree.addStyle(HtmlStyle.colOne);
++ }
++
++ /**
++ * {@inheritDoc}
++ */
++ protected void addInheritedSummaryLink(ClassDoc cd,
++ ProgramElementDoc member, Content linksTree) {
++ }
++
++ /**
++ * {@inheritDoc}
++ */
++ protected void addSummaryType(ProgramElementDoc member, Content tdSummaryType) {
+ //Not applicable.
+ }
+
+- protected void writeDeprecatedLink(ProgramElementDoc member) {
+- writer.printDocLink(LinkInfoImpl.CONTEXT_MEMBER,
+- (MemberDoc) member, ((FieldDoc)member).qualifiedName(), false);
++ /**
++ * {@inheritDoc}
++ */
++ protected Content getDeprecatedLink(ProgramElementDoc member) {
++ return writer.getDocLink(LinkInfoImpl.CONTEXT_MEMBER,
++ (MemberDoc) member, ((FieldDoc)member).qualifiedName());
+ }
+
+- protected void printNavSummaryLink(ClassDoc cd, boolean link) {
++ /**
++ * {@inheritDoc}
++ */
++ protected Content getNavSummaryLink(ClassDoc cd, boolean link) {
+ if (link) {
+- writer.printHyperLink("", (cd == null)?
+- "enum_constant_summary":
+- "enum_constants_inherited_from_class_" +
+- configuration().getClassName(cd),
+- configuration().getText("doclet.navEnum"));
++ return writer.getHyperLink("", (cd == null)?
++ "enum_constant_summary":
++ "enum_constants_inherited_from_class_" +
++ configuration().getClassName(cd),
++ writer.getResource("doclet.navEnum"));
+ } else {
+- writer.printText("doclet.navEnum");
++ return writer.getResource("doclet.navEnum");
+ }
+ }
+
+- protected void printNavDetailLink(boolean link) {
++ /**
++ * {@inheritDoc}
++ */
++ protected void addNavDetailLink(boolean link, Content liNav) {
+ if (link) {
+- writer.printHyperLink("", "enum_constant_detail",
+- configuration().getText("doclet.navEnum"));
++ liNav.addContent(writer.getHyperLink("", "enum_constant_detail",
++ writer.getResource("doclet.navEnum")));
+ } else {
+- writer.printText("doclet.navEnum");
++ liNav.addContent(writer.getResource("doclet.navEnum"));
+ }
+ }
+ }
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/FieldWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/FieldWriterImpl.java
+--- langtools/src/share/classes/com/sun/tools/doclets/formats/html/FieldWriterImpl.java
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/FieldWriterImpl.java
+@@ -28,6 +28,7 @@
+ import java.io.*;
+
+ import com.sun.javadoc.*;
++import com.sun.tools.doclets.formats.html.markup.*;
+ import com.sun.tools.doclets.internal.toolkit.*;
+ import com.sun.tools.doclets.internal.toolkit.util.*;
+
+@@ -42,8 +43,6 @@
+ public class FieldWriterImpl extends AbstractMemberWriter
+ implements FieldWriter, MemberSummaryWriter {
+
+- private boolean printedSummaryHeader = false;
+-
+ public FieldWriterImpl(SubWriterHolderWriter writer, ClassDoc classdoc) {
+ super(writer, classdoc);
+ }
+@@ -53,177 +52,118 @@
+ }
+
+ /**
+- * Write the fields summary header for the given class.
+- *
+- * @param classDoc the class the summary belongs to.
++ * {@inheritDoc}
+ */
+- public void writeMemberSummaryHeader(ClassDoc classDoc) {
+- printedSummaryHeader = true;
+- writer.println("<!-- =========== FIELD SUMMARY =========== -->");
+- writer.println();
+- writer.printSummaryHeader(this, classDoc);
+- }
+-
+- /**
+- * Write the fields summary footer for the given class.
+- *
+- * @param classDoc the class the summary belongs to.
+- */
+- public void writeMemberSummaryFooter(ClassDoc classDoc) {
+- writer.tableEnd();
+- writer.space();
+- }
+-
+- /**
+- * Write the inherited fields summary header for the given class.
+- *
+- * @param classDoc the class the summary belongs to.
+- */
+- public void writeInheritedMemberSummaryHeader(ClassDoc classDoc) {
+- if(! printedSummaryHeader){
+- //We don't want inherited summary to not be under heading.
+- writeMemberSummaryHeader(classDoc);
+- writeMemberSummaryFooter(classDoc);
+- printedSummaryHeader = true;
+- }
+- writer.printInheritedSummaryHeader(this, classDoc);
++ public Content getMemberSummaryHeader(ClassDoc classDoc,
++ Content memberSummaryTree) {
++ memberSummaryTree.addContent(HtmlConstants.START_OF_FIELD_SUMMARY);
++ Content memberTree = writer.getMemberTreeHeader();
++ writer.addSummaryHeader(this, classDoc, memberTree);
++ return memberTree;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- public void writeInheritedMemberSummary(ClassDoc classDoc,
+- ProgramElementDoc field, boolean isFirst, boolean isLast) {
+- writer.printInheritedSummaryMember(this, classDoc, field, isFirst);
++ public Content getFieldDetailsTreeHeader(ClassDoc classDoc,
++ Content memberDetailsTree) {
++ memberDetailsTree.addContent(HtmlConstants.START_OF_FIELD_DETAILS);
++ Content fieldDetailsTree = writer.getMemberTreeHeader();
++ fieldDetailsTree.addContent(writer.getMarkerAnchor("field_detail"));
++ Content heading = HtmlTree.HEADING(HtmlConstants.DETAILS_HEADING,
++ writer.fieldDetailsLabel);
++ fieldDetailsTree.addContent(heading);
++ return fieldDetailsTree;
+ }
+
+ /**
+- * Write the inherited fields summary footer for the given class.
+- *
+- * @param classDoc the class the summary belongs to.
++ * {@inheritDoc}
+ */
+- public void writeInheritedMemberSummaryFooter(ClassDoc classDoc) {
+- writer.printInheritedSummaryFooter(this, classDoc);
++ public Content getFieldDocTreeHeader(FieldDoc field,
++ Content fieldDetailsTree) {
++ fieldDetailsTree.addContent(
++ writer.getMarkerAnchor(field.name()));
++ Content fieldDocTree = writer.getMemberTreeHeader();
++ Content heading = new HtmlTree(HtmlConstants.MEMBER_HEADING);
++ heading.addContent(field.name());
++ fieldDocTree.addContent(heading);
++ return fieldDocTree;
+ }
+
+ /**
+- * Write the header for the field documentation.
+- *
+- * @param classDoc the class that the fields belong to.
++ * {@inheritDoc}
+ */
+- public void writeHeader(ClassDoc classDoc, String header) {
+- writer.println();
+- writer.println("<!-- ============ FIELD DETAIL =========== -->");
+- writer.println();
+- writer.anchor("field_detail");
+- writer.printTableHeadingBackground(header);
+- writer.println();
++ public Content getSignature(FieldDoc field) {
++ Content pre = new HtmlTree(HtmlTag.PRE);
++ writer.addAnnotationInfo(field, pre);
++ addModifiers(field, pre);
++ Content fieldlink = new RawHtml(writer.getLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_MEMBER,
++ field.type())));
++ pre.addContent(fieldlink);
++ pre.addContent(" ");
++ if (configuration().linksource) {
++ Content fieldName = new StringContent(field.name());
++ writer.addSrcLink(field, fieldName, pre);
++ } else {
++ addName(field.name(), pre);
++ }
++ return pre;
+ }
+
+ /**
+- * Write the field header for the given field.
+- *
+- * @param field the field being documented.
+- * @param isFirst the flag to indicate whether or not the field is the
+- * first to be documented.
++ * {@inheritDoc}
+ */
+- public void writeFieldHeader(FieldDoc field, boolean isFirst) {
+- if (! isFirst) {
+- writer.printMemberHeader();
+- writer.println("");
+- }
+- writer.anchor(field.name());
+- writer.h3();
+- writer.print(field.name());
+- writer.h3End();
++ public void addDeprecated(FieldDoc field, Content fieldDocTree) {
++ addDeprecatedInfo(field, fieldDocTree);
+ }
+
+ /**
+- * Write the signature for the given field.
+- *
+- * @param field the field being documented.
++ * {@inheritDoc}
+ */
+- public void writeSignature(FieldDoc field) {
+- writer.pre();
+- writer.writeAnnotationInfo(field);
+- printModifiers(field);
+- writer.printLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_MEMBER,
+- field.type()));
+- print(' ');
+- if (configuration().linksource) {
+- writer.printSrcLink(field, field.name());
+- } else {
+- strong(field.name());
+- }
+- writer.preEnd();
+- assert !writer.getMemberDetailsListPrinted();
+- }
+-
+- /**
+- * Write the deprecated output for the given field.
+- *
+- * @param field the field being documented.
+- */
+- public void writeDeprecated(FieldDoc field) {
+- printDeprecated(field);
+- }
+-
+- /**
+- * Write the comments for the given field.
+- *
+- * @param field the field being documented.
+- */
+- public void writeComments(FieldDoc field) {
++ public void addComments(FieldDoc field, Content fieldDocTree) {
+ ClassDoc holder = field.containingClass();
+ if (field.inlineTags().length > 0) {
+- writer.printMemberDetailsListStartTag();
+ if (holder.equals(classdoc) ||
+- (! (holder.isPublic() || Util.isLinkable(holder, configuration())))) {
+- writer.dd();
+- writer.printInlineComment(field);
+- writer.ddEnd();
++ (! (holder.isPublic() || Util.isLinkable(holder, configuration())))) {
++ writer.addInlineComment(field, fieldDocTree);
+ } else {
+- String classlink = writer.codeText(
+- writer.getDocLink(LinkInfoImpl.CONTEXT_FIELD_DOC_COPY,
++ Content link = new RawHtml(
++ writer.getDocLink(LinkInfoImpl.CONTEXT_FIELD_DOC_COPY,
+ holder, field,
+ holder.isIncluded() ?
+ holder.typeName() : holder.qualifiedTypeName(),
+- false));
+- writer.dd();
+- writer.strong(configuration().getText(holder.isClass()?
+- "doclet.Description_From_Class" :
+- "doclet.Description_From_Interface", classlink));
+- writer.ddEnd();
+- writer.dd();
+- writer.printInlineComment(field);
+- writer.ddEnd();
++ false));
++ Content codeLink = HtmlTree.CODE(link);
++ Content strong = HtmlTree.STRONG(holder.isClass()?
++ writer.descfrmClassLabel : writer.descfrmInterfaceLabel);
++ strong.addContent(writer.getSpace());
++ strong.addContent(codeLink);
++ fieldDocTree.addContent(HtmlTree.DIV(HtmlStyle.block, strong));
++ writer.addInlineComment(field, fieldDocTree);
+ }
+ }
+ }
+
+ /**
+- * Write the tag output for the given field.
+- *
+- * @param field the field being documented.
++ * {@inheritDoc}
+ */
+- public void writeTags(FieldDoc field) {
+- writer.printTags(field);
++ public void addTags(FieldDoc field, Content fieldDocTree) {
++ writer.addTagsInfo(field, fieldDocTree);
+ }
+
+ /**
+- * Write the field footer.
++ * {@inheritDoc}
+ */
+- public void writeFieldFooter() {
+- printMemberFooter();
++ public Content getFieldDetails(Content fieldDetailsTree) {
++ return getMemberTree(fieldDetailsTree);
+ }
+
+ /**
+- * Write the footer for the field documentation.
+- *
+- * @param classDoc the class that the fields belong to.
++ * {@inheritDoc}
+ */
+- public void writeFooter(ClassDoc classDoc) {
+- //No footer to write for field documentation
++ public Content getFieldDoc(Content fieldDocTree,
++ boolean isLastContent) {
++ return getMemberTree(fieldDocTree, isLastContent);
+ }
+
+ /**
+@@ -237,85 +177,136 @@
+ return VisibleMemberMap.FIELDS;
+ }
+
+- public void printSummaryLabel() {
+- writer.printText("doclet.Field_Summary");
++ /**
++ * {@inheritDoc}
++ */
++ public void addSummaryLabel(Content memberTree) {
++ Content label = HtmlTree.HEADING(HtmlConstants.SUMMARY_HEADING,
++ writer.getResource("doclet.Field_Summary"));
++ memberTree.addContent(label);
+ }
+
+- public void printTableSummary() {
+- writer.tableIndexSummary(configuration().getText("doclet.Member_Table_Summary",
++ /**
++ * {@inheritDoc}
++ */
++ public String getTableSummary() {
++ return configuration().getText("doclet.Member_Table_Summary",
+ configuration().getText("doclet.Field_Summary"),
+- configuration().getText("doclet.fields")));
++ configuration().getText("doclet.fields"));
+ }
+
+- public void printSummaryTableHeader(ProgramElementDoc member) {
++ /**
++ * {@inheritDoc}
++ */
++ public String getCaption() {
++ return configuration().getText("doclet.Fields");
++ }
++
++ /**
++ * {@inheritDoc}
++ */
++ public String[] getSummaryTableHeader(ProgramElementDoc member) {
+ String[] header = new String[] {
+ writer.getModifierTypeHeader(),
+ configuration().getText("doclet.0_and_1",
+ configuration().getText("doclet.Field"),
+ configuration().getText("doclet.Description"))
+ };
+- writer.summaryTableHeader(header, "col");
++ return header;
+ }
+
+- public void printSummaryAnchor(ClassDoc cd) {
+- writer.anchor("field_summary");
++ /**
++ * {@inheritDoc}
++ */
++ public void addSummaryAnchor(ClassDoc cd, Content memberTree) {
++ memberTree.addContent(writer.getMarkerAnchor("field_summary"));
+ }
+
+- public void printInheritedSummaryAnchor(ClassDoc cd) {
+- writer.anchor("fields_inherited_from_class_" + configuration().getClassName(cd));
++ /**
++ * {@inheritDoc}
++ */
++ public void addInheritedSummaryAnchor(ClassDoc cd, Content inheritedTree) {
++ inheritedTree.addContent(writer.getMarkerAnchor(
++ "fields_inherited_from_class_" + configuration().getClassName(cd)));
+ }
+
+- public void printInheritedSummaryLabel(ClassDoc cd) {
+- String classlink = writer.getPreQualifiedClassLink(
+- LinkInfoImpl.CONTEXT_MEMBER, cd, false);
+- writer.strong();
+- String key = cd.isClass()?
+- "doclet.Fields_Inherited_From_Class" :
+- "doclet.Fields_Inherited_From_Interface";
+- writer.printText(key, classlink);
+- writer.strongEnd();
++ /**
++ * {@inheritDoc}
++ */
++ public void addInheritedSummaryLabel(ClassDoc cd, Content inheritedTree) {
++ Content classLink = new RawHtml(writer.getPreQualifiedClassLink(
++ LinkInfoImpl.CONTEXT_MEMBER, cd, false));
++ Content label = new StringContent(cd.isClass() ?
++ configuration().getText("doclet.Fields_Inherited_From_Class") :
++ configuration().getText("doclet.Fields_Inherited_From_Interface"));
++ Content labelHeading = HtmlTree.HEADING(HtmlConstants.INHERITED_SUMMARY_HEADING,
++ label);
++ labelHeading.addContent(writer.getSpace());
++ labelHeading.addContent(classLink);
++ inheritedTree.addContent(labelHeading);
+ }
+
+- protected void writeSummaryLink(int context, ClassDoc cd, ProgramElementDoc member) {
+- writer.strong();
+- writer.printDocLink(context, cd , (MemberDoc) member, member.name(), false);
+- writer.strongEnd();
++ /**
++ * {@inheritDoc}
++ */
++ protected void addSummaryLink(int context, ClassDoc cd, ProgramElementDoc member,
++ Content tdSummary) {
++ Content strong = HtmlTree.STRONG(new RawHtml(
++ writer.getDocLink(context, cd , (MemberDoc) member, member.name(), false)));
++ Content code = HtmlTree.CODE(strong);
++ tdSummary.addContent(code);
+ }
+
+- protected void writeInheritedSummaryLink(ClassDoc cd,
+- ProgramElementDoc member) {
+- writer.printDocLink(LinkInfoImpl.CONTEXT_MEMBER, cd, (MemberDoc)member,
+- member.name(), false);
++ /**
++ * {@inheritDoc}
++ */
++ protected void addInheritedSummaryLink(ClassDoc cd,
++ ProgramElementDoc member, Content linksTree) {
++ linksTree.addContent(new RawHtml(
++ writer.getDocLink(LinkInfoImpl.CONTEXT_MEMBER, cd, (MemberDoc)member,
++ member.name(), false)));
+ }
+
+- protected void printSummaryType(ProgramElementDoc member) {
++ /**
++ * {@inheritDoc}
++ */
++ protected void addSummaryType(ProgramElementDoc member, Content tdSummaryType) {
+ FieldDoc field = (FieldDoc)member;
+- printModifierAndType(field, field.type());
++ addModifierAndType(field, field.type(), tdSummaryType);
+ }
+
+- protected void writeDeprecatedLink(ProgramElementDoc member) {
+- writer.printDocLink(LinkInfoImpl.CONTEXT_MEMBER,
+- (MemberDoc) member, ((FieldDoc)member).qualifiedName(), false);
++ /**
++ * {@inheritDoc}
++ */
++ protected Content getDeprecatedLink(ProgramElementDoc member) {
++ return writer.getDocLink(LinkInfoImpl.CONTEXT_MEMBER,
++ (MemberDoc) member, ((FieldDoc)member).qualifiedName());
+ }
+
+- protected void printNavSummaryLink(ClassDoc cd, boolean link) {
++ /**
++ * {@inheritDoc}
++ */
++ protected Content getNavSummaryLink(ClassDoc cd, boolean link) {
+ if (link) {
+- writer.printHyperLink("", (cd == null)?
+- "field_summary":
+- "fields_inherited_from_class_" +
+- configuration().getClassName(cd),
+- configuration().getText("doclet.navField"));
++ return writer.getHyperLink("", (cd == null)?
++ "field_summary":
++ "fields_inherited_from_class_" +
++ configuration().getClassName(cd),
++ writer.getResource("doclet.navField"));
+ } else {
+- writer.printText("doclet.navField");
++ return writer.getResource("doclet.navField");
+ }
+ }
+
+- protected void printNavDetailLink(boolean link) {
++ /**
++ * {@inheritDoc}
++ */
++ protected void addNavDetailLink(boolean link, Content liNav) {
+ if (link) {
+- writer.printHyperLink("", "field_detail",
+- configuration().getText("doclet.navField"));
++ liNav.addContent(writer.getHyperLink("", "field_detail",
++ writer.getResource("doclet.navField")));
+ } else {
+- writer.printText("doclet.navField");
++ liNav.addContent(writer.getResource("doclet.navField"));
+ }
+ }
+ }
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/FrameOutputWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/FrameOutputWriter.java
+--- langtools/src/share/classes/com/sun/tools/doclets/formats/html/FrameOutputWriter.java
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/FrameOutputWriter.java
+@@ -25,8 +25,10 @@
+
+ package com.sun.tools.doclets.formats.html;
+
++import java.io.*;
+ import com.sun.tools.doclets.internal.toolkit.util.*;
+-import java.io.*;
++import com.sun.tools.doclets.internal.toolkit.*;
++import com.sun.tools.doclets.formats.html.markup.*;
+
+ /**
+ * Generate the documentation in the Html "frame" format in the browser. The
+@@ -47,6 +49,8 @@
+ */
+ int noOfPackages;
+
++ private final String SCROLL_YES = "yes";
++
+ /**
+ * Constructor to construct FrameOutputWriter object.
+ *
+@@ -86,82 +90,93 @@
+ * as well as warning if browser is not supporting the Html frames.
+ */
+ protected void generateFrameFile() {
++ Content frameset = getFrameDetails();
+ if (configuration.windowtitle.length() > 0) {
+- printFramesetHeader(configuration.windowtitle, configuration.notimestamp);
++ printFramesetDocument(configuration.windowtitle, configuration.notimestamp,
++ frameset);
+ } else {
+- printFramesetHeader(configuration.getText("doclet.Generated_Docs_Untitled"),
+- configuration.notimestamp);
++ printFramesetDocument(configuration.getText("doclet.Generated_Docs_Untitled"),
++ configuration.notimestamp, frameset);
+ }
+- printFrameDetails();
+- printFrameFooter();
+ }
+
+ /**
+- * Generate the code for issueing the warning for a non-frame capable web
++ * Add the code for issueing the warning for a non-frame capable web
+ * client. Also provide links to the non-frame version documentation.
++ *
++ * @param contentTree the content tree to which the non-frames information will be added
+ */
+- protected void printFrameWarning() {
+- noFrames();
+- h2();
+- printText("doclet.Frame_Alert");
+- h2End();
+- p();
+- printText("doclet.Frame_Warning_Message");
+- br();
+- printText("doclet.Link_To");
+- printHyperLink(configuration.topFile,
+- configuration.getText("doclet.Non_Frame_Version"));
+- println("");
+- noFramesEnd();
++ protected void addFrameWarning(Content contentTree) {
++ Content noframes = new HtmlTree(HtmlTag.NOFRAMES);
++ Content noScript = HtmlTree.NOSCRIPT(
++ HtmlTree.DIV(getResource("doclet.No_Script_Message")));
++ noframes.addContent(noScript);
++ Content noframesHead = HtmlTree.HEADING(HtmlConstants.CONTENT_HEADING,
++ getResource("doclet.Frame_Alert"));
++ noframes.addContent(noframesHead);
++ Content p = HtmlTree.P(getResource("doclet.Frame_Warning_Message"));
++ noframes.addContent(p);
++ noframes.addContent(new HtmlTree(HtmlTag.BR));
++ noframes.addContent(getResource("doclet.Link_To"));
++ Content link = getHyperLink(configuration.topFile,
++ getResource("doclet.Non_Frame_Version"));
++ noframes.addContent(link);
++ contentTree.addContent(noframes);
+ }
+
+ /**
+- * Print the frame sizes and their contents.
++ * Get the frame sizes and their contents.
++ *
++ * @return a content tree for the frame details
+ */
+- protected void printFrameDetails() {
+- // title attribute intentionally made empty so
+- // 508 tests will not flag it as missing
+- frameSet("cols=\"20%,80%\" title=\"\" onLoad=\"top.loadFrames()\"");
++ protected Content getFrameDetails() {
++ HtmlTree frameset = HtmlTree.FRAMESET("20%,80%", null, "Documentation frame",
++ "top.loadFrames()");
+ if (noOfPackages <= 1) {
+- printAllClassesFrameTag();
++ addAllClassesFrameTag(frameset);
+ } else if (noOfPackages > 1) {
+- frameSet("rows=\"30%,70%\" title=\"\" onLoad=\"top.loadFrames()\"");
+- printAllPackagesFrameTag();
+- printAllClassesFrameTag();
+- frameSetEnd();
++ HtmlTree leftFrameset = HtmlTree.FRAMESET(null, "30%,70%", "Left frames",
++ "top.loadFrames()");
++ addAllPackagesFrameTag(leftFrameset);
++ addAllClassesFrameTag(leftFrameset);
++ frameset.addContent(leftFrameset);
+ }
+- printClassFrameTag();
+- printFrameWarning();
+- frameSetEnd();
++ addClassFrameTag(frameset);
++ addFrameWarning(frameset);
++ return frameset;
+ }
+
+ /**
+- * Print the FRAME tag for the frame that lists all packages
++ * Add the FRAME tag for the frame that lists all packages.
++ *
++ * @param contentTree the content tree to which the information will be added
+ */
+- private void printAllPackagesFrameTag() {
+- frame("src=\"overview-frame.html\" name=\"packageListFrame\""
+- + " title=\"" + configuration.getText("doclet.All_Packages") + "\"");
++ private void addAllPackagesFrameTag(Content contentTree) {
++ HtmlTree frame = HtmlTree.FRAME("overview-frame.html", "packageListFrame",
++ configuration.getText("doclet.All_Packages"));
++ contentTree.addContent(frame);
+ }
+
+ /**
+- * Print the FRAME tag for the frame that lists all classes
++ * Add the FRAME tag for the frame that lists all classes.
++ *
++ * @param contentTree the content tree to which the information will be added
+ */
+- private void printAllClassesFrameTag() {
+- frame("src=\"" + "allclasses-frame.html" + "\""
+- + " name=\"packageFrame\""
+- + " title=\"" + configuration.getText("doclet.All_classes_and_interfaces")
+- + "\"");
++ private void addAllClassesFrameTag(Content contentTree) {
++ HtmlTree frame = HtmlTree.FRAME("allclasses-frame.html", "packageFrame",
++ configuration.getText("doclet.All_classes_and_interfaces"));
++ contentTree.addContent(frame);
+ }
+
+ /**
+- * Print the FRAME tag for the frame that describes the class in detail
++ * Add the FRAME tag for the frame that describes the class in detail.
++ *
++ * @param contentTree the content tree to which the information will be added
+ */
+- private void printClassFrameTag() {
+- frame("src=\"" + configuration.topFile + "\""
+- + " name=\"classFrame\""
+- + " title=\""
+- + configuration.getText("doclet.Package_class_and_interface_descriptions")
+- + "\" scrolling=\"yes\"");
++ private void addClassFrameTag(Content contentTree) {
++ HtmlTree frame = HtmlTree.FRAME(configuration.topFile, "classFrame",
++ configuration.getText("doclet.Package_class_and_interface_descriptions"),
++ SCROLL_YES);
++ contentTree.addContent(frame);
+ }
+-
+ }
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/HelpWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/HelpWriter.java
+--- langtools/src/share/classes/com/sun/tools/doclets/formats/html/HelpWriter.java
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/HelpWriter.java
+@@ -25,8 +25,10 @@
+
+ package com.sun.tools.doclets.formats.html;
+
++import java.io.*;
+ import com.sun.tools.doclets.internal.toolkit.util.*;
+-import java.io.*;
++import com.sun.tools.doclets.internal.toolkit.*;
++import com.sun.tools.doclets.formats.html.markup.*;
+
+ /**
+ * Generate the Help File for the generated API documentation. The help file
+@@ -72,159 +74,242 @@
+ * Generate the help file contents.
+ */
+ protected void generateHelpFile() {
+- printHtmlHeader(configuration.getText("doclet.Window_Help_title"),
+- null, true);
+- printTop();
+- navLinks(true); hr();
+-
+- printHelpFileContents();
+-
+- navLinks(false);
+- printBottom();
+- printBodyHtmlEnd();
++ String title = configuration.getText("doclet.Window_Help_title");
++ Content body = getBody(true, getWindowTitle(title));
++ addTop(body);
++ addNavLinks(true, body);
++ addHelpFileContents(body);
++ addNavLinks(false, body);
++ addBottom(body);
++ printHtmlDocument(null, true, body);
+ }
+
+ /**
+- * Print the help file contents from the resource file. While generating the
++ * Add the help file contents from the resource file to the content tree. While adding the
+ * help file contents it also keeps track of user options. If "-notree"
+- * is used, then the "overview-tree.html" will not get generated and hence
+- * help information also will not get generated.
++ * is used, then the "overview-tree.html" will not get added and hence
++ * help information also will not get added.
++ *
++ * @param contentTree the content tree to which the help file contents will be added
+ */
+- protected void printHelpFileContents() {
+- center(); h1(); printText("doclet.Help_line_1"); h1End(); centerEnd();
+- printText("doclet.Help_line_2");
++ protected void addHelpFileContents(Content contentTree) {
++ Content heading = HtmlTree.HEADING(HtmlConstants.TITLE_HEADING, false, HtmlStyle.title,
++ getResource("doclet.Help_line_1"));
++ Content div = HtmlTree.DIV(HtmlStyle.header, heading);
++ Content line2 = HtmlTree.P(HtmlStyle.subTitle,
++ getResource("doclet.Help_line_2"));
++ div.addContent(line2);
++ contentTree.addContent(div);
++ HtmlTree ul = new HtmlTree(HtmlTag.UL);
++ ul.addStyle(HtmlStyle.blockList);
+ if (configuration.createoverview) {
+- h3(); printText("doclet.Overview"); h3End();
+- blockquote(); p();
+- printText("doclet.Help_line_3",
+- getHyperLink("overview-summary.html",
+- configuration.getText("doclet.Overview")));
+- blockquoteEnd();
++ Content overviewHeading = HtmlTree.HEADING(HtmlConstants.CONTENT_HEADING,
++ getResource("doclet.Overview"));
++ Content liOverview = HtmlTree.LI(HtmlStyle.blockList, overviewHeading);
++ Content line3 = getResource("doclet.Help_line_3",
++ getHyperLinkString("overview-summary.html",
++ configuration.getText("doclet.Overview")));
++ Content overviewPara = HtmlTree.P(line3);
++ liOverview.addContent(overviewPara);
++ ul.addContent(liOverview);
+ }
+- h3(); printText("doclet.Package"); h3End();
+- blockquote(); p(); printText("doclet.Help_line_4");
+- ul();
+- li(); printText("doclet.Interfaces_Italic");
+- li(); printText("doclet.Classes");
+- li(); printText("doclet.Enums");
+- li(); printText("doclet.Exceptions");
+- li(); printText("doclet.Errors");
+- li(); printText("doclet.AnnotationTypes");
+- ulEnd();
+- blockquoteEnd();
+- h3(); printText("doclet.Help_line_5"); h3End();
+- blockquote(); p(); printText("doclet.Help_line_6");
+- ul();
+- li(); printText("doclet.Help_line_7");
+- li(); printText("doclet.Help_line_8");
+- li(); printText("doclet.Help_line_9");
+- li(); printText("doclet.Help_line_10");
+- li(); printText("doclet.Help_line_11");
+- li(); printText("doclet.Help_line_12");
+- p();
+- li(); printText("doclet.Nested_Class_Summary");
+- li(); printText("doclet.Field_Summary");
+- li(); printText("doclet.Constructor_Summary");
+- li(); printText("doclet.Method_Summary");
+- p();
+- li(); printText("doclet.Field_Detail");
+- li(); printText("doclet.Constructor_Detail");
+- li(); printText("doclet.Method_Detail");
+- ulEnd();
+- printText("doclet.Help_line_13");
+- blockquoteEnd();
+-
++ Content packageHead = HtmlTree.HEADING(HtmlConstants.CONTENT_HEADING,
++ getResource("doclet.Package"));
++ Content liPackage = HtmlTree.LI(HtmlStyle.blockList, packageHead);
++ Content line4 = getResource("doclet.Help_line_4");
++ Content packagePara = HtmlTree.P(line4);
++ liPackage.addContent(packagePara);
++ HtmlTree ulPackage = new HtmlTree(HtmlTag.UL);
++ ulPackage.addContent(HtmlTree.LI(
++ getResource("doclet.Interfaces_Italic")));
++ ulPackage.addContent(HtmlTree.LI(
++ getResource("doclet.Classes")));
++ ulPackage.addContent(HtmlTree.LI(
++ getResource("doclet.Enums")));
++ ulPackage.addContent(HtmlTree.LI(
++ getResource("doclet.Exceptions")));
++ ulPackage.addContent(HtmlTree.LI(
++ getResource("doclet.Errors")));
++ ulPackage.addContent(HtmlTree.LI(
++ getResource("doclet.AnnotationTypes")));
++ liPackage.addContent(ulPackage);
++ ul.addContent(liPackage);
++ Content classHead = HtmlTree.HEADING(HtmlConstants.CONTENT_HEADING,
++ getResource("doclet.Help_line_5"));
++ Content liClass = HtmlTree.LI(HtmlStyle.blockList, classHead);
++ Content line6 = getResource("doclet.Help_line_6");
++ Content classPara = HtmlTree.P(line6);
++ liClass.addContent(classPara);
++ HtmlTree ul1 = new HtmlTree(HtmlTag.UL);
++ ul1.addContent(HtmlTree.LI(
++ getResource("doclet.Help_line_7")));
++ ul1.addContent(HtmlTree.LI(
++ getResource("doclet.Help_line_8")));
++ ul1.addContent(HtmlTree.LI(
++ getResource("doclet.Help_line_9")));
++ ul1.addContent(HtmlTree.LI(
++ getResource("doclet.Help_line_10")));
++ ul1.addContent(HtmlTree.LI(
++ getResource("doclet.Help_line_11")));
++ ul1.addContent(HtmlTree.LI(
++ getResource("doclet.Help_line_12")));
++ liClass.addContent(ul1);
++ HtmlTree ul2 = new HtmlTree(HtmlTag.UL);
++ ul2.addContent(HtmlTree.LI(
++ getResource("doclet.Nested_Class_Summary")));
++ ul2.addContent(HtmlTree.LI(
++ getResource("doclet.Field_Summary")));
++ ul2.addContent(HtmlTree.LI(
++ getResource("doclet.Constructor_Summary")));
++ ul2.addContent(HtmlTree.LI(
++ getResource("doclet.Method_Summary")));
++ liClass.addContent(ul2);
++ HtmlTree ul3 = new HtmlTree(HtmlTag.UL);
++ ul3.addContent(HtmlTree.LI(
++ getResource("doclet.Field_Detail")));
++ ul3.addContent(HtmlTree.LI(
++ getResource("doclet.Constructor_Detail")));
++ ul3.addContent(HtmlTree.LI(
++ getResource("doclet.Method_Detail")));
++ liClass.addContent(ul3);
++ Content line13 = getResource("doclet.Help_line_13");
++ Content para = HtmlTree.P(line13);
++ liClass.addContent(para);
++ ul.addContent(liClass);
+ //Annotation Types
+- blockquoteEnd();
+- h3(); printText("doclet.AnnotationType"); h3End();
+- blockquote(); p(); printText("doclet.Help_annotation_type_line_1");
+- ul();
+- li(); printText("doclet.Help_annotation_type_line_2");
+- li(); printText("doclet.Help_annotation_type_line_3");
+- li(); printText("doclet.Annotation_Type_Required_Member_Summary");
+- li(); printText("doclet.Annotation_Type_Optional_Member_Summary");
+- li(); printText("doclet.Annotation_Type_Member_Detail");
+- ulEnd();
+- blockquoteEnd();
+-
++ Content aHead = HtmlTree.HEADING(HtmlConstants.CONTENT_HEADING,
++ getResource("doclet.AnnotationType"));
++ Content liAnnotation = HtmlTree.LI(HtmlStyle.blockList, aHead);
++ Content aline1 = getResource("doclet.Help_annotation_type_line_1");
++ Content aPara = HtmlTree.P(aline1);
++ liAnnotation.addContent(aPara);
++ HtmlTree aul = new HtmlTree(HtmlTag.UL);
++ aul.addContent(HtmlTree.LI(
++ getResource("doclet.Help_annotation_type_line_2")));
++ aul.addContent(HtmlTree.LI(
++ getResource("doclet.Help_annotation_type_line_3")));
++ aul.addContent(HtmlTree.LI(
++ getResource("doclet.Annotation_Type_Required_Member_Summary")));
++ aul.addContent(HtmlTree.LI(
++ getResource("doclet.Annotation_Type_Optional_Member_Summary")));
++ aul.addContent(HtmlTree.LI(
++ getResource("doclet.Annotation_Type_Member_Detail")));
++ liAnnotation.addContent(aul);
++ ul.addContent(liAnnotation);
+ //Enums
+- blockquoteEnd();
+- h3(); printText("doclet.Enum"); h3End();
+- blockquote(); p(); printText("doclet.Help_enum_line_1");
+- ul();
+- li(); printText("doclet.Help_enum_line_2");
+- li(); printText("doclet.Help_enum_line_3");
+- li(); printText("doclet.Enum_Constant_Summary");
+- li(); printText("doclet.Enum_Constant_Detail");
+- ulEnd();
+- blockquoteEnd();
+-
++ Content enumHead = HtmlTree.HEADING(HtmlConstants.CONTENT_HEADING,
++ getResource("doclet.Enum"));
++ Content liEnum = HtmlTree.LI(HtmlStyle.blockList, enumHead);
++ Content eline1 = getResource("doclet.Help_enum_line_1");
++ Content enumPara = HtmlTree.P(eline1);
++ liEnum.addContent(enumPara);
++ HtmlTree eul = new HtmlTree(HtmlTag.UL);
++ eul.addContent(HtmlTree.LI(
++ getResource("doclet.Help_enum_line_2")));
++ eul.addContent(HtmlTree.LI(
++ getResource("doclet.Help_enum_line_3")));
++ eul.addContent(HtmlTree.LI(
++ getResource("doclet.Enum_Constant_Summary")));
++ eul.addContent(HtmlTree.LI(
++ getResource("doclet.Enum_Constant_Detail")));
++ liEnum.addContent(eul);
++ ul.addContent(liEnum);
+ if (configuration.classuse) {
+- h3(); printText("doclet.Help_line_14"); h3End();
+- blockquote();
+- printText("doclet.Help_line_15");
+- blockquoteEnd();
++ Content useHead = HtmlTree.HEADING(HtmlConstants.CONTENT_HEADING,
++ getResource("doclet.Help_line_14"));
++ Content liUse = HtmlTree.LI(HtmlStyle.blockList, useHead);
++ Content line15 = getResource("doclet.Help_line_15");
++ Content usePara = HtmlTree.P(line15);
++ liUse.addContent(usePara);
++ ul.addContent(liUse);
+ }
+ if (configuration.createtree) {
+- h3(); printText("doclet.Help_line_16"); h3End();
+- blockquote();
+- printText("doclet.Help_line_17_with_tree_link",
+- getHyperLink("overview-tree.html",
+- configuration.getText("doclet.Class_Hierarchy")));
+- ul();
+- li(); printText("doclet.Help_line_18");
+- li(); printText("doclet.Help_line_19");
+- ulEnd();
+- blockquoteEnd();
++ Content treeHead = HtmlTree.HEADING(HtmlConstants.CONTENT_HEADING,
++ getResource("doclet.Help_line_16"));
++ Content liTree = HtmlTree.LI(HtmlStyle.blockList, treeHead);
++ Content line17 = getResource("doclet.Help_line_17_with_tree_link",
++ getHyperLinkString("overview-tree.html",
++ configuration.getText("doclet.Class_Hierarchy")));
++ Content treePara = HtmlTree.P(line17);
++ liTree.addContent(treePara);
++ HtmlTree tul = new HtmlTree(HtmlTag.UL);
++ tul.addContent(HtmlTree.LI(
++ getResource("doclet.Help_line_18")));
++ tul.addContent(HtmlTree.LI(
++ getResource("doclet.Help_line_19")));
++ liTree.addContent(tul);
++ ul.addContent(liTree);
+ }
+ if (!(configuration.nodeprecatedlist ||
+ configuration.nodeprecated)) {
+- h3(); printText("doclet.Deprecated_API"); h3End();
+- blockquote();
+- printText("doclet.Help_line_20_with_deprecated_api_link",
+- getHyperLink("deprecated-list.html",
+- configuration.getText("doclet.Deprecated_API")));
+- blockquoteEnd();
++ Content dHead = HtmlTree.HEADING(HtmlConstants.CONTENT_HEADING,
++ getResource("doclet.Deprecated_API"));
++ Content liDeprecated = HtmlTree.LI(HtmlStyle.blockList, dHead);
++ Content line20 = getResource("doclet.Help_line_20_with_deprecated_api_link",
++ getHyperLinkString("deprecated-list.html",
++ configuration.getText("doclet.Deprecated_API")));
++ Content dPara = HtmlTree.P(line20);
++ liDeprecated.addContent(dPara);
++ ul.addContent(liDeprecated);
+ }
+ if (configuration.createindex) {
+ String indexlink;
+ if (configuration.splitindex) {
+- indexlink = getHyperLink("index-files/index-1.html",
+- configuration.getText("doclet.Index"));
++ indexlink = getHyperLinkString("index-files/index-1.html",
++ configuration.getText("doclet.Index"));
+ } else {
+- indexlink = getHyperLink("index-all.html",
+- configuration.getText("doclet.Index"));
++ indexlink = getHyperLinkString("index-all.html",
++ configuration.getText("doclet.Index"));
+ }
+- h3(); printText("doclet.Help_line_21"); h3End();
+- blockquote();
+- printText("doclet.Help_line_22", indexlink);
+- blockquoteEnd();
++ Content indexHead = HtmlTree.HEADING(HtmlConstants.CONTENT_HEADING,
++ getResource("doclet.Help_line_21"));
++ Content liIndex = HtmlTree.LI(HtmlStyle.blockList, indexHead);
++ Content line22 = getResource("doclet.Help_line_22", indexlink);
++ Content indexPara = HtmlTree.P(line22);
++ liIndex.addContent(indexPara);
++ ul.addContent(liIndex);
+ }
+- h3(); printText("doclet.Help_line_23"); h3End();
+- printText("doclet.Help_line_24");
+- h3(); printText("doclet.Help_line_25"); h3End();
+- printText("doclet.Help_line_26"); p();
+-
+- h3(); printText("doclet.Serialized_Form"); h3End();
+- printText("doclet.Help_line_27"); p();
+-
+- h3(); printText("doclet.Constants_Summary"); h3End();
+- printText("doclet.Help_line_28"); p();
+-
+- font("-1"); em();
+- printText("doclet.Help_line_29");
+- emEnd(); fontEnd(); br();
+- hr();
++ Content prevHead = HtmlTree.HEADING(HtmlConstants.CONTENT_HEADING,
++ getResource("doclet.Help_line_23"));
++ Content liPrev = HtmlTree.LI(HtmlStyle.blockList, prevHead);
++ Content line24 = getResource("doclet.Help_line_24");
++ Content prevPara = HtmlTree.P(line24);
++ liPrev.addContent(prevPara);
++ ul.addContent(liPrev);
++ Content frameHead = HtmlTree.HEADING(HtmlConstants.CONTENT_HEADING,
++ getResource("doclet.Help_line_25"));
++ Content liFrame = HtmlTree.LI(HtmlStyle.blockList, frameHead);
++ Content line26 = getResource("doclet.Help_line_26");
++ Content framePara = HtmlTree.P(line26);
++ liFrame.addContent(framePara);
++ ul.addContent(liFrame);
++ Content sHead = HtmlTree.HEADING(HtmlConstants.CONTENT_HEADING,
++ getResource("doclet.Serialized_Form"));
++ Content liSerial = HtmlTree.LI(HtmlStyle.blockList, sHead);
++ Content line27 = getResource("doclet.Help_line_27");
++ Content serialPara = HtmlTree.P(line27);
++ liSerial.addContent(serialPara);
++ ul.addContent(liSerial);
++ Content constHead = HtmlTree.HEADING(HtmlConstants.CONTENT_HEADING,
++ getResource("doclet.Constants_Summary"));
++ Content liConst = HtmlTree.LI(HtmlStyle.blockList, constHead);
++ Content line28 = getResource("doclet.Help_line_28");
++ Content constPara = HtmlTree.P(line28);
++ liConst.addContent(constPara);
++ ul.addContent(liConst);
++ Content divContent = HtmlTree.DIV(HtmlStyle.contentContainer, ul);
++ Content line29 = HtmlTree.EM(getResource("doclet.Help_line_29"));
++ divContent.addContent(line29);
++ contentTree.addContent(divContent);
+ }
+
+ /**
+- * Highlight the word "Help" in the navigation bar as this is the help file.
++ * Get the help label.
++ *
++ * @return a content tree for the help label
+ */
+- protected void navLinkHelp() {
+- navCellRevStart();
+- fontStyle("NavBarFont1Rev");
+- strongText("doclet.Help");
+- fontEnd();
+- navCellEnd();
++ protected Content getNavLinkHelp() {
++ Content li = HtmlTree.LI(HtmlStyle.navBarCell1Rev, helpLabel);
++ return li;
+ }
+ }
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDoclet.java b/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDoclet.java
+--- langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDoclet.java
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDoclet.java
+@@ -144,8 +144,11 @@
+ !configuration.nohelp) {
+ HelpWriter.generate(configuration);
+ }
++ // If a stylesheet file is not specified, copy the default stylesheet.
+ if (configuration.stylesheetfile.length() == 0) {
+- StylesheetWriter.generate(configuration);
++ Util.copyFile(configuration, "stylesheet.css", Util.RESOURCESDIR,
++ (configdestdir.isEmpty()) ?
++ System.getProperty("user.dir") : configdestdir, false);
+ }
+ }
+
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java
+--- langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java
+@@ -88,6 +88,11 @@
+ public ConfigurationImpl configuration;
+
+ /**
++ * To check whether annotation heading is printed or not.
++ */
++ protected boolean printedAnnotationHeading = false;
++
++ /**
+ * Constructor to construct the HtmlStandardWriter object.
+ *
+ * @param filename File to be generated.
+@@ -169,7 +174,7 @@
+ // Append slash if next character is not a slash
+ if (relativepathNoSlash.length() > 0 && previndex < htmlstr.length()
+ && htmlstr.charAt(previndex) != '/') {
+- buf.append(DirectoryManager.URL_FILE_SEPERATOR);
++ buf.append(DirectoryManager.URL_FILE_SEPARATOR);
+ }
+ }
+ return buf.toString();
+@@ -192,17 +197,47 @@
+ println(" <!--");
+ println(" if(window==top) {");
+ println(" document.writeln('"
+- + getHyperLink(link, where, label, strong, "", "", target) + "');");
++ + getHyperLinkString(link, where, label, strong, "", "", target) + "');");
+ println(" }");
+ println(" //-->");
+ scriptEnd();
+ noScript();
+- println(" " + getHyperLink(link, where, label, strong, "", "", target));
++ println(" " + getHyperLinkString(link, where, label, strong, "", "", target));
+ noScriptEnd();
+ println(DocletConstants.NL);
+ }
+
+- private void printMethodInfo(MethodDoc method) {
++ /**
++ * Get the script to show or hide the All classes link.
++ *
++ * @param id id of the element to show or hide
++ * @return a content tree for the script
++ */
++ public Content getAllClassesLinkScript(String id) {
++ HtmlTree script = new HtmlTree(HtmlTag.SCRIPT);
++ script.addAttr(HtmlAttr.TYPE, "text/javascript");
++ String scriptCode = "<!--\n" +
++ " allClassesLink = document.getElementById(\"" + id + "\");\n" +
++ " if(window==top) {\n" +
++ " allClassesLink.style.display = \"block\";\n" +
++ " }\n" +
++ " else {\n" +
++ " allClassesLink.style.display = \"none\";\n" +
++ " }\n" +
++ " //-->\n";
++ Content scriptContent = new RawHtml(scriptCode);
++ script.addContent(scriptContent);
++ Content div = HtmlTree.DIV(script);
++ return div;
++ }
++
++ /**
++ * Add method information.
++ *
++ * @param method the method to be documented
++ * @param dl the content tree to which the method information will be added
++ */
++ private void addMethodInfo(MethodDoc method, Content dl) {
+ ClassDoc[] intfacs = method.containingClass().interfaces();
+ MethodDoc overriddenMethod = method.overriddenMethod();
+ // Check whether there is any implementation or overridden info to be
+@@ -211,44 +246,38 @@
+ if ((intfacs.length > 0 &&
+ new ImplementedMethods(method, this.configuration).build().length > 0) ||
+ overriddenMethod != null) {
+- printMemberDetailsListStartTag();
+- dd();
+- printTagsInfoHeader();
+- MethodWriterImpl.printImplementsInfo(this, method);
++ MethodWriterImpl.addImplementsInfo(this, method, dl);
+ if (overriddenMethod != null) {
+- MethodWriterImpl.printOverridden(this,
+- method.overriddenType(), overriddenMethod);
++ MethodWriterImpl.addOverridden(this,
++ method.overriddenType(), overriddenMethod, dl);
+ }
+- printTagsInfoFooter();
+- ddEnd();
+ }
+ }
+
+- protected void printTags(Doc doc) {
+- if(configuration.nocomment){
++ /**
++ * Adds the tags information.
++ *
++ * @param doc the doc for which the tags will be generated
++ * @param htmltree the documentation tree to which the tags will be added
++ */
++ protected void addTagsInfo(Doc doc, Content htmltree) {
++ if (configuration.nocomment) {
+ return;
+ }
++ Content dl = new HtmlTree(HtmlTag.DL);
+ if (doc instanceof MethodDoc) {
+- printMethodInfo((MethodDoc) doc);
++ addMethodInfo((MethodDoc) doc, dl);
+ }
+ TagletOutputImpl output = new TagletOutputImpl("");
+ TagletWriter.genTagOuput(configuration.tagletManager, doc,
+ configuration.tagletManager.getCustomTags(doc),
+ getTagletWriterInstance(false), output);
+ String outputString = output.toString().trim();
+- // For RootDoc and ClassDoc, this section is not the definition description
+- // but the start of definition list.
+ if (!outputString.isEmpty()) {
+- if (!(doc instanceof RootDoc || doc instanceof ClassDoc)) {
+- printMemberDetailsListStartTag();
+- dd();
+- }
+- printTagsInfoHeader();
+- print(outputString);
+- printTagsInfoFooter();
+- if (!(doc instanceof RootDoc || doc instanceof ClassDoc))
+- ddEnd();
++ Content resultString = new RawHtml(outputString);
++ dl.addContent(resultString);
+ }
++ htmltree.addContent(dl);
+ }
+
+ /**
+@@ -284,17 +313,16 @@
+ }
+
+ /**
+- * Print Package link, with target frame.
++ * Get Package link, with target frame.
+ *
+- * @param pd The link will be to the "package-summary.html" page for this
+- * package.
+- * @param target Name of the target frame.
+- * @param label Tag for the link.
++ * @param pd The link will be to the "package-summary.html" page for this package
++ * @param target name of the target frame
++ * @param label tag for the link
++ * @return a content for the target package link
+ */
+- public void printTargetPackageLink(PackageDoc pd, String target,
+- String label) {
+- print(getHyperLink(pathString(pd, "package-summary.html"), "", label,
+- false, "", "", target));
++ public Content getTargetPackageLink(PackageDoc pd, String target,
++ Content label) {
++ return getHyperLink(pathString(pd, "package-summary.html"), "", label, "", target);
+ }
+
+ /**
+@@ -358,6 +386,64 @@
+ }
+
+ /**
++ * Generates the HTML document tree and prints it out.
++ *
++ * @param metakeywords Array of String keywords for META tag. Each element
++ * of the array is assigned to a separate META tag.
++ * Pass in null for no array
++ * @param includeScript true if printing windowtitle script
++ * false for files that appear in the left-hand frames
++ * @param body the body htmltree to be included in the document
++ */
++ public void printHtmlDocument(String[] metakeywords, boolean includeScript,
++ Content body) {
++ Content htmlDocType = DocType.Transitional();
++ Content htmlComment = new Comment(configuration.getText("doclet.New_Page"));
++ Content head = new HtmlTree(HtmlTag.HEAD);
++ if (!configuration.notimestamp) {
++ Content headComment = new Comment("Generated by javadoc (version " +
++ ConfigurationImpl.BUILD_DATE + ") on " + today());
++ head.addContent(headComment);
++ }
++ if (configuration.charset.length() > 0) {
++ Content meta = HtmlTree.META("Content-Type", "text/html",
++ configuration.charset);
++ head.addContent(meta);
++ }
++ head.addContent(getTitle());
++ if (!configuration.notimestamp) {
++ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
++ Content meta = HtmlTree.META("date", dateFormat.format(new Date()));
++ head.addContent(meta);
++ }
++ if (metakeywords != null) {
++ for (int i=0; i < metakeywords.length; i++) {
++ Content meta = HtmlTree.META("keywords", metakeywords[i]);
++ head.addContent(meta);
++ }
++ }
++ head.addContent(getStyleSheetProperties());
++ Content htmlTree = HtmlTree.HTML(configuration.getLocale().getLanguage(),
++ head, body);
++ Content htmlDocument = new HtmlDocument(htmlDocType,
++ htmlComment, htmlTree);
++ print(htmlDocument.toString());
++ }
++
++ /**
++ * Get the window title.
++ *
++ * @param title the title string to construct the complete window title
++ * @return the window title string
++ */
++ public String getWindowTitle(String title) {
++ if (configuration.windowtitle.length() > 0) {
++ title += " (" + configuration.windowtitle + ")";
++ }
++ return title;
++ }
++
++ /**
+ * Print user specified header and the footer.
+ *
+ * @param header if true print the user provided header else print the
+@@ -378,6 +464,28 @@
+ }
+
+ /**
++ * Get user specified header and the footer.
++ *
++ * @param header if true print the user provided header else print the
++ * user provided footer.
++ */
++ public Content getUserHeaderFooter(boolean header) {
++ String content;
++ if (header) {
++ content = replaceDocRootDir(configuration.header);
++ } else {
++ if (configuration.footer.length() != 0) {
++ content = replaceDocRootDir(configuration.footer);
++ } else {
++ content = replaceDocRootDir(configuration.header);
++ }
++ }
++ Content rawContent = new RawHtml(content);
++ Content em = HtmlTree.EM(rawContent);
++ return em;
++ }
++
++ /**
+ * Print the user specified top.
+ */
+ public void printTop() {
+@@ -386,6 +494,16 @@
+ }
+
+ /**
++ * Adds the user specified top.
++ *
++ * @param body the content tree to which user specified top will be added
++ */
++ public void addTop(Content body) {
++ Content top = new RawHtml(replaceDocRootDir(configuration.top));
++ body.addContent(top);
++ }
++
++ /**
+ * Print the user specified bottom.
+ */
+ public void printBottom() {
+@@ -394,6 +512,18 @@
+ }
+
+ /**
++ * Adds the user specified bottom.
++ *
++ * @param body the content tree to which user specified bottom will be added
++ */
++ public void addBottom(Content body) {
++ Content bottom = new RawHtml(replaceDocRootDir(configuration.bottom));
++ Content small = HtmlTree.SMALL(bottom);
++ Content p = HtmlTree.P(HtmlStyle.legalCopy, small);
++ body.addContent(p);
++ }
++
++ /**
+ * Print the navigation bar for the Html page at the top and and the bottom.
+ *
+ * @param header If true print navigation bar at the top of the page else
+@@ -406,13 +536,13 @@
+ println(DocletConstants.NL + "<!-- ========= START OF TOP NAVBAR ======= -->");
+ anchor("navbar_top");
+ println();
+- print(getHyperLink("", "skip-navbar_top", "", false, "",
++ print(getHyperLinkString("", "skip-navbar_top", "", false, "",
+ configuration.getText("doclet.Skip_navigation_links"), ""));
+ } else {
+ println(DocletConstants.NL + "<!-- ======= START OF BOTTOM NAVBAR ====== -->");
+ anchor("navbar_bottom");
+ println();
+- print(getHyperLink("", "skip-navbar_bottom", "", false, "",
++ print(getHyperLinkString("", "skip-navbar_bottom", "", false, "",
+ configuration.getText("doclet.Skip_navigation_links"), ""));
+ }
+ table(0, "100%", 1, 0);
+@@ -516,6 +646,97 @@
+ }
+
+ /**
++ * Adds the navigation bar for the Html page at the top and and the bottom.
++ *
++ * @param header If true print navigation bar at the top of the page else
++ * @param body the HtmlTree to which the nav links will be added
++ */
++ protected void addNavLinks(boolean header, Content body) {
++ if (!configuration.nonavbar) {
++ String allClassesId = "allclasses_";
++ HtmlTree navDiv = new HtmlTree(HtmlTag.DIV);
++ if (header) {
++ body.addContent(HtmlConstants.START_OF_TOP_NAVBAR);
++ navDiv.addStyle(HtmlStyle.topNav);
++ allClassesId += "navbar_top";
++ Content a = getMarkerAnchor("navbar_top");
++ navDiv.addContent(a);
++ Content skipLinkContent = getHyperLink("",
++ "skip-navbar_top", HtmlTree.EMPTY, configuration.getText(
++ "doclet.Skip_navigation_links"), "");
++ navDiv.addContent(skipLinkContent);
++ } else {
++ body.addContent(HtmlConstants.START_OF_BOTTOM_NAVBAR);
++ navDiv.addStyle(HtmlStyle.bottomNav);
++ allClassesId += "navbar_bottom";
++ Content a = getMarkerAnchor("navbar_bottom");
++ navDiv.addContent(a);
++ Content skipLinkContent = getHyperLink("",
++ "skip-navbar_bottom", HtmlTree.EMPTY, configuration.getText(
++ "doclet.Skip_navigation_links"), "");
++ navDiv.addContent(skipLinkContent);
++ }
++ if (header) {
++ navDiv.addContent(getMarkerAnchor("navbar_top_firstrow"));
++ } else {
++ navDiv.addContent(getMarkerAnchor("navbar_bottom_firstrow"));
++ }
++ HtmlTree navList = new HtmlTree(HtmlTag.UL);
++ navList.addStyle(HtmlStyle.navList);
++ navList.addAttr(HtmlAttr.TITLE, "Navigation");
++ if (configuration.createoverview) {
++ navList.addContent(getNavLinkContents());
++ }
++ if (configuration.packages.length == 1) {
++ navList.addContent(getNavLinkPackage(configuration.packages[0]));
++ } else if (configuration.packages.length > 1) {
++ navList.addContent(getNavLinkPackage());
++ }
++ navList.addContent(getNavLinkClass());
++ if(configuration.classuse) {
++ navList.addContent(getNavLinkClassUse());
++ }
++ if(configuration.createtree) {
++ navList.addContent(getNavLinkTree());
++ }
++ if(!(configuration.nodeprecated ||
++ configuration.nodeprecatedlist)) {
++ navList.addContent(getNavLinkDeprecated());
++ }
++ if(configuration.createindex) {
++ navList.addContent(getNavLinkIndex());
++ }
++ if (!configuration.nohelp) {
++ navList.addContent(getNavLinkHelp());
++ }
++ navDiv.addContent(navList);
++ Content aboutDiv = HtmlTree.DIV(HtmlStyle.aboutLanguage, getUserHeaderFooter(header));
++ navDiv.addContent(aboutDiv);
++ body.addContent(navDiv);
++ Content ulNav = HtmlTree.UL(HtmlStyle.navList, getNavLinkPrevious());
++ ulNav.addContent(getNavLinkNext());
++ Content subDiv = HtmlTree.DIV(HtmlStyle.subNav, ulNav);
++ Content ulFrames = HtmlTree.UL(HtmlStyle.navList, getNavShowLists());
++ ulFrames.addContent(getNavHideLists(filename));
++ subDiv.addContent(ulFrames);
++ HtmlTree ulAllClasses = HtmlTree.UL(HtmlStyle.navList, getNavLinkClassIndex());
++ ulAllClasses.addAttr(HtmlAttr.ID, allClassesId.toString());
++ subDiv.addContent(ulAllClasses);
++ subDiv.addContent(getAllClassesLinkScript(allClassesId.toString()));
++ addSummaryDetailLinks(subDiv);
++ if (header) {
++ subDiv.addContent(getMarkerAnchor("skip-navbar_top"));
++ body.addContent(subDiv);
++ body.addContent(HtmlConstants.END_OF_TOP_NAVBAR);
++ } else {
++ subDiv.addContent(getMarkerAnchor("skip-navbar_bottom"));
++ body.addContent(subDiv);
++ body.addContent(HtmlConstants.END_OF_BOTTOM_NAVBAR);
++ }
++ }
++ }
++
++ /**
+ * Print the word "NEXT" to indicate that no link is available. Override
+ * this method to customize next link.
+ */
+@@ -524,6 +745,16 @@
+ }
+
+ /**
++ * Get the word "NEXT" to indicate that no link is available. Override
++ * this method to customize next link.
++ *
++ * @return a content tree for the link
++ */
++ protected Content getNavLinkNext() {
++ return getNavLinkNext(null);
++ }
++
++ /**
+ * Print the word "PREV" to indicate that no link is available. Override
+ * this method to customize prev link.
+ */
+@@ -532,12 +763,28 @@
+ }
+
+ /**
++ * Get the word "PREV" to indicate that no link is available. Override
++ * this method to customize prev link.
++ *
++ * @return a content tree for the link
++ */
++ protected Content getNavLinkPrevious() {
++ return getNavLinkPrevious(null);
++ }
++
++ /**
+ * Do nothing. This is the default method.
+ */
+ protected void printSummaryDetailLinks() {
+ }
+
+ /**
++ * Do nothing. This is the default method.
++ */
++ protected void addSummaryDetailLinks(Content navDiv) {
++ }
++
++ /**
+ * Print link to the "overview-summary.html" page.
+ */
+ protected void navLinkContents() {
+@@ -548,6 +795,18 @@
+ }
+
+ /**
++ * Get link to the "overview-summary.html" page.
++ *
++ * @return a content tree for the link
++ */
++ protected Content getNavLinkContents() {
++ Content linkContent = getHyperLink(relativePath +
++ "overview-summary.html", "", overviewLabel, "", "");
++ Content li = HtmlTree.LI(linkContent);
++ return li;
++ }
++
++ /**
+ * Description for a cell in the navigation bar.
+ */
+ protected void navCellStart() {
+@@ -588,6 +847,19 @@
+ }
+
+ /**
++ * Get link to the "package-summary.html" page for the package passed.
++ *
++ * @param pkg Package to which link will be generated
++ * @return a content tree for the link
++ */
++ protected Content getNavLinkPackage(PackageDoc pkg) {
++ Content linkContent = getPackageLink(pkg,
++ packageLabel);
++ Content li = HtmlTree.LI(linkContent);
++ return li;
++ }
++
++ /**
+ * Print the word "Package" in the navigation bar cell, to indicate that
+ * link is not available here.
+ */
+@@ -600,6 +872,16 @@
+ }
+
+ /**
++ * Get the word "Package" , to indicate that link is not available here.
++ *
++ * @return a content tree for the link
++ */
++ protected Content getNavLinkPackage() {
++ Content li = HtmlTree.LI(packageLabel);
++ return li;
++ }
++
++ /**
+ * Print the word "Use" in the navigation bar cell, to indicate that link
+ * is not available.
+ */
+@@ -612,6 +894,16 @@
+ }
+
+ /**
++ * Get the word "Use", to indicate that link is not available.
++ *
++ * @return a content tree for the link
++ */
++ protected Content getNavLinkClassUse() {
++ Content li = HtmlTree.LI(useLabel);
++ return li;
++ }
++
++ /**
+ * Print link for previous file.
+ *
+ * @param prev File name for the prev link.
+@@ -626,6 +918,22 @@
+ }
+
+ /**
++ * Get link for previous file.
++ *
++ * @param prev File name for the prev link
++ * @return a content tree for the link
++ */
++ public Content getNavLinkPrevious(String prev) {
++ Content li;
++ if (prev != null) {
++ li = HtmlTree.LI(getHyperLink(prev, "", prevLabel, "", ""));
++ }
++ else
++ li = HtmlTree.LI(prevLabel);
++ return li;
++ }
++
++ /**
+ * Print link for next file. If next is null, just print the label
+ * without linking it anywhere.
+ *
+@@ -641,16 +949,46 @@
+ }
+
+ /**
++ * Get link for next file. If next is null, just print the label
++ * without linking it anywhere.
++ *
++ * @param next File name for the next link
++ * @return a content tree for the link
++ */
++ public Content getNavLinkNext(String next) {
++ Content li;
++ if (next != null) {
++ li = HtmlTree.LI(getHyperLink(next, "", nextLabel, "", ""));
++ }
++ else
++ li = HtmlTree.LI(nextLabel);
++ return li;
++ }
++
++ /**
+ * Print "FRAMES" link, to switch to the frame version of the output.
+ *
+ * @param link File to be linked, "index.html".
+ */
+ protected void navShowLists(String link) {
+- print(getHyperLink(link + "?" + path + filename, "",
++ print(getHyperLinkString(link + "?" + path + filename, "",
+ configuration.getText("doclet.FRAMES"), true, "", "", "_top"));
+ }
+
+ /**
++ * Get "FRAMES" link, to switch to the frame version of the output.
++ *
++ * @param link File to be linked, "index.html"
++ * @return a content tree for the link
++ */
++ protected Content getNavShowLists(String link) {
++ Content framesContent = getHyperLink(link + "?" + path +
++ filename, "", framesLabel, "", "_top");
++ Content li = HtmlTree.LI(framesContent);
++ return li;
++ }
++
++ /**
+ * Print "FRAMES" link, to switch to the frame version of the output.
+ */
+ protected void navShowLists() {
+@@ -658,16 +996,37 @@
+ }
+
+ /**
++ * Get "FRAMES" link, to switch to the frame version of the output.
++ *
++ * @return a content tree for the link
++ */
++ protected Content getNavShowLists() {
++ return getNavShowLists(relativePath + "index.html");
++ }
++
++ /**
+ * Print "NO FRAMES" link, to switch to the non-frame version of the output.
+ *
+ * @param link File to be linked.
+ */
+ protected void navHideLists(String link) {
+- print(getHyperLink(link, "", configuration.getText("doclet.NO_FRAMES"),
++ print(getHyperLinkString(link, "", configuration.getText("doclet.NO_FRAMES"),
+ true, "", "", "_top"));
+ }
+
+ /**
++ * Get "NO FRAMES" link, to switch to the non-frame version of the output.
++ *
++ * @param link File to be linked
++ * @return a content tree for the link
++ */
++ protected Content getNavHideLists(String link) {
++ Content noFramesContent = getHyperLink(link, "", noframesLabel, "", "_top");
++ Content li = HtmlTree.LI(noFramesContent);
++ return li;
++ }
++
++ /**
+ * Print "Tree" link in the navigation bar. If there is only one package
+ * specified on the command line, then the "Tree" link will be to the
+ * only "package-tree.html" file otherwise it will be to the
+@@ -687,10 +1046,39 @@
+ }
+
+ /**
+- * Print "Tree" link to the "overview-tree.html" file.
++ * Get "Tree" link in the navigation bar. If there is only one package
++ * specified on the command line, then the "Tree" link will be to the
++ * only "package-tree.html" file otherwise it will be to the
++ * "overview-tree.html" file.
++ *
++ * @return a content tree for the link
+ */
+- protected void navLinkMainTree(String label) {
+- printHyperLink(relativePath + "overview-tree.html", label);
++ protected Content getNavLinkTree() {
++ Content treeLinkContent;
++ PackageDoc[] packages = configuration.root.specifiedPackages();
++ if (packages.length == 1 && configuration.root.specifiedClasses().length == 0) {
++ treeLinkContent = getHyperLink(pathString(packages[0],
++ "package-tree.html"), "", treeLabel,
++ "", "");
++ } else {
++ treeLinkContent = getHyperLink(relativePath + "overview-tree.html",
++ "", treeLabel, "", "");
++ }
++ Content li = HtmlTree.LI(treeLinkContent);
++ return li;
++ }
++
++ /**
++ * Get the overview tree link for the main tree.
++ *
++ * @param label the label for the link
++ * @return a content tree for the link
++ */
++ protected Content getNavLinkMainTree(String label) {
++ Content mainTreeContent = getHyperLink(relativePath + "overview-tree.html",
++ new StringContent(label));
++ Content li = HtmlTree.LI(mainTreeContent);
++ return li;
+ }
+
+ /**
+@@ -706,6 +1094,16 @@
+ }
+
+ /**
++ * Get the word "Class", to indicate that class link is not available.
++ *
++ * @return a content tree for the link
++ */
++ protected Content getNavLinkClass() {
++ Content li = HtmlTree.LI(classLabel);
++ return li;
++ }
++
++ /**
+ * Print "Deprecated" API link in the navigation bar.
+ */
+ protected void navLinkDeprecated() {
+@@ -716,6 +1114,18 @@
+ }
+
+ /**
++ * Get "Deprecated" API link in the navigation bar.
++ *
++ * @return a content tree for the link
++ */
++ protected Content getNavLinkDeprecated() {
++ Content linkContent = getHyperLink(relativePath +
++ "deprecated-list.html", "", deprecatedLabel, "", "");
++ Content li = HtmlTree.LI(linkContent);
++ return li;
++ }
++
++ /**
+ * Print link for generated index. If the user has used "-splitindex"
+ * command line option, then link to file "index-files/index-1.html" is
+ * generated otherwise link to file "index-all.html" is generated.
+@@ -725,6 +1135,21 @@
+ AllClassesFrameWriter.OUTPUT_FILE_NAME_NOFRAMES,
+ "", "", configuration.getText("doclet.All_Classes"), true);
+ }
++
++ /**
++ * Get link for generated index. If the user has used "-splitindex"
++ * command line option, then link to file "index-files/index-1.html" is
++ * generated otherwise link to file "index-all.html" is generated.
++ *
++ * @return a content tree for the link
++ */
++ protected Content getNavLinkClassIndex() {
++ Content allClassesContent = getHyperLink(relativePath +
++ AllClassesFrameWriter.OUTPUT_FILE_NAME_NOFRAMES, "",
++ allclassesLabel, "", "");
++ Content li = HtmlTree.LI(allClassesContent);
++ return li;
++ }
+ /**
+ * Print link for generated class index.
+ */
+@@ -741,6 +1166,20 @@
+ }
+
+ /**
++ * Get link for generated class index.
++ *
++ * @return a content tree for the link
++ */
++ protected Content getNavLinkIndex() {
++ Content linkContent = getHyperLink(relativePath +(configuration.splitindex?
++ DirectoryManager.getPath("index-files") + fileseparator: "") +
++ (configuration.splitindex?"index-1.html" : "index-all.html"), "",
++ indexLabel, "", "");
++ Content li = HtmlTree.LI(linkContent);
++ return li;
++ }
++
++ /**
+ * Print help file link. If user has provided a help file, then generate a
+ * link to the user given file, which is already copied to current or
+ * destination directory.
+@@ -762,6 +1201,29 @@
+ }
+
+ /**
++ * Get help file link. If user has provided a help file, then generate a
++ * link to the user given file, which is already copied to current or
++ * destination directory.
++ *
++ * @return a content tree for the link
++ */
++ protected Content getNavLinkHelp() {
++ String helpfilenm = configuration.helpfile;
++ if (helpfilenm.equals("")) {
++ helpfilenm = "help-doc.html";
++ } else {
++ int lastsep;
++ if ((lastsep = helpfilenm.lastIndexOf(File.separatorChar)) != -1) {
++ helpfilenm = helpfilenm.substring(lastsep + 1);
++ }
++ }
++ Content linkContent = getHyperLink(relativePath + helpfilenm, "",
++ helpLabel, "", "");
++ Content li = HtmlTree.LI(linkContent);
++ return li;
++ }
++
++ /**
+ * Print the word "Detail" in the navigation bar. No link is available.
+ */
+ protected void navDetail() {
+@@ -843,6 +1305,96 @@
+ }
+
+ /**
++ * Get summary table header.
++ *
++ * @param header the header for the table
++ * @param scope the scope of the headers
++ * @return a content tree for the header
++ */
++ public Content getSummaryTableHeader(String[] header, String scope) {
++ Content tr = new HtmlTree(HtmlTag.TR);
++ int size = header.length;
++ Content tableHeader;
++ if (size == 1) {
++ tableHeader = new StringContent(header[0]);
++ tr.addContent(HtmlTree.TH(HtmlStyle.colOne, scope, tableHeader));
++ return tr;
++ }
++ for (int i = 0; i < size; i++) {
++ tableHeader = new StringContent(header[i]);
++ if(i == 0)
++ tr.addContent(HtmlTree.TH(HtmlStyle.colFirst, scope, tableHeader));
++ else if(i == (size - 1))
++ tr.addContent(HtmlTree.TH(HtmlStyle.colLast, scope, tableHeader));
++ else
++ tr.addContent(HtmlTree.TH(scope, tableHeader));
++ }
++ return tr;
++ }
++
++ /**
++ * Get table caption.
++ *
++ * @param rawText the caption for the table which could be raw Html
++ * @return a content tree for the caption
++ */
++ public Content getTableCaption(String rawText) {
++ Content title = new RawHtml(rawText);
++ Content captionSpan = HtmlTree.SPAN(title);
++ Content space = getSpace();
++ Content tabSpan = HtmlTree.SPAN(HtmlStyle.tabEnd, space);
++ Content caption = HtmlTree.CAPTION(captionSpan);
++ caption.addContent(tabSpan);
++ return caption;
++ }
++
++ /**
++ * Get the marker anchor which will be added to the documentation tree.
++ *
++ * @param anchorName the anchor name attribute
++ * @return a content tree for the marker anchor
++ */
++ public Content getMarkerAnchor(String anchorName) {
++ return getMarkerAnchor(anchorName, null);
++ }
++
++ /**
++ * Get the marker anchor which will be added to the documentation tree.
++ *
++ * @param anchorName the anchor name attribute
++ * @param anchorContent the content that should be added to the anchor
++ * @return a content tree for the marker anchor
++ */
++ public Content getMarkerAnchor(String anchorName, Content anchorContent) {
++ if (anchorContent == null)
++ anchorContent = new Comment(" ");
++ Content markerAnchor = HtmlTree.A_NAME(anchorName, anchorContent);
++ return markerAnchor;
++ }
++
++ /**
++ * Returns a packagename content.
++ *
++ * @param packageDoc the package to check
++ * @return package name content
++ */
++ public Content getPackageName(PackageDoc packageDoc) {
++ return packageDoc == null || packageDoc.name().length() == 0 ?
++ defaultPackageLabel :
++ getPackageLabel(packageDoc.name());
++ }
++
++ /**
++ * Returns a package name label.
++ *
++ * @param parsedName the package name
++ * @return the package name content
++ */
++ public Content getPackageLabel(String packageName) {
++ return new StringContent(packageName);
++ }
++
++ /**
+ * Prine table header information about color, column span and the font.
+ *
+ * @param color Background color.
+@@ -1026,7 +1578,7 @@
+ * @param isStrong true if the label should be strong.
+ */
+ public void printPackageLink(PackageDoc pkg, String label, boolean isStrong) {
+- print(getPackageLink(pkg, label, isStrong));
++ print(getPackageLinkString(pkg, label, isStrong));
+ }
+
+ /**
+@@ -1039,7 +1591,7 @@
+ */
+ public void printPackageLink(PackageDoc pkg, String label, boolean isStrong,
+ String style) {
+- print(getPackageLink(pkg, label, isStrong, style));
++ print(getPackageLinkString(pkg, label, isStrong, style));
+ }
+
+ /**
+@@ -1050,9 +1602,9 @@
+ * @param isStrong true if the label should be strong.
+ * @return the link to the given package.
+ */
+- public String getPackageLink(PackageDoc pkg, String label,
++ public String getPackageLinkString(PackageDoc pkg, String label,
+ boolean isStrong) {
+- return getPackageLink(pkg, label, isStrong, "");
++ return getPackageLinkString(pkg, label, isStrong, "");
+ }
+
+ /**
+@@ -1064,7 +1616,7 @@
+ * @param style the font of the package link label.
+ * @return the link to the given package.
+ */
+- public String getPackageLink(PackageDoc pkg, String label, boolean isStrong,
++ public String getPackageLinkString(PackageDoc pkg, String label, boolean isStrong,
+ String style) {
+ boolean included = pkg != null && pkg.isIncluded();
+ if (! included) {
+@@ -1077,12 +1629,43 @@
+ }
+ }
+ if (included || pkg == null) {
+- return getHyperLink(pathString(pkg, "package-summary.html"),
++ return getHyperLinkString(pathString(pkg, "package-summary.html"),
+ "", label, isStrong, style);
+ } else {
+ String crossPkgLink = getCrossPackageLink(Util.getPackageName(pkg));
+ if (crossPkgLink != null) {
+- return getHyperLink(crossPkgLink, "", label, isStrong, style);
++ return getHyperLinkString(crossPkgLink, "", label, isStrong, style);
++ } else {
++ return label;
++ }
++ }
++ }
++
++ /**
++ * Return the link to the given package.
++ *
++ * @param pkg the package to link to.
++ * @param label the label for the link.
++ * @return a content tree for the package link.
++ */
++ public Content getPackageLink(PackageDoc pkg, Content label) {
++ boolean included = pkg != null && pkg.isIncluded();
++ if (! included) {
++ PackageDoc[] packages = configuration.packages;
++ for (int i = 0; i < packages.length; i++) {
++ if (packages[i].equals(pkg)) {
++ included = true;
++ break;
++ }
++ }
++ }
++ if (included || pkg == null) {
++ return getHyperLink(pathString(pkg, "package-summary.html"),
++ "", label);
++ } else {
++ String crossPkgLink = getCrossPackageLink(Util.getPackageName(pkg));
++ if (crossPkgLink != null) {
++ return getHyperLink(crossPkgLink, "", label);
+ } else {
+ return label;
+ }
+@@ -1110,6 +1693,29 @@
+ }
+
+ /**
++ * Add the link to the content tree.
++ *
++ * @param doc program element doc for which the link will be added
++ * @param label label for the link
++ * @param htmltree the content tree to which the link will be added
++ */
++ public void addSrcLink(ProgramElementDoc doc, Content label, Content htmltree) {
++ if (doc == null) {
++ return;
++ }
++ ClassDoc cd = doc.containingClass();
++ if (cd == null) {
++ //d must be a class doc since in has no containing class.
++ cd = (ClassDoc) doc;
++ }
++ String href = relativePath + DocletConstants.SOURCE_OUTPUT_DIR_NAME
++ + DirectoryManager.getDirectoryPath(cd.containingPackage())
++ + cd.name() + ".html#" + SourceToHTMLConverter.getAnchorName(doc);
++ Content linkContent = getHyperLink(href, "", label, "", "");
++ htmltree.addContent(linkContent);
++ }
++
++ /**
+ * Return the link to the given class.
+ *
+ * @param linkInfo the information about the link.
+@@ -1173,7 +1779,7 @@
+ //the -link option. There are ways to determine if an external package
+ //exists, but no way to determine if the external class exists. We just
+ //have to assume that it does.
+- return getHyperLink(
++ return getHyperLinkString(
+ configuration.extern.getExternalLink(packageName, relativePath,
+ className + ".html?is-external=true"),
+ refMemName == null ? "" : refMemName,
+@@ -1198,17 +1804,27 @@
+ "package-summary.html?is-external=true");
+ }
+
+- public void printQualifiedClassLink(int context, ClassDoc cd) {
+- printLink(new LinkInfoImpl(context, cd,
+- configuration.getClassName(cd), ""));
++ /**
++ * Get the class link.
++ *
++ * @param context the id of the context where the link will be added
++ * @param cd the class doc to link to
++ * @return a content tree for the link
++ */
++ public Content getQualifiedClassLink(int context, ClassDoc cd) {
++ return new RawHtml(getLink(new LinkInfoImpl(context, cd,
++ configuration.getClassName(cd), "")));
+ }
+
+ /**
+- * Print Class link, with only class name as the link and prefixing
+- * plain package name.
++ * Add the class link.
++ *
++ * @param context the id of the context where the link will be added
++ * @param cd the class doc to link to
++ * @param contentTree the content tree to which the link will be added
+ */
+- public void printPreQualifiedClassLink(int context, ClassDoc cd) {
+- print(getPreQualifiedClassLink(context, cd, false));
++ public void addPreQualifiedClassLink(int context, ClassDoc cd, Content contentTree) {
++ addPreQualifiedClassLink(context, cd, false, contentTree);
+ }
+
+ /**
+@@ -1231,13 +1847,36 @@
+ return classlink;
+ }
+
++ /**
++ * Add the class link with the package portion of the label in
++ * plain text. If the qualifier is excluded, it will not be included in the
++ * link label.
++ *
++ * @param context the id of the context where the link will be added
++ * @param cd the class to link to
++ * @param isStrong true if the link should be strong
++ * @param contentTree the content tree to which the link with be added
++ */
++ public void addPreQualifiedClassLink(int context,
++ ClassDoc cd, boolean isStrong, Content contentTree) {
++ PackageDoc pd = cd.containingPackage();
++ if(pd != null && ! configuration.shouldExcludeQualifier(pd.name())) {
++ contentTree.addContent(getPkgName(cd));
++ }
++ contentTree.addContent(new RawHtml(getLink(new LinkInfoImpl(
++ context, cd, cd.name(), isStrong))));
++ }
+
+ /**
+- * Print Class link, with only class name as the strong link and prefixing
++ * Add the class link, with only class name as the strong link and prefixing
+ * plain package name.
++ *
++ * @param context the id of the context where the link will be added
++ * @param cd the class to link to
++ * @param contentTree the content tree to which the link with be added
+ */
+- public void printPreQualifiedStrongClassLink(int context, ClassDoc cd) {
+- print(getPreQualifiedClassLink(context, cd, true));
++ public void addPreQualifiedStrongClassLink(int context, ClassDoc cd, Content contentTree) {
++ addPreQualifiedClassLink(context, cd, true, contentTree);
+ }
+
+ public void printText(String key) {
+@@ -1265,16 +1904,15 @@
+ }
+
+ /**
+- * Print the link for the given member.
++ * Get the link for the given member.
+ *
+- * @param context the id of the context where the link will be printed.
+- * @param doc the member being linked to.
+- * @param label the label for the link.
+- * @param strong true if the link should be strong.
++ * @param context the id of the context where the link will be added
++ * @param doc the member being linked to
++ * @param label the label for the link
++ * @return a content tree for the doc link
+ */
+- public void printDocLink(int context, MemberDoc doc, String label,
+- boolean strong) {
+- print(getDocLink(context, doc, label, strong));
++ public Content getDocLink(int context, MemberDoc doc, String label) {
++ return getDocLink(context, doc.containingClass(), doc, label);
+ }
+
+ /**
+@@ -1336,6 +1974,34 @@
+ }
+ }
+
++ /**
++ * Return the link for the given member.
++ *
++ * @param context the id of the context where the link will be added
++ * @param classDoc the classDoc that we should link to. This is not
++ * necessarily equal to doc.containingClass(). We may be
++ * inheriting comments
++ * @param doc the member being linked to
++ * @param label the label for the link
++ * @return the link for the given member
++ */
++ public Content getDocLink(int context, ClassDoc classDoc, MemberDoc doc,
++ String label) {
++ if (! (doc.isIncluded() ||
++ Util.isLinkable(classDoc, configuration()))) {
++ return new StringContent(label);
++ } else if (doc instanceof ExecutableMemberDoc) {
++ ExecutableMemberDoc emd = (ExecutableMemberDoc)doc;
++ return new RawHtml(getLink(new LinkInfoImpl(context, classDoc,
++ getAnchor(emd), label, false)));
++ } else if (doc instanceof MemberDoc) {
++ return new RawHtml(getLink(new LinkInfoImpl(context, classDoc,
++ doc.name(), label, false)));
++ } else {
++ return new StringContent(label);
++ }
++ }
++
+ public void anchor(ExecutableMemberDoc emd) {
+ anchor(getAnchor(emd));
+ }
+@@ -1390,14 +2056,14 @@
+ //@see is referencing an included package
+ String packageName = isplaintext ? refPackage.name() :
+ getCode() + refPackage.name() + getCodeEnd();
+- result.append(getPackageLink(refPackage,
++ result.append(getPackageLinkString(refPackage,
+ label.length() == 0 ? packageName : label, false));
+ } else {
+ //@see is not referencing an included class or package. Check for cross links.
+ String classCrossLink, packageCrossLink = getCrossPackageLink(refClassName);
+ if (packageCrossLink != null) {
+ //Package cross link found
+- result.append(getHyperLink(packageCrossLink, "",
++ result.append(getHyperLinkString(packageCrossLink, "",
+ (label.length() == 0)? text : label, false));
+ } else if ((classCrossLink = getCrossClassLink(refClassName,
+ refMemName, label, false, "", ! isplaintext)) != null) {
+@@ -1456,18 +2122,61 @@
+ printCommentTags(doc, tag.inlineTags(), false, false);
+ }
+
++ /**
++ * Add the inline comment.
++ *
++ * @param doc the doc for which the inline comment will be added
++ * @param tag the inline tag to be added
++ * @param htmltree the content tree to which the comment will be added
++ */
++ public void addInlineComment(Doc doc, Tag tag, Content htmltree) {
++ addCommentTags(doc, tag.inlineTags(), false, false, htmltree);
++ }
++
+ public void printInlineDeprecatedComment(Doc doc, Tag tag) {
+ printCommentTags(doc, tag.inlineTags(), true, false);
+ }
+
++ /**
++ * Add the inline deprecated comment.
++ *
++ * @param doc the doc for which the inline deprecated comment will be added
++ * @param tag the inline tag to be added
++ * @param htmltree the content tree to which the comment will be added
++ */
++ public void addInlineDeprecatedComment(Doc doc, Tag tag, Content htmltree) {
++ addCommentTags(doc, tag.inlineTags(), true, false, htmltree);
++ }
++
+ public void printSummaryComment(Doc doc) {
+ printSummaryComment(doc, doc.firstSentenceTags());
+ }
+
++ /**
++ * Adds the summary content.
++ *
++ * @param doc the doc for which the summary will be generated
++ * @param htmltree the documentation tree to which the summary will be added
++ */
++ public void addSummaryComment(Doc doc, Content htmltree) {
++ addSummaryComment(doc, doc.firstSentenceTags(), htmltree);
++ }
++
+ public void printSummaryComment(Doc doc, Tag[] firstSentenceTags) {
+ printCommentTags(doc, firstSentenceTags, false, true);
+ }
+
++ /**
++ * Adds the summary content.
++ *
++ * @param doc the doc for which the summary will be generated
++ * @param firstSentenceTags the first sentence tags for the doc
++ * @param htmltree the documentation tree to which the summary will be added
++ */
++ public void addSummaryComment(Doc doc, Tag[] firstSentenceTags, Content htmltree) {
++ addCommentTags(doc, firstSentenceTags, false, true, htmltree);
++ }
++
+ public void printSummaryDeprecatedComment(Doc doc) {
+ printCommentTags(doc, doc.firstSentenceTags(), true, true);
+ }
+@@ -1476,11 +2185,25 @@
+ printCommentTags(doc, tag.firstSentenceTags(), true, true);
+ }
+
++ public void addSummaryDeprecatedComment(Doc doc, Tag tag, Content htmltree) {
++ addCommentTags(doc, tag.firstSentenceTags(), true, true, htmltree);
++ }
++
+ public void printInlineComment(Doc doc) {
+ printCommentTags(doc, doc.inlineTags(), false, false);
+ p();
+ }
+
++ /**
++ * Adds the inline comment.
++ *
++ * @param doc the doc for which the inline comments will be generated
++ * @param htmltree the documentation tree to which the inline comments will be added
++ */
++ public void addInlineComment(Doc doc, Content htmltree) {
++ addCommentTags(doc, doc.inlineTags(), false, false, htmltree);
++ }
++
+ public void printInlineDeprecatedComment(Doc doc) {
+ printCommentTags(doc, doc.inlineTags(), true, false);
+ }
+@@ -1503,6 +2226,36 @@
+ }
+
+ /**
++ * Adds the comment tags.
++ *
++ * @param doc the doc for which the comment tags will be generated
++ * @param tags the first sentence tags for the doc
++ * @param depr true if it is deprecated
++ * @param first true if the first sentenge tags should be added
++ * @param htmltree the documentation tree to which the comment tags will be added
++ */
++ private void addCommentTags(Doc doc, Tag[] tags, boolean depr,
++ boolean first, Content htmltree) {
++ if(configuration.nocomment){
++ return;
++ }
++ Content div;
++ Content result = new RawHtml(commentTagsToString(null, doc, tags, first));
++ if (depr) {
++ Content italic = HtmlTree.I(result);
++ div = HtmlTree.DIV(HtmlStyle.block, italic);
++ htmltree.addContent(div);
++ }
++ else {
++ div = HtmlTree.DIV(HtmlStyle.block, result);
++ htmltree.addContent(div);
++ }
++ if (tags.length == 0) {
++ htmltree.addContent(getSpace());
++ }
++ }
++
++ /**
+ * Converts inline tags and text to text strings, expanding the
+ * inline tags along the way. Called wherever text can contain
+ * an inline tag, such as in comments or in free-form text arguments
+@@ -1612,8 +2365,8 @@
+ return text;
+ }
+
+- if (! redirectPathFromRoot.endsWith(DirectoryManager.URL_FILE_SEPERATOR)) {
+- redirectPathFromRoot += DirectoryManager.URL_FILE_SEPERATOR;
++ if (! redirectPathFromRoot.endsWith(DirectoryManager.URL_FILE_SEPARATOR)) {
++ redirectPathFromRoot += DirectoryManager.URL_FILE_SEPARATOR;
+ }
+
+ //Redirect all relative links.
+@@ -1739,6 +2492,27 @@
+ }
+
+ /**
++ * Returns a link to the stylesheet file.
++ *
++ * @return an HtmlTree for the lINK tag which provides the stylesheet location
++ */
++ public HtmlTree getStyleSheetProperties() {
++ String filename = configuration.stylesheetfile;
++ if (filename.length() > 0) {
++ File stylefile = new File(filename);
++ String parent = stylefile.getParent();
++ filename = (parent == null)?
++ filename:
++ filename.substring(parent.length() + 1);
++ } else {
++ filename = "stylesheet.css";
++ }
++ filename = relativePath + filename;
++ HtmlTree link = HtmlTree.LINK("stylesheet", "text/css", filename, "Style");
++ return link;
++ }
++
++ /**
+ * According to the Java Language Specifications, all the outer classes
+ * and static nested classes are core classes.
+ */
+@@ -1765,6 +2539,16 @@
+ }
+
+ /**
++ * Adds the annotatation types for the given doc.
++ *
++ * @param packageDoc the package to write annotations for
++ * @param htmltree the content tree to which the annotation types will be added
++ */
++ public void addAnnotationInfo(ProgramElementDoc doc, Content htmltree) {
++ addAnnotationInfo(doc, doc.annotations(), htmltree);
++ }
++
++ /**
+ * Write the annotatation types for the given doc and parameter.
+ *
+ * @param indent the number of spaced to indent the parameters.
+@@ -1776,6 +2560,30 @@
+ }
+
+ /**
++ * Adds the annotatation types for the given packageDoc.
++ *
++ * @param packageDoc the package to write annotations for.
++ * @param htmltree the documentation tree to which the annotation info will be
++ * added
++ */
++ public void addAnnotationInfo(PackageDoc packageDoc, Content htmltree) {
++ addAnnotationInfo(packageDoc, packageDoc.annotations(), htmltree);
++ }
++
++ /**
++ * Add the annotatation types for the given doc and parameter.
++ *
++ * @param indent the number of spaces to indent the parameters.
++ * @param doc the doc to write annotations for.
++ * @param param the parameter to write annotations for.
++ * @param tree the content tree to which the annotation types will be added
++ */
++ public boolean addAnnotationInfo(int indent, Doc doc, Parameter param,
++ Content tree) {
++ return addAnnotationInfo(indent, doc, param.annotations(), false, tree);
++ }
++
++ /**
+ * Write the annotatation types for the given doc.
+ *
+ * @param doc the doc to write annotations for.
+@@ -1786,6 +2594,19 @@
+ }
+
+ /**
++ * Adds the annotatation types for the given doc.
++ *
++ * @param doc the doc to write annotations for.
++ * @param descList the array of {@link AnnotationDesc}.
++ * @param htmltree the documentation tree to which the annotation info will be
++ * added
++ */
++ private void addAnnotationInfo(Doc doc, AnnotationDesc[] descList,
++ Content htmltree) {
++ addAnnotationInfo(0, doc, descList, true, htmltree);
++ }
++
++ /**
+ * Write the annotatation types for the given doc.
+ *
+ * @param indent the number of extra spaces to indent the annotations.
+@@ -1806,6 +2627,29 @@
+ }
+
+ /**
++ * Adds the annotatation types for the given doc.
++ *
++ * @param indent the number of extra spaces to indent the annotations.
++ * @param doc the doc to write annotations for.
++ * @param descList the array of {@link AnnotationDesc}.
++ * @param htmltree the documentation tree to which the annotation info will be
++ * added
++ */
++ private boolean addAnnotationInfo(int indent, Doc doc,
++ AnnotationDesc[] descList, boolean lineBreak, Content htmltree) {
++ List<String> annotations = getAnnotations(indent, descList, lineBreak);
++ if (annotations.size() == 0) {
++ return false;
++ }
++ Content annotationContent;
++ for (Iterator<String> iter = annotations.iterator(); iter.hasNext();) {
++ annotationContent = new RawHtml(iter.next());
++ htmltree.addContent(annotationContent);
++ }
++ return true;
++ }
++
++ /**
+ * Return the string representations of the annotation types for
+ * the given doc.
+ *
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/HtmlSerialFieldWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/HtmlSerialFieldWriter.java
+--- langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlSerialFieldWriter.java
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlSerialFieldWriter.java
+@@ -31,6 +31,7 @@
+ import com.sun.tools.doclets.internal.toolkit.*;
+ import com.sun.tools.doclets.internal.toolkit.taglets.*;
+ import com.sun.tools.doclets.internal.toolkit.util.*;
++import com.sun.tools.doclets.formats.html.markup.*;
+
+ /**
+ * Generate serialized form for serializable fields.
+@@ -46,8 +47,6 @@
+
+ private boolean printedOverallAnchor = false;
+
+- private boolean printedFirstMember = false;
+-
+ public HtmlSerialFieldWriter(SubWriterHolderWriter writer,
+ ClassDoc classdoc) {
+ super(writer, classdoc);
+@@ -69,109 +68,143 @@
+ }
+ }
+
+- public void writeHeader(String heading) {
+- if (! printedOverallAnchor) {
+- writer.anchor("serializedForm");
+- printedOverallAnchor = true;
+- writer.printTableHeadingBackground(heading);
+- writer.println();
+- if (heading.equals(
+- configuration().getText("doclet.Serialized_Form_class"))) {
+- assert !writer.getMemberDetailsListPrinted();
+- }
+- } else {
+- writer.printTableHeadingBackground(heading);
+- writer.println();
+- }
+- }
+-
+- public void writeMemberHeader(ClassDoc fieldType, String fieldTypeStr,
+- String fieldDimensions, String fieldName) {
+- if (printedFirstMember) {
+- writer.printMemberHeader();
+- }
+- printedFirstMember = true;
+- writer.h3();
+- writer.print(fieldName);
+- writer.h3End();
+- writer.pre();
+- if (fieldType == null) {
+- writer.print(fieldTypeStr);
+- } else {
+- writer.printLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_SERIAL_MEMBER,
+- fieldType));
+- }
+- print(fieldDimensions + ' ');
+- strong(fieldName);
+- writer.preEnd();
+- assert !writer.getMemberDetailsListPrinted();
++ /**
++ * Return the header for serializable fields section.
++ *
++ * @return a content tree for the header
++ */
++ public Content getSerializableFieldsHeader() {
++ HtmlTree ul = new HtmlTree(HtmlTag.UL);
++ ul.addStyle(HtmlStyle.blockList);
++ return ul;
+ }
+
+ /**
+- * Write the deprecated information for this member.
++ * Return the header for serializable fields content section.
+ *
+- * @param field the field to document.
++ * @param isLastContent true if the cotent being documented is the last content.
++ * @return a content tree for the header
+ */
+- public void writeMemberDeprecatedInfo(FieldDoc field) {
+- printDeprecated(field);
++ public Content getFieldsContentHeader(boolean isLastContent) {
++ HtmlTree li = new HtmlTree(HtmlTag.LI);
++ if (isLastContent)
++ li.addStyle(HtmlStyle.blockListLast);
++ else
++ li.addStyle(HtmlStyle.blockList);
++ return li;
+ }
+
+ /**
+- * Write the description text for this member.
++ * Add serializable fields.
++ *
++ * @param heading the heading for the section
++ * @param serializableFieldsTree the tree to be added to the serializable fileds
++ * content tree
++ * @return a content tree for the serializable fields content
++ */
++ public Content getSerializableFields(String heading, Content serializableFieldsTree) {
++ HtmlTree li = new HtmlTree(HtmlTag.LI);
++ li.addStyle(HtmlStyle.blockList);
++ if (serializableFieldsTree.isValid()) {
++ if (!printedOverallAnchor) {
++ li.addContent(writer.getMarkerAnchor("serializedForm"));
++ printedOverallAnchor = true;
++ }
++ Content headingContent = new StringContent(heading);
++ Content serialHeading = HtmlTree.HEADING(HtmlConstants.SERIALIZED_MEMBER_HEADING,
++ headingContent);
++ li.addContent(serialHeading);
++ li.addContent(serializableFieldsTree);
++ }
++ return li;
++ }
++
++ /**
++ * Add the member header.
++ *
++ * @param fieldsType the class document to be listed
++ * @param fieldTypeStr the string for the filed type to be documented
++ * @param fieldDimensions the dimensions of the field string to be added
++ * @param firldName name of the field to be added
++ * @param contentTree the content tree to which the member header will be added
++ */
++ public void addMemberHeader(ClassDoc fieldType, String fieldTypeStr,
++ String fieldDimensions, String fieldName, Content contentTree) {
++ Content nameContent = new RawHtml(fieldName);
++ Content heading = HtmlTree.HEADING(HtmlConstants.MEMBER_HEADING, nameContent);
++ contentTree.addContent(heading);
++ Content pre = new HtmlTree(HtmlTag.PRE);
++ if (fieldType == null) {
++ pre.addContent(fieldTypeStr);
++ } else {
++ Content fieldContent = new RawHtml(writer.getLink(new LinkInfoImpl(
++ LinkInfoImpl.CONTEXT_SERIAL_MEMBER, fieldType)));
++ pre.addContent(fieldContent);
++ }
++ pre.addContent(fieldDimensions + " ");
++ pre.addContent(fieldName);
++ contentTree.addContent(pre);
++ }
++
++ /**
++ * Add the deprecated information for this member.
+ *
+ * @param field the field to document.
++ * @param contentTree the tree to which the deprecated info will be added
+ */
+- public void writeMemberDescription(FieldDoc field) {
++ public void addMemberDeprecatedInfo(FieldDoc field, Content contentTree) {
++ addDeprecatedInfo(field, contentTree);
++ }
++
++ /**
++ * Add the description text for this member.
++ *
++ * @param field the field to document.
++ * @param contentTree the tree to which the deprecated info will be added
++ */
++ public void addMemberDescription(FieldDoc field, Content contentTree) {
+ if (field.inlineTags().length > 0) {
+- writer.printMemberDetailsListStartTag();
+- writer.dd();
+- writer.printInlineComment(field);
+- writer.ddEnd();
++ writer.addInlineComment(field, contentTree);
+ }
+ Tag[] tags = field.tags("serial");
+ if (tags.length > 0) {
+- writer.printMemberDetailsListStartTag();
+- writer.dd();
+- writer.printInlineComment(field, tags[0]);
+- writer.ddEnd();
++ writer.addInlineComment(field, tags[0], contentTree);
+ }
+ }
+
+ /**
+- * Write the description text for this member represented by the tag.
++ * Add the description text for this member represented by the tag.
+ *
+- * @param serialFieldTag the field to document (represented by tag).
++ * @param serialFieldTag the field to document (represented by tag)
++ * @param contentTree the tree to which the deprecated info will be added
+ */
+- public void writeMemberDescription(SerialFieldTag serialFieldTag) {
++ public void addMemberDescription(SerialFieldTag serialFieldTag, Content contentTree) {
+ String serialFieldTagDesc = serialFieldTag.description().trim();
+ if (!serialFieldTagDesc.isEmpty()) {
+- writer.dl();
+- writer.dd();
+- writer.print(serialFieldTagDesc);
+- writer.ddEnd();
+- writer.dlEnd();
++ Content serialFieldContent = new RawHtml(serialFieldTagDesc);
++ Content div = HtmlTree.DIV(HtmlStyle.block, serialFieldContent);
++ contentTree.addContent(div);
+ }
+ }
+
+ /**
+- * Write the tag information for this member.
++ * Add the tag information for this member.
+ *
+ * @param field the field to document.
++ * @param contentTree the tree to which the member tags info will be added
+ */
+- public void writeMemberTags(FieldDoc field) {
++ public void addMemberTags(FieldDoc field, Content contentTree) {
+ TagletOutputImpl output = new TagletOutputImpl("");
+ TagletWriter.genTagOuput(configuration().tagletManager, field,
+- configuration().tagletManager.getCustomTags(field),
++ configuration().tagletManager.getCustomTags(field),
+ writer.getTagletWriterInstance(false), output);
+ String outputString = output.toString().trim();
++ Content dlTags = new HtmlTree(HtmlTag.DL);
+ if (!outputString.isEmpty()) {
+- writer.printMemberDetailsListStartTag();
+- writer.dd();
+- writer.dl();
+- print(outputString);
+- writer.dlEnd();
+- writer.ddEnd();
++ Content tagContent = new RawHtml(outputString);
++ dlTags.addContent(tagContent);
+ }
++ contentTree.addContent(dlTags);
+ }
+
+ /**
+@@ -192,24 +225,4 @@
+ return true;
+ return false;
+ }
+-
+- public void writeMemberFooter() {
+- printMemberFooter();
+- }
+-
+- /**
+- * Write the footer information. If the serilization overview section was
+- * printed, check for definition list and close list tag.
+- *
+- * @param heading the heading that was written.
+- */
+- public void writeFooter(String heading) {
+- if (printedOverallAnchor) {
+- if (heading.equals(
+- configuration().getText("doclet.Serialized_Form_class"))) {
+- writer.printMemberDetailsListEndTag();
+- assert !writer.getMemberDetailsListPrinted();
+- }
+- }
+- }
+ }
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/HtmlSerialMethodWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/HtmlSerialMethodWriter.java
+--- langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlSerialMethodWriter.java
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlSerialMethodWriter.java
+@@ -28,57 +28,119 @@
+ import com.sun.javadoc.*;
+ import com.sun.tools.doclets.internal.toolkit.*;
+ import com.sun.tools.doclets.internal.toolkit.taglets.*;
++import com.sun.tools.doclets.formats.html.markup.*;
+
+ /**
+ * Generate serialized form for Serializable/Externalizable methods.
+ * Documentation denoted by the <code>serialData</code> tag is processed.
+ *
+ * @author Joe Fialli
++ * @author Bhavesh Patel (Modified)
+ */
+ public class HtmlSerialMethodWriter extends MethodWriterImpl implements
+ SerializedFormWriter.SerialMethodWriter{
+
+- private boolean printedFirstMember = false;
+-
+ public HtmlSerialMethodWriter(SubWriterHolderWriter writer,
+ ClassDoc classdoc) {
+ super(writer, classdoc);
+ }
+
+- public void writeHeader(String heading) {
+- writer.anchor("serialized_methods");
+- writer.printTableHeadingBackground(heading);
+- writer.p();
++ /**
++ * Return the header for serializable methods section.
++ *
++ * @return a content tree for the header
++ */
++ public Content getSerializableMethodsHeader() {
++ HtmlTree ul = new HtmlTree(HtmlTag.UL);
++ ul.addStyle(HtmlStyle.blockList);
++ return ul;
+ }
+
+- public void writeNoCustomizationMsg(String msg) {
+- writer.print(msg);
+- writer.p();
++ /**
++ * Return the header for serializable methods content section.
++ *
++ * @param isLastContent true if the cotent being documented is the last content.
++ * @return a content tree for the header
++ */
++ public Content getMethodsContentHeader(boolean isLastContent) {
++ HtmlTree li = new HtmlTree(HtmlTag.LI);
++ if (isLastContent)
++ li.addStyle(HtmlStyle.blockListLast);
++ else
++ li.addStyle(HtmlStyle.blockList);
++ return li;
+ }
+
+- public void writeMemberHeader(MethodDoc member) {
+- if (printedFirstMember) {
+- writer.printMemberHeader();
+- }
+- printedFirstMember = true;
+- writer.anchor(member);
+- printHead(member);
+- writeSignature(member);
++ /**
++ * Add serializable methods.
++ *
++ * @param heading the heading for the section
++ * @param serializableMethodContent the tree to be added to the serializable methods
++ * content tree
++ * @return a content tree for the serializable methods content
++ */
++ public Content getSerializableMethods(String heading, Content serializableMethodContent) {
++ Content li = HtmlTree.LI(HtmlStyle.blockList, writer.getMarkerAnchor(
++ "serialized_methods"));
++ Content headingContent = new StringContent(heading);
++ Content serialHeading = HtmlTree.HEADING(HtmlConstants.SERIALIZED_MEMBER_HEADING,
++ headingContent);
++ li.addContent(serialHeading);
++ li.addContent(serializableMethodContent);
++ return li;
+ }
+
+- public void writeMemberFooter() {
+- printMemberFooter();
++ /**
++ * Return the no customization message.
++ *
++ * @param msg the message to be displayed
++ * @return no customization message content
++ */
++ public Content getNoCustomizationMsg(String msg) {
++ Content noCustomizationMsg = new StringContent(msg);
++ return noCustomizationMsg;
+ }
+
+- public void writeDeprecatedMemberInfo(MethodDoc member) {
+- printDeprecated(member);
++ /**
++ * Add the member header.
++ *
++ * @param member the method document to be listed
++ * @param methodsContentTree the content tree to which the member header will be added
++ */
++ public void addMemberHeader(MethodDoc member, Content methodsContentTree) {
++ methodsContentTree.addContent(writer.getMarkerAnchor(
++ writer.getAnchor(member)));
++ methodsContentTree.addContent(getHead(member));
++ methodsContentTree.addContent(getSignature(member));
+ }
+
+- public void writeMemberDescription(MethodDoc member) {
+- printComment(member);
++ /**
++ * Add the deprecated information for this member.
++ *
++ * @param member the method to document.
++ * @param methodsContentTree the tree to which the deprecated info will be added
++ */
++ public void addDeprecatedMemberInfo(MethodDoc member, Content methodsContentTree) {
++ addDeprecatedInfo(member, methodsContentTree);
+ }
+
+- public void writeMemberTags(MethodDoc member) {
++ /**
++ * Add the description text for this member.
++ *
++ * @param member the method to document.
++ * @param methodsContentTree the tree to which the deprecated info will be added
++ */
++ public void addMemberDescription(MethodDoc member, Content methodsContentTree) {
++ addComment(member, methodsContentTree);
++ }
++
++ /**
++ * Add the tag information for this member.
++ *
++ * @param member the method to document.
++ * @param methodsContentTree the tree to which the member tags info will be added
++ */
++ public void addMemberTags(MethodDoc member, Content methodsContentTree) {
+ TagletOutputImpl output = new TagletOutputImpl("");
+ TagletManager tagletManager =
+ ConfigurationImpl.getInstance().tagletManager;
+@@ -86,14 +148,12 @@
+ tagletManager.getSerializedFormTags(),
+ writer.getTagletWriterInstance(false), output);
+ String outputString = output.toString().trim();
++ Content dlTags = new HtmlTree(HtmlTag.DL);
+ if (!outputString.isEmpty()) {
+- writer.printMemberDetailsListStartTag();
+- writer.dd();
+- writer.dl();
+- print(outputString);
+- writer.dlEnd();
+- writer.ddEnd();
++ Content tagContent = new RawHtml(outputString);
++ dlTags.addContent(tagContent);
+ }
++ methodsContentTree.addContent(dlTags);
+ MethodDoc method = (MethodDoc)member;
+ if (method.name().compareTo("writeExternal") == 0
+ && method.tags("serialData").length == 0) {
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/LinkFactoryImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/LinkFactoryImpl.java
+--- langtools/src/share/classes/com/sun/tools/doclets/formats/html/LinkFactoryImpl.java
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/LinkFactoryImpl.java
+@@ -79,7 +79,7 @@
+ String filename = pathString(classLinkInfo);
+ if (linkInfo.linkToSelf ||
+ !(linkInfo.classDoc.name() + ".html").equals(m_writer.filename)) {
+- linkOutput.append(m_writer.getHyperLink(filename,
++ linkOutput.append(m_writer.getHyperLinkString(filename,
+ classLinkInfo.where, label.toString(),
+ classLinkInfo.isStrong, classLinkInfo.styleName,
+ title, classLinkInfo.target));
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/MethodWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/MethodWriterImpl.java
+--- langtools/src/share/classes/com/sun/tools/doclets/formats/html/MethodWriterImpl.java
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/MethodWriterImpl.java
+@@ -28,9 +28,9 @@
+ import java.io.*;
+
+ import com.sun.javadoc.*;
++import com.sun.tools.doclets.formats.html.markup.*;
+ import com.sun.tools.doclets.internal.toolkit.*;
+ import com.sun.tools.doclets.internal.toolkit.util.*;
+-import com.sun.tools.doclets.internal.toolkit.taglets.*;
+
+ /**
+ * Writes method documentation in HTML format.
+@@ -43,8 +43,6 @@
+ public class MethodWriterImpl extends AbstractExecutableMemberWriter
+ implements MethodWriter, MemberSummaryWriter {
+
+- private boolean printedSummaryHeader = false;
+-
+ /**
+ * Construct a new MethodWriterImpl.
+ *
+@@ -65,184 +63,127 @@
+ }
+
+ /**
+- * Write the methods summary header for the given class.
+- *
+- * @param classDoc the class the summary belongs to.
++ * {@inheritDoc}
+ */
+- public void writeMemberSummaryHeader(ClassDoc classDoc) {
+- printedSummaryHeader = true;
+- writer.println();
+- writer.println("<!-- ========== METHOD SUMMARY =========== -->");
+- writer.println();
+- writer.printSummaryHeader(this, classDoc);
+- }
+-
+- /**
+- * Write the methods summary footer for the given class.
+- *
+- * @param classDoc the class the summary belongs to.
+- */
+- public void writeMemberSummaryFooter(ClassDoc classDoc) {
+- writer.printSummaryFooter(this, classDoc);
+- }
+-
+- /**
+- * Write the inherited methods summary header for the given class.
+- *
+- * @param classDoc the class the summary belongs to.
+- */
+- public void writeInheritedMemberSummaryHeader(ClassDoc classDoc) {
+- if(! printedSummaryHeader){
+- //We don't want inherited summary to not be under heading.
+- writeMemberSummaryHeader(classDoc);
+- writeMemberSummaryFooter(classDoc);
+- printedSummaryHeader = true;
+- }
+- writer.printInheritedSummaryHeader(this, classDoc);
++ public Content getMemberSummaryHeader(ClassDoc classDoc,
++ Content memberSummaryTree) {
++ memberSummaryTree.addContent(HtmlConstants.START_OF_METHOD_SUMMARY);
++ Content memberTree = writer.getMemberTreeHeader();
++ writer.addSummaryHeader(this, classDoc, memberTree);
++ return memberTree;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- public void writeInheritedMemberSummary(ClassDoc classDoc,
+- ProgramElementDoc method, boolean isFirst, boolean isLast) {
+- writer.printInheritedSummaryMember(this, classDoc, method, isFirst);
++ public Content getMethodDetailsTreeHeader(ClassDoc classDoc,
++ Content memberDetailsTree) {
++ memberDetailsTree.addContent(HtmlConstants.START_OF_METHOD_DETAILS);
++ Content methodDetailsTree = writer.getMemberTreeHeader();
++ methodDetailsTree.addContent(writer.getMarkerAnchor("method_detail"));
++ Content heading = HtmlTree.HEADING(HtmlConstants.DETAILS_HEADING,
++ writer.methodDetailsLabel);
++ methodDetailsTree.addContent(heading);
++ return methodDetailsTree;
+ }
+
+ /**
+- * Write the inherited methods summary footer for the given class.
+- *
+- * @param classDoc the class the summary belongs to.
++ * {@inheritDoc}
+ */
+- public void writeInheritedMemberSummaryFooter(ClassDoc classDoc) {
+- writer.printInheritedSummaryFooter(this, classDoc); ;
++ public Content getMethodDocTreeHeader(MethodDoc method,
++ Content methodDetailsTree) {
++ String erasureAnchor;
++ if ((erasureAnchor = getErasureAnchor(method)) != null) {
++ methodDetailsTree.addContent(writer.getMarkerAnchor((erasureAnchor)));
++ }
++ methodDetailsTree.addContent(
++ writer.getMarkerAnchor(writer.getAnchor(method)));
++ Content methodDocTree = writer.getMemberTreeHeader();
++ Content heading = new HtmlTree(HtmlConstants.MEMBER_HEADING);
++ heading.addContent(method.name());
++ methodDocTree.addContent(heading);
++ return methodDocTree;
+ }
+
+ /**
+- * Write the header for the method documentation.
++ * Get the signature for the given method.
+ *
+- * @param classDoc the class that the methods belong to.
++ * @param method the method being documented.
++ * @return a content object for the signature
+ */
+- public void writeHeader(ClassDoc classDoc, String header) {
+- writer.println();
+- writer.println("<!-- ============ METHOD DETAIL ========== -->");
+- writer.println();
+- writer.anchor("method_detail");
+- writer.printTableHeadingBackground(header);
++ public Content getSignature(MethodDoc method) {
++ writer.displayLength = 0;
++ Content pre = new HtmlTree(HtmlTag.PRE);
++ writer.addAnnotationInfo(method, pre);
++ addModifiers(method, pre);
++ addTypeParameters(method, pre);
++ addReturnType(method, pre);
++ if (configuration().linksource) {
++ Content methodName = new StringContent(method.name());
++ writer.addSrcLink(method, methodName, pre);
++ } else {
++ addName(method.name(), pre);
++ }
++ addParameters(method, pre);
++ addExceptions(method, pre);
++ return pre;
+ }
+
+ /**
+- * Write the method header for the given method.
+- *
+- * @param method the method being documented.
+- * @param isFirst the flag to indicate whether or not the method is the
+- * first to be documented.
++ * {@inheritDoc}
+ */
+- public void writeMethodHeader(MethodDoc method, boolean isFirst) {
+- if (! isFirst) {
+- writer.printMemberHeader();
+- }
+- writer.println();
+- String erasureAnchor;
+- if ((erasureAnchor = getErasureAnchor(method)) != null) {
+- writer.anchor(erasureAnchor);
+- }
+- writer.anchor(method);
+- writer.h3();
+- writer.print(method.name());
+- writer.h3End();
++ public void addDeprecated(MethodDoc method, Content methodDocTree) {
++ addDeprecatedInfo(method, methodDocTree);
+ }
+
+ /**
+- * Write the signature for the given method.
+- *
+- * @param method the method being documented.
++ * {@inheritDoc}
+ */
+- public void writeSignature(MethodDoc method) {
+- writer.displayLength = 0;
+- writer.pre();
+- writer.writeAnnotationInfo(method);
+- printModifiers(method);
+- writeTypeParameters(method);
+- printReturnType(method);
+- if (configuration().linksource) {
+- writer.printSrcLink(method, method.name());
+- } else {
+- strong(method.name());
+- }
+- writeParameters(method);
+- writeExceptions(method);
+- writer.preEnd();
+- assert !writer.getMemberDetailsListPrinted();
+- }
+-
+- /**
+- * Write the deprecated output for the given method.
+- *
+- * @param method the method being documented.
+- */
+- public void writeDeprecated(MethodDoc method) {
+- printDeprecated(method);
+- }
+-
+- /**
+- * Write the comments for the given method.
+- *
+- * @param method the method being documented.
+- */
+- public void writeComments(Type holder, MethodDoc method) {
++ public void addComments(Type holder, MethodDoc method, Content methodDocTree) {
+ ClassDoc holderClassDoc = holder.asClassDoc();
+ if (method.inlineTags().length > 0) {
+- writer.printMemberDetailsListStartTag();
+ if (holder.asClassDoc().equals(classdoc) ||
+- (! (holderClassDoc.isPublic() ||
++ (! (holderClassDoc.isPublic() ||
+ Util.isLinkable(holderClassDoc, configuration())))) {
+- writer.dd();
+- writer.printInlineComment(method);
+- writer.ddEnd();
++ writer.addInlineComment(method, methodDocTree);
+ } else {
+- String classlink = writer.codeText(
+- writer.getDocLink(LinkInfoImpl.CONTEXT_METHOD_DOC_COPY,
++ Content link = new RawHtml(
++ writer.getDocLink(LinkInfoImpl.CONTEXT_METHOD_DOC_COPY,
+ holder.asClassDoc(), method,
+ holder.asClassDoc().isIncluded() ?
+ holder.typeName() : holder.qualifiedTypeName(),
+- false));
+- writer.dd();
+- writer.strongText(holder.asClassDoc().isClass()?
+- "doclet.Description_From_Class":
+- "doclet.Description_From_Interface",
+- classlink);
+- writer.ddEnd();
+- writer.dd();
+- writer.printInlineComment(method);
+- writer.ddEnd();
++ false));
++ Content codelLink = HtmlTree.CODE(link);
++ Content strong = HtmlTree.STRONG(holder.asClassDoc().isClass()?
++ writer.descfrmClassLabel : writer.descfrmInterfaceLabel);
++ strong.addContent(writer.getSpace());
++ strong.addContent(codelLink);
++ methodDocTree.addContent(HtmlTree.DIV(HtmlStyle.block, strong));
++ writer.addInlineComment(method, methodDocTree);
+ }
+ }
+ }
+
+ /**
+- * Write the tag output for the given method.
+- *
+- * @param method the method being documented.
++ * {@inheritDoc}
+ */
+- public void writeTags(MethodDoc method) {
+- writer.printTags(method);
++ public void addTags(MethodDoc method, Content methodDocTree) {
++ writer.addTagsInfo(method, methodDocTree);
+ }
+
+ /**
+- * Write the method footer.
++ * {@inheritDoc}
+ */
+- public void writeMethodFooter() {
+- printMemberFooter();
++ public Content getMethodDetails(Content methodDetailsTree) {
++ return getMemberTree(methodDetailsTree);
+ }
+
+ /**
+- * Write the footer for the method documentation.
+- *
+- * @param classDoc the class that the methods belong to.
++ * {@inheritDoc}
+ */
+- public void writeFooter(ClassDoc classDoc) {
+- //No footer to write for method documentation
++ public Content getMethodDoc(Content methodDocTree,
++ boolean isLastContent) {
++ return getMemberTree(methodDocTree, isLastContent);
+ }
+
+ /**
+@@ -256,53 +197,89 @@
+ return VisibleMemberMap.METHODS;
+ }
+
+- public void printSummaryLabel() {
+- writer.printText("doclet.Method_Summary");
++ /**
++ * {@inheritDoc}
++ */
++ public void addSummaryLabel(Content memberTree) {
++ Content label = HtmlTree.HEADING(HtmlConstants.SUMMARY_HEADING,
++ writer.getResource("doclet.Method_Summary"));
++ memberTree.addContent(label);
+ }
+
+- public void printTableSummary() {
+- writer.tableIndexSummary(configuration().getText("doclet.Member_Table_Summary",
++ /**
++ * {@inheritDoc}
++ */
++ public String getTableSummary() {
++ return configuration().getText("doclet.Member_Table_Summary",
+ configuration().getText("doclet.Method_Summary"),
+- configuration().getText("doclet.methods")));
++ configuration().getText("doclet.methods"));
+ }
+
+- public void printSummaryTableHeader(ProgramElementDoc member) {
++ /**
++ * {@inheritDoc}
++ */
++ public String getCaption() {
++ return configuration().getText("doclet.Methods");
++ }
++
++ /**
++ * {@inheritDoc}
++ */
++ public String[] getSummaryTableHeader(ProgramElementDoc member) {
+ String[] header = new String[] {
+ writer.getModifierTypeHeader(),
+ configuration().getText("doclet.0_and_1",
+ configuration().getText("doclet.Method"),
+ configuration().getText("doclet.Description"))
+ };
+- writer.summaryTableHeader(header, "col");
++ return header;
+ }
+
+- public void printSummaryAnchor(ClassDoc cd) {
+- writer.anchor("method_summary");
++ /**
++ * {@inheritDoc}
++ */
++ public void addSummaryAnchor(ClassDoc cd, Content memberTree) {
++ memberTree.addContent(writer.getMarkerAnchor("method_summary"));
+ }
+
+- public void printInheritedSummaryAnchor(ClassDoc cd) {
+- writer.anchor("methods_inherited_from_class_" +
+- ConfigurationImpl.getInstance().getClassName(cd));
++ /**
++ * {@inheritDoc}
++ */
++ public void addInheritedSummaryAnchor(ClassDoc cd, Content inheritedTree) {
++ inheritedTree.addContent(writer.getMarkerAnchor(
++ "methods_inherited_from_class_" +
++ configuration().getClassName(cd)));
+ }
+
+- public void printInheritedSummaryLabel(ClassDoc cd) {
+- String classlink = writer.getPreQualifiedClassLink(
+- LinkInfoImpl.CONTEXT_MEMBER, cd, false);
+- writer.strong();
+- String key = cd.isClass()?
+- "doclet.Methods_Inherited_From_Class" :
+- "doclet.Methods_Inherited_From_Interface";
+- writer.printText(key, classlink);
+- writer.strongEnd();
++ /**
++ * {@inheritDoc}
++ */
++ public void addInheritedSummaryLabel(ClassDoc cd, Content inheritedTree) {
++ Content classLink = new RawHtml(writer.getPreQualifiedClassLink(
++ LinkInfoImpl.CONTEXT_MEMBER, cd, false));
++ Content label = new StringContent(cd.isClass() ?
++ configuration().getText("doclet.Methods_Inherited_From_Class") :
++ configuration().getText("doclet.Methods_Inherited_From_Interface"));
++ Content labelHeading = HtmlTree.HEADING(HtmlConstants.INHERITED_SUMMARY_HEADING,
++ label);
++ labelHeading.addContent(writer.getSpace());
++ labelHeading.addContent(classLink);
++ inheritedTree.addContent(labelHeading);
+ }
+
+- protected void printSummaryType(ProgramElementDoc member) {
++ /**
++ * {@inheritDoc}
++ */
++ protected void addSummaryType(ProgramElementDoc member, Content tdSummaryType) {
+ MethodDoc meth = (MethodDoc)member;
+- printModifierAndType(meth, meth.returnType());
++ addModifierAndType(meth, meth.returnType(), tdSummaryType);
+ }
+
+- protected static void printOverridden(HtmlDocletWriter writer,
+- Type overriddenType, MethodDoc method) {
++ /**
++ * {@inheritDoc}
++ */
++ protected static void addOverridden(HtmlDocletWriter writer,
++ Type overriddenType, MethodDoc method, Content dl) {
+ if(writer.configuration.nocomment){
+ return;
+ }
+@@ -317,31 +294,33 @@
+ //is not visible so don't document this.
+ return;
+ }
+- String label = "doclet.Overrides";
++ Content label = writer.overridesLabel;
+ int context = LinkInfoImpl.CONTEXT_METHOD_OVERRIDES;
+
+ if (method != null) {
+ if(overriddenType.asClassDoc().isAbstract() && method.isAbstract()){
+ //Abstract method is implemented from abstract class,
+ //not overridden
+- label = "doclet.Specified_By";
++ label = writer.specifiedByLabel;
+ context = LinkInfoImpl.CONTEXT_METHOD_SPECIFIED_BY;
+ }
+- String overriddenTypeLink = writer.codeText(
+- writer.getLink(new LinkInfoImpl(context, overriddenType)));
++ Content dt = HtmlTree.DT(HtmlTree.STRONG(label));
++ dl.addContent(dt);
++ Content overriddenTypeLink = new RawHtml(
++ writer.getLink(new LinkInfoImpl(context, overriddenType)));
++ Content codeOverridenTypeLink = HtmlTree.CODE(overriddenTypeLink);
+ String name = method.name();
+- writer.dt();
+- writer.strongText(label);
+- writer.dtEnd();
+- writer.dd();
+- String methLink = writer.codeText(
+- writer.getLink(
++ Content methlink = new RawHtml(writer.getLink(
+ new LinkInfoImpl(LinkInfoImpl.CONTEXT_MEMBER,
+- overriddenType.asClassDoc(),
+- writer.getAnchor(method), name, false)
+- ));
+- writer.printText("doclet.in_class", methLink, overriddenTypeLink);
+- writer.ddEnd();
++ overriddenType.asClassDoc(),
++ writer.getAnchor(method), name, false)));
++ Content codeMethLink = HtmlTree.CODE(methlink);
++ Content dd = HtmlTree.DD(codeMethLink);
++ dd.addContent(writer.getSpace());
++ dd.addContent(writer.getResource("doclet.in_class"));
++ dd.addContent(writer.getSpace());
++ dd.addContent(codeOverridenTypeLink);
++ dl.addContent(dd);
+ }
+ }
+
+@@ -363,61 +342,78 @@
+ }
+ }
+
+- protected static void printImplementsInfo(HtmlDocletWriter writer,
+- MethodDoc method) {
++ /**
++ * {@inheritDoc}
++ */
++ protected static void addImplementsInfo(HtmlDocletWriter writer,
++ MethodDoc method, Content dl) {
+ if(writer.configuration.nocomment){
+ return;
+ }
+ ImplementedMethods implementedMethodsFinder =
+- new ImplementedMethods(method, writer.configuration);
++ new ImplementedMethods(method, writer.configuration);
+ MethodDoc[] implementedMethods = implementedMethodsFinder.build();
+ for (int i = 0; i < implementedMethods.length; i++) {
+ MethodDoc implementedMeth = implementedMethods[i];
+ Type intfac = implementedMethodsFinder.getMethodHolder(implementedMeth);
+- String methlink = "";
+- String intfaclink = writer.codeText(
+- writer.getLink(new LinkInfoImpl(
++ Content intfaclink = new RawHtml(writer.getLink(new LinkInfoImpl(
+ LinkInfoImpl.CONTEXT_METHOD_SPECIFIED_BY, intfac)));
+- writer.dt();
+- writer.strongText("doclet.Specified_By");
+- writer.dtEnd();
+- writer.dd();
+- methlink = writer.codeText(writer.getDocLink(
+- LinkInfoImpl.CONTEXT_MEMBER, implementedMeth,
+- implementedMeth.name(), false));
+- writer.printText("doclet.in_interface", methlink, intfaclink);
+- writer.ddEnd();
+- }
+-
+- }
+-
+- protected void printReturnType(MethodDoc method) {
+- Type type = method.returnType();
+- if (type != null) {
+- writer.printLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_RETURN_TYPE,
+- type));
+- print(' ');
++ Content codeIntfacLink = HtmlTree.CODE(intfaclink);
++ Content dt = HtmlTree.DT(HtmlTree.STRONG(writer.specifiedByLabel));
++ dl.addContent(dt);
++ Content methlink = new RawHtml(writer.getDocLink(
++ LinkInfoImpl.CONTEXT_MEMBER, implementedMeth,
++ implementedMeth.name(), false));
++ Content codeMethLink = HtmlTree.CODE(methlink);
++ Content dd = HtmlTree.DD(codeMethLink);
++ dd.addContent(writer.getSpace());
++ dd.addContent(writer.getResource("doclet.in_interface"));
++ dd.addContent(writer.getSpace());
++ dd.addContent(codeIntfacLink);
++ dl.addContent(dd);
+ }
+ }
+
+- protected void printNavSummaryLink(ClassDoc cd, boolean link) {
+- if (link) {
+- writer.printHyperLink("", (cd == null)?
+- "method_summary":
+- "methods_inherited_from_class_" +
+- ConfigurationImpl.getInstance().getClassName(cd),
+- ConfigurationImpl.getInstance().getText("doclet.navMethod"));
+- } else {
+- writer.printText("doclet.navMethod");
++ /**
++ * Add the return type.
++ *
++ * @param method the method being documented.
++ * @param htmltree the content tree to which the return type will be added
++ */
++ protected void addReturnType(MethodDoc method, Content htmltree) {
++ Type type = method.returnType();
++ if (type != null) {
++ Content linkContent = new RawHtml(writer.getLink(
++ new LinkInfoImpl(LinkInfoImpl.CONTEXT_RETURN_TYPE, type)));
++ htmltree.addContent(linkContent);
++ htmltree.addContent(writer.getSpace());
+ }
+ }
+
+- protected void printNavDetailLink(boolean link) {
++ /**
++ * {@inheritDoc}
++ */
++ protected Content getNavSummaryLink(ClassDoc cd, boolean link) {
+ if (link) {
+- writer.printHyperLink("", "method_detail",
+- ConfigurationImpl.getInstance().getText("doclet.navMethod"));
++ return writer.getHyperLink("", (cd == null)?
++ "method_summary":
++ "methods_inherited_from_class_" +
++ configuration().getClassName(cd),
++ writer.getResource("doclet.navMethod"));
+ } else {
+- writer.printText("doclet.navMethod");
++ return writer.getResource("doclet.navMethod");
++ }
++ }
++
++ /**
++ * {@inheritDoc}
++ */
++ protected void addNavDetailLink(boolean link, Content liNav) {
++ if (link) {
++ liNav.addContent(writer.getHyperLink("", "method_detail",
++ writer.getResource("doclet.navMethod")));
++ } else {
++ liNav.addContent(writer.getResource("doclet.navMethod"));
+ }
+ }
+ }
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/NestedClassWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/NestedClassWriterImpl.java
+--- langtools/src/share/classes/com/sun/tools/doclets/formats/html/NestedClassWriterImpl.java
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/NestedClassWriterImpl.java
+@@ -26,8 +26,10 @@
+ package com.sun.tools.doclets.formats.html;
+
+ import java.io.*;
++import java.util.*;
+
+ import com.sun.javadoc.*;
++import com.sun.tools.doclets.formats.html.markup.*;
+ import com.sun.tools.doclets.internal.toolkit.*;
+ import com.sun.tools.doclets.internal.toolkit.util.*;
+
+@@ -42,8 +44,6 @@
+ public class NestedClassWriterImpl extends AbstractMemberWriter
+ implements MemberSummaryWriter {
+
+- private boolean printedSummaryHeader = false;
+-
+ public NestedClassWriterImpl(SubWriterHolderWriter writer,
+ ClassDoc classdoc) {
+ super(writer, classdoc);
+@@ -54,90 +54,17 @@
+ }
+
+ /**
+- * Write the classes summary header for the given class.
+- *
+- * @param classDoc the class the summary belongs to.
+- */
+- public void writeMemberSummaryHeader(ClassDoc classDoc) {
+- printedSummaryHeader = true;
+- writer.println("<!-- ======== NESTED CLASS SUMMARY ======== -->");
+- writer.println();
+- writer.printSummaryHeader(this, classDoc);
+- }
+-
+- /**
+- * Write the classes summary footer for the given class.
+- *
+- * @param classDoc the class the summary belongs to.
+- */
+- public void writeMemberSummaryFooter(ClassDoc classDoc) {
+- writer.printSummaryFooter(this, classDoc);
+- }
+-
+- /**
+- * Write the inherited classes summary header for the given class.
+- *
+- * @param classDoc the class the summary belongs to.
+- */
+- public void writeInheritedMemberSummaryHeader(ClassDoc classDoc) {
+- if(! printedSummaryHeader){
+- //We don't want inherited summary to not be under heading.
+- writeMemberSummaryHeader(classDoc);
+- writeMemberSummaryFooter(classDoc);
+- printedSummaryHeader = true;
+- }
+- writer.printInheritedSummaryHeader(this, classDoc);
+- }
+-
+- /**
+ * {@inheritDoc}
+ */
+- public void writeInheritedMemberSummary(ClassDoc classDoc,
+- ProgramElementDoc nestedClass, boolean isFirst, boolean isLast) {
+- writer.printInheritedSummaryMember(this, classDoc, nestedClass, isFirst);
++ public Content getMemberSummaryHeader(ClassDoc classDoc,
++ Content memberSummaryTree) {
++ memberSummaryTree.addContent(HtmlConstants.START_OF_NESTED_CLASS_SUMMARY);
++ Content memberTree = writer.getMemberTreeHeader();
++ writer.addSummaryHeader(this, classDoc, memberTree);
++ return memberTree;
+ }
+
+ /**
+- * Write the inherited classes summary footer for the given class.
+- *
+- * @param classDoc the class the summary belongs to.
+- */
+- public void writeInheritedMemberSummaryFooter(ClassDoc classDoc) {
+- writer.printInheritedSummaryFooter(this, classDoc);
+- writer.println();
+- }
+-
+- /**
+- * Write the header for the nested class documentation.
+- *
+- * @param classDoc the class that the classes belong to.
+- */
+- public void writeHeader(ClassDoc classDoc, String header) {
+- writer.anchor("nested class_detail");
+- writer.printTableHeadingBackground(header);
+- }
+-
+- /**
+- * Write the nested class header for the given nested class.
+- *
+- * @param nestedClass the nested class being documented.
+- * @param isFirst the flag to indicate whether or not the nested class is the
+- * first to be documented.
+- */
+- public void writeClassHeader(ClassDoc nestedClass, boolean isFirst) {
+- if (! isFirst) {
+- writer.printMemberHeader();
+- writer.println("");
+- }
+- writer.anchor(nestedClass.name());
+- writer.h3();
+- writer.print(nestedClass.name());
+- writer.h3End();
+- }
+-
+-
+-
+- /**
+ * Close the writer.
+ */
+ public void close() throws IOException {
+@@ -148,17 +75,35 @@
+ return VisibleMemberMap.INNERCLASSES;
+ }
+
+- public void printSummaryLabel() {
+- writer.printText("doclet.Nested_Class_Summary");
++ /**
++ * {@inheritDoc}
++ */
++ public void addSummaryLabel(Content memberTree) {
++ Content label = HtmlTree.HEADING(HtmlConstants.SUMMARY_HEADING,
++ writer.getResource("doclet.Nested_Class_Summary"));
++ memberTree.addContent(label);
+ }
+
+- public void printTableSummary() {
+- writer.tableIndexSummary(configuration().getText("doclet.Member_Table_Summary",
++ /**
++ * {@inheritDoc}
++ */
++ public String getTableSummary() {
++ return configuration().getText("doclet.Member_Table_Summary",
+ configuration().getText("doclet.Nested_Class_Summary"),
+- configuration().getText("doclet.nested_classes")));
++ configuration().getText("doclet.nested_classes"));
+ }
+
+- public void printSummaryTableHeader(ProgramElementDoc member) {
++ /**
++ * {@inheritDoc}
++ */
++ public String getCaption() {
++ return configuration().getText("doclet.Nested_Classes");
++ }
++
++ /**
++ * {@inheritDoc}
++ */
++ public String[] getSummaryTableHeader(ProgramElementDoc member) {
+ String[] header;
+ if (member.isInterface()) {
+ header = new String[] {
+@@ -176,92 +121,95 @@
+ configuration().getText("doclet.Description"))
+ };
+ }
+- writer.summaryTableHeader(header, "col");
++ return header;
+ }
+
+- public void printSummaryAnchor(ClassDoc cd) {
+- writer.anchor("nested_class_summary");
++ /**
++ * {@inheritDoc}
++ */
++ public void addSummaryAnchor(ClassDoc cd, Content memberTree) {
++ memberTree.addContent(writer.getMarkerAnchor("nested_class_summary"));
+ }
+
+- public void printInheritedSummaryAnchor(ClassDoc cd) {
+- writer.anchor("nested_classes_inherited_from_class_" +
+- cd.qualifiedName());
++ /**
++ * {@inheritDoc}
++ */
++ public void addInheritedSummaryAnchor(ClassDoc cd, Content inheritedTree) {
++ inheritedTree.addContent(writer.getMarkerAnchor(
++ "nested_classes_inherited_from_class_" + cd.qualifiedName()));
+ }
+
+- public void printInheritedSummaryLabel(ClassDoc cd) {
+- String clslink = writer.getPreQualifiedClassLink(
+- LinkInfoImpl.CONTEXT_MEMBER, cd, false);
+- writer.strong();
+- writer.printText(cd.isInterface() ?
+- "doclet.Nested_Classes_Interface_Inherited_From_Interface" :
+- "doclet.Nested_Classes_Interfaces_Inherited_From_Class",
+- clslink);
+- writer.strongEnd();
++ /**
++ * {@inheritDoc}
++ */
++ public void addInheritedSummaryLabel(ClassDoc cd, Content inheritedTree) {
++ Content classLink = new RawHtml(writer.getPreQualifiedClassLink(
++ LinkInfoImpl.CONTEXT_MEMBER, cd, false));
++ Content label = new StringContent(cd.isInterface() ?
++ configuration().getText("doclet.Nested_Classes_Interface_Inherited_From_Interface") :
++ configuration().getText("doclet.Nested_Classes_Interfaces_Inherited_From_Class"));
++ Content labelHeading = HtmlTree.HEADING(HtmlConstants.INHERITED_SUMMARY_HEADING,
++ label);
++ labelHeading.addContent(writer.getSpace());
++ labelHeading.addContent(classLink);
++ inheritedTree.addContent(labelHeading);
+ }
+
+- protected void writeSummaryLink(int context, ClassDoc cd, ProgramElementDoc member) {
+- writer.strong();
+- writer.printLink(new LinkInfoImpl(context, (ClassDoc)member, false));
+- writer.strongEnd();
++ /**
++ * {@inheritDoc}
++ */
++ protected void addSummaryLink(int context, ClassDoc cd, ProgramElementDoc member,
++ Content tdSummary) {
++ Content strong = HtmlTree.STRONG(new RawHtml(
++ writer.getLink(new LinkInfoImpl(context, (ClassDoc)member, false))));
++ Content code = HtmlTree.CODE(strong);
++ tdSummary.addContent(code);
+ }
+
+- protected void writeInheritedSummaryLink(ClassDoc cd,
+- ProgramElementDoc member) {
+- writer.printLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_MEMBER,
+- (ClassDoc)member, false));
++ /**
++ * {@inheritDoc}
++ */
++ protected void addInheritedSummaryLink(ClassDoc cd,
++ ProgramElementDoc member, Content linksTree) {
++ linksTree.addContent(new RawHtml(
++ writer.getLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_MEMBER,
++ (ClassDoc)member, false))));
+ }
+
+- protected void printSummaryType(ProgramElementDoc member) {
++ /**
++ * {@inheritDoc}
++ */
++ protected void addSummaryType(ProgramElementDoc member,
++ Content tdSummaryType) {
+ ClassDoc cd = (ClassDoc)member;
+- printModifierAndType(cd, null);
++ addModifierAndType(cd, null, tdSummaryType);
+ }
+
+- protected void printHeader(ClassDoc cd) {
+- // N.A.
++ /**
++ * {@inheritDoc}
++ */
++ protected Content getDeprecatedLink(ProgramElementDoc member) {
++ return writer.getQualifiedClassLink(LinkInfoImpl.CONTEXT_MEMBER,
++ (ClassDoc)member);
+ }
+
+- protected void printBodyHtmlEnd(ClassDoc cd) {
+- // N.A.
+- }
+-
+- protected void printMember(ProgramElementDoc member) {
+- // N.A.
+- }
+-
+- protected void writeDeprecatedLink(ProgramElementDoc member) {
+- writer.printQualifiedClassLink(LinkInfoImpl.CONTEXT_MEMBER,
+- (ClassDoc)member);
+- }
+-
+- protected void printNavSummaryLink(ClassDoc cd, boolean link) {
++ /**
++ * {@inheritDoc}
++ */
++ protected Content getNavSummaryLink(ClassDoc cd, boolean link) {
+ if (link) {
+- writer.printHyperLink("", (cd == null) ? "nested_class_summary":
+- "nested_classes_inherited_from_class_" +
++ return writer.getHyperLink("", (cd == null) ? "nested_class_summary":
++ "nested_classes_inherited_from_class_" +
+ cd.qualifiedName(),
+- ConfigurationImpl.getInstance().getText("doclet.navNested"));
++ writer.getResource("doclet.navNested"));
+ } else {
+- writer.printText("doclet.navNested");
++ return writer.getResource("doclet.navNested");
+ }
+ }
+
+- protected void printNavDetailLink(boolean link) {
+- }
+-
+- protected void printMemberLink(ProgramElementDoc member) {
+- }
+-
+- protected void printMembersSummaryLink(ClassDoc cd, ClassDoc icd,
+- boolean link) {
+- if (link) {
+- writer.printHyperLink(cd.name() + ".html",
+- (cd == icd)?
+- "nested_class_summary":
+- "nested_classes_inherited_from_class_" +
+- icd.qualifiedName(),
+- ConfigurationImpl.getInstance().getText(
+- "doclet.Nested_Class_Summary"));
+- } else {
+- writer.printText("doclet.Nested_Class_Summary");
+- }
++ /**
++ * {@inheritDoc}
++ */
++ protected void addNavDetailLink(boolean link, Content liNav) {
+ }
+ }
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/PackageFrameWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/PackageFrameWriter.java
+--- langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageFrameWriter.java
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageFrameWriter.java
+@@ -25,18 +25,20 @@
+
+ package com.sun.tools.doclets.formats.html;
+
++import java.io.*;
++import java.util.*;
++import com.sun.javadoc.*;
+ import com.sun.tools.doclets.internal.toolkit.util.*;
+ import com.sun.tools.doclets.internal.toolkit.*;
++import com.sun.tools.doclets.formats.html.markup.*;
+
+-import com.sun.javadoc.*;
+-import java.io.*;
+-import java.util.*;
+ /**
+ * Class to generate file for each package contents in the left-hand bottom
+ * frame. This will list all the Class Kinds in the package. A click on any
+ * class-kind will update the right-hand frame with the clicked class-kind page.
+ *
+ * @author Atul M Dambalkar
++ * @author Bhavesh Patel (Modified)
+ */
+ public class PackageFrameWriter extends HtmlDocletWriter {
+
+@@ -85,132 +87,107 @@
+ * @param packageDoc The package for which "pacakge-frame.html" is to be generated.
+ */
+ public static void generate(ConfigurationImpl configuration,
+- PackageDoc packageDoc) {
++ PackageDoc packageDoc) {
+ PackageFrameWriter packgen;
+ try {
+ packgen = new PackageFrameWriter(configuration, packageDoc);
+ String pkgName = Util.getPackageName(packageDoc);
+- packgen.printHtmlHeader(pkgName, configuration.metakeywords.getMetaKeywords(packageDoc), false);
+- packgen.printPackageHeader(pkgName);
+- packgen.generateClassListing();
+- packgen.printBodyHtmlEnd();
++ Content body = packgen.getBody(false, packgen.getWindowTitle(pkgName));
++ Content pkgNameContent = new StringContent(pkgName);
++ Content heading = HtmlTree.HEADING(HtmlConstants.TITLE_HEADING, HtmlStyle.bar,
++ packgen.getTargetPackageLink(packageDoc, "classFrame", pkgNameContent));
++ body.addContent(heading);
++ HtmlTree div = new HtmlTree(HtmlTag.DIV);
++ div.addStyle(HtmlStyle.indexContainer);
++ packgen.addClassListing(div);
++ body.addContent(div);
++ packgen.printHtmlDocument(
++ configuration.metakeywords.getMetaKeywords(packageDoc), false, body);
+ packgen.close();
+ } catch (IOException exc) {
+ configuration.standardmessage.error(
+- "doclet.exception_encountered",
+- exc.toString(), OUTPUT_FILE_NAME);
++ "doclet.exception_encountered",
++ exc.toString(), OUTPUT_FILE_NAME);
+ throw new DocletAbortException();
+ }
+ }
+
+ /**
+- * Generate class listing for all the classes in this package. Divide class
++ * Add class listing for all the classes in this package. Divide class
+ * listing as per the class kind and generate separate listing for
+ * Classes, Interfaces, Exceptions and Errors.
++ *
++ * @param contentTree the content tree to which the listing will be added
+ */
+- protected void generateClassListing() {
++ protected void addClassListing(Content contentTree) {
+ Configuration config = configuration();
+ if (packageDoc.isIncluded()) {
+- generateClassKindListing(packageDoc.interfaces(),
+- configuration.getText("doclet.Interfaces"));
+- generateClassKindListing(packageDoc.ordinaryClasses(),
+- configuration.getText("doclet.Classes"));
+- generateClassKindListing(packageDoc.enums(),
+- configuration.getText("doclet.Enums"));
+- generateClassKindListing(packageDoc.exceptions(),
+- configuration.getText("doclet.Exceptions"));
+- generateClassKindListing(packageDoc.errors(),
+- configuration.getText("doclet.Errors"));
+- generateClassKindListing(packageDoc.annotationTypes(),
+- configuration.getText("doclet.AnnotationTypes"));
++ addClassKindListing(packageDoc.interfaces(),
++ getResource("doclet.Interfaces"), contentTree);
++ addClassKindListing(packageDoc.ordinaryClasses(),
++ getResource("doclet.Classes"), contentTree);
++ addClassKindListing(packageDoc.enums(),
++ getResource("doclet.Enums"), contentTree);
++ addClassKindListing(packageDoc.exceptions(),
++ getResource("doclet.Exceptions"), contentTree);
++ addClassKindListing(packageDoc.errors(),
++ getResource("doclet.Errors"), contentTree);
++ addClassKindListing(packageDoc.annotationTypes(),
++ getResource("doclet.AnnotationTypes"), contentTree);
+ } else {
+ String name = Util.getPackageName(packageDoc);
+- generateClassKindListing(config.classDocCatalog.interfaces(name),
+- configuration.getText("doclet.Interfaces"));
+- generateClassKindListing(config.classDocCatalog.ordinaryClasses(name),
+- configuration.getText("doclet.Classes"));
+- generateClassKindListing(config.classDocCatalog.enums(name),
+- configuration.getText("doclet.Enums"));
+- generateClassKindListing(config.classDocCatalog.exceptions(name),
+- configuration.getText("doclet.Exceptions"));
+- generateClassKindListing(config.classDocCatalog.errors(name),
+- configuration.getText("doclet.Errors"));
+- generateClassKindListing(config.classDocCatalog.annotationTypes(name),
+- configuration.getText("doclet.AnnotationTypes"));
++ addClassKindListing(config.classDocCatalog.interfaces(name),
++ getResource("doclet.Interfaces"), contentTree);
++ addClassKindListing(config.classDocCatalog.ordinaryClasses(name),
++ getResource("doclet.Classes"), contentTree);
++ addClassKindListing(config.classDocCatalog.enums(name),
++ getResource("doclet.Enums"), contentTree);
++ addClassKindListing(config.classDocCatalog.exceptions(name),
++ getResource("doclet.Exceptions"), contentTree);
++ addClassKindListing(config.classDocCatalog.errors(name),
++ getResource("doclet.Errors"), contentTree);
++ addClassKindListing(config.classDocCatalog.annotationTypes(name),
++ getResource("doclet.AnnotationTypes"), contentTree);
+ }
+ }
+
+ /**
+- * Generate specific class kind listing. Also add label to the listing.
++ * Add specific class kind listing. Also add label to the listing.
+ *
+- * @param arr Array of specific class kinds, namely Class or Interface or
+- * Exception or Error.
+- * @param label Label for the listing
++ * @param arr Array of specific class kinds, namely Class or Interface or Exception or Error
++ * @param labelContent content tree of the label to be added
++ * @param contentTree the content tree to which the class kind listing will be added
+ */
+- protected void generateClassKindListing(ClassDoc[] arr, String label) {
++ protected void addClassKindListing(ClassDoc[] arr, Content labelContent,
++ Content contentTree) {
+ if(arr.length > 0) {
+ Arrays.sort(arr);
+- printPackageTableHeader();
+- fontSizeStyle("+1", "FrameHeadingFont");
+ boolean printedHeader = false;
++ HtmlTree ul = new HtmlTree(HtmlTag.UL);
++ ul.addAttr(HtmlAttr.TITLE, labelContent.toString());
+ for (int i = 0; i < arr.length; i++) {
+ if (documentedClasses != null &&
+- !documentedClasses.contains(arr[i])) {
++ !documentedClasses.contains(arr[i])) {
+ continue;
+ }
+ if (!Util.isCoreClass(arr[i]) || !
+- configuration.isGeneratedDoc(arr[i])) {
++ configuration.isGeneratedDoc(arr[i])) {
+ continue;
+ }
+ if (!printedHeader) {
+- print(label);
+- fontEnd();
+- println("&nbsp;");
+- fontStyle("FrameItemFont");
++ Content heading = HtmlTree.HEADING(HtmlConstants.CONTENT_HEADING,
++ true, labelContent);
++ contentTree.addContent(heading);
+ printedHeader = true;
+ }
+- br();
+- printLink(new LinkInfoImpl(
+- LinkInfoImpl.PACKAGE_FRAME,
+- arr[i],
+- (arr[i].isInterface() ?
+- italicsText(arr[i].name()) :
+- arr[i].name()),"classFrame")
+- );
++ Content link = new RawHtml (getLink(new LinkInfoImpl(
++ LinkInfoImpl.PACKAGE_FRAME, arr[i],
++ (arr[i].isInterface() ? italicsText(arr[i].name()) :
++ arr[i].name()),"classFrame")));
++ Content li = HtmlTree.LI(link);
++ ul.addContent(li);
+ }
+- fontEnd();
+- printPackageTableFooter();
+- println();
++ contentTree.addContent(ul);
+ }
+ }
+-
+- /**
+- * Print the package link at the top of the class kind listing. Clicking
+- * this link, package-summary page will appear in the right hand frame.
+- *
+- * @param heading Top Heading to be used for the class kind listing.
+- */
+- protected void printPackageHeader(String heading) {
+- fontSizeStyle("+1", "FrameTitleFont");
+- printTargetPackageLink(packageDoc, "classFrame", heading);
+- fontEnd();
+- }
+-
+- /**
+- * The table for the class kind listing.
+- */
+- protected void printPackageTableHeader() {
+- table();
+- tr();
+- tdNowrap();
+- }
+-
+- /**
+- * Closing Html tags for table of class kind listing.
+- */
+- protected void printPackageTableFooter() {
+- tdEnd();
+- trEnd();
+- tableEnd();
+- }
+ }
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/PackageIndexFrameWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/PackageIndexFrameWriter.java
+--- langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageIndexFrameWriter.java
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageIndexFrameWriter.java
+@@ -25,10 +25,11 @@
+
+ package com.sun.tools.doclets.formats.html;
+
++import java.io.*;
++import com.sun.javadoc.*;
++import com.sun.tools.doclets.internal.toolkit.*;
+ import com.sun.tools.doclets.internal.toolkit.util.*;
+-
+-import com.sun.javadoc.*;
+-import java.io.*;
++import com.sun.tools.doclets.formats.html.markup.*;
+
+ /**
+ * Generate the package index for the left-hand frame in the generated output.
+@@ -58,7 +59,7 @@
+ String filename = "overview-frame.html";
+ try {
+ packgen = new PackageIndexFrameWriter(configuration, filename);
+- packgen.generatePackageIndexFile("doclet.Window_Overview", false);
++ packgen.buildPackageIndexFile("doclet.Window_Overview", false);
+ packgen.close();
+ } catch (IOException exc) {
+ configuration.standardmessage.error(
+@@ -69,114 +70,86 @@
+ }
+
+ /**
+- * Print each package name on separate rows.
+- *
+- * @param pd PackageDoc
++ * {@inheritDoc}
+ */
+- protected void printIndexRow(PackageDoc pd) {
+- fontStyle("FrameItemFont");
+- if (pd.name().length() > 0) {
+- print(getHyperLink(pathString(pd, "package-frame.html"), "",
+- pd.name(), false, "", "", "packageFrame"));
+- } else {
+- print(getHyperLink("package-frame.html", "", "&lt;unnamed package>",
+- false, "", "", "packageFrame"));
++ protected void addPackagesList(PackageDoc[] packages, String text,
++ String tableSummary, Content body) {
++ Content heading = HtmlTree.HEADING(HtmlConstants.PACKAGE_HEADING, true,
++ packagesLabel);
++ Content div = HtmlTree.DIV(HtmlStyle.indexContainer, heading);
++ HtmlTree ul = new HtmlTree(HtmlTag.UL);
++ ul.addAttr(HtmlAttr.TITLE, packagesLabel.toString());
++ for(int i = 0; i < packages.length; i++) {
++ if (packages[i] != null) {
++ ul.addContent(getPackage(packages[i]));
++ }
+ }
+- fontEnd();
+- br();
++ div.addContent(ul);
++ body.addContent(div);
+ }
+
+ /**
+- * Print the "-packagesheader" string in strong format, at top of the page,
+- * if it is not the empty string. Otherwise print the "-header" string.
+- * Despite the name, there is actually no navigation bar for this page.
++ * Gets each package name as a separate link.
++ *
++ * @param pd PackageDoc
++ * @return content for the package link
+ */
+- protected void printNavigationBarHeader() {
+- printTableHeader(true);
+- fontSizeStyle("+1", "FrameTitleFont");
++ protected Content getPackage(PackageDoc pd) {
++ Content packageLinkContent;
++ Content packageLabel;
++ if (pd.name().length() > 0) {
++ packageLabel = getPackageLabel(pd.name());
++ packageLinkContent = getHyperLink(pathString(pd,
++ "package-frame.html"), "", packageLabel, "",
++ "packageFrame");
++ } else {
++ packageLabel = new RawHtml("&lt;unnamed package&gt;");
++ packageLinkContent = getHyperLink("package-frame.html",
++ "", packageLabel, "", "packageFrame");
++ }
++ Content li = HtmlTree.LI(packageLinkContent);
++ return li;
++ }
++
++ /**
++ * {@inheritDoc}
++ */
++ protected void addNavigationBarHeader(Content body) {
++ Content headerContent;
+ if (configuration.packagesheader.length() > 0) {
+- strong(replaceDocRootDir(configuration.packagesheader));
++ headerContent = new RawHtml(replaceDocRootDir(configuration.packagesheader));
+ } else {
+- strong(replaceDocRootDir(configuration.header));
++ headerContent = new RawHtml(replaceDocRootDir(configuration.header));
+ }
+- fontEnd();
+- printTableFooter(true);
++ Content heading = HtmlTree.HEADING(HtmlConstants.TITLE_HEADING, true,
++ HtmlStyle.bar, headerContent);
++ body.addContent(heading);
+ }
+
+ /**
+ * Do nothing as there is no overview information in this page.
+ */
+- protected void printOverviewHeader() {
++ protected void addOverviewHeader(Content body) {
+ }
+
+ /**
+- * Print Html "table" tag for the package index format.
++ * Adds "All Classes" link for the top of the left-hand frame page to the
++ * documentation tree.
+ *
+- * @param text Text string will not be used in this method.
++ * @param body the Content object to which the all classes link should be added
+ */
+- protected void printIndexHeader(String text, String tableSummary) {
+- printTableHeader(false);
++ protected void addAllClassesLink(Content body) {
++ Content linkContent = getHyperLink("allclasses-frame.html", "",
++ allclassesLabel, "", "packageFrame");
++ Content div = HtmlTree.DIV(HtmlStyle.indexHeader, linkContent);
++ body.addContent(div);
+ }
+
+ /**
+- * Print Html closing "table" tag at the end of the package index.
++ * {@inheritDoc}
+ */
+- protected void printIndexFooter() {
+- printTableFooter(false);
+- }
+-
+- /**
+- * Print "All Classes" link at the top of the left-hand frame page.
+- */
+- protected void printAllClassesPackagesLink() {
+- fontStyle("FrameItemFont");
+- print(getHyperLink("allclasses-frame.html", "",
+- configuration.getText("doclet.All_Classes"), false, "", "",
+- "packageFrame"));
+- fontEnd();
+- p();
+- fontSizeStyle("+1", "FrameHeadingFont");
+- printText("doclet.Packages");
+- fontEnd();
+- br();
+- }
+-
+- /**
+- * Just print some space, since there is no navigation bar for this page.
+- */
+- protected void printNavigationBarFooter() {
+- p();
+- space();
+- }
+-
+- /**
+- * Print Html closing tags for the table for package index.
+- *
+- * @param isHeading true if this is a table for a heading.
+- */
+- private void printTableFooter(boolean isHeading) {
+- if (isHeading) {
+- thEnd();
+- } else {
+- tdEnd();
+- }
+- trEnd();
+- tableEnd();
+- }
+-
+- /**
+- * Print Html tags for the table for package index.
+- *
+- * @param isHeading true if this is a table for a heading.
+- */
+- private void printTableHeader(boolean isHeading) {
+- table();
+- tr();
+- if (isHeading) {
+- thAlignNowrap("left");
+- } else {
+- tdNowrap();
+- }
+-
++ protected void addNavigationBarFooter(Content body) {
++ Content p = HtmlTree.P(getSpace());
++ body.addContent(p);
+ }
+ }
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/PackageIndexWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/PackageIndexWriter.java
+--- langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageIndexWriter.java
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageIndexWriter.java
+@@ -25,10 +25,12 @@
+
+ package com.sun.tools.doclets.formats.html;
+
+-import com.sun.tools.doclets.internal.toolkit.util.*;
+-import com.sun.javadoc.*;
+ import java.io.*;
+ import java.util.*;
++import com.sun.javadoc.*;
++import com.sun.tools.doclets.internal.toolkit.*;
++import com.sun.tools.doclets.internal.toolkit.util.*;
++import com.sun.tools.doclets.formats.html.markup.*;
+
+ /**
+ * Generate the package index page "overview-summary.html" for the right-hand
+@@ -83,7 +85,7 @@
+ String filename = "overview-summary.html";
+ try {
+ packgen = new PackageIndexWriter(configuration, filename);
+- packgen.generatePackageIndexFile("doclet.Window_Overview_Summary", true);
++ packgen.buildPackageIndexFile("doclet.Window_Overview_Summary", true);
+ packgen.close();
+ } catch (IOException exc) {
+ configuration.standardmessage.error(
+@@ -94,125 +96,139 @@
+ }
+
+ /**
+- * Print each package in separate rows in the index table. Generate link
+- * to each package.
++ * Depending upon the grouping information and their titles, add
++ * separate table indices for each package group.
+ *
+- * @param pkg Package to which link is to be generated.
++ * @param body the documentation tree to which the index will be added
+ */
+- protected void printIndexRow(PackageDoc pkg) {
+- if(pkg != null && pkg.name().length() > 0) {
+- trBgcolorStyle("white", "TableRowColor");
+- summaryRow(20);
+- strong();
+- printPackageLink(pkg, Util.getPackageName(pkg), false);
+- strongEnd();
+- summaryRowEnd();
+- summaryRow(0);
+- printSummaryComment(pkg);
+- summaryRowEnd();
+- trEnd();
+- }
+- }
+-
+- /**
+- * Depending upon the grouping information and their titles, generate
+- * separate table indices for each package group.
+- */
+- protected void generateIndex() {
++ protected void addIndex(Content body) {
+ for (int i = 0; i < groupList.size(); i++) {
+ String groupname = (String)groupList.get(i);
+ List list = (List)groupPackageMap.get(groupname);
+ if (list != null && list.size() > 0) {
+- printIndexContents((PackageDoc[])list.
+- toArray(new PackageDoc[list.size()]),
+- groupname,
+- configuration.getText("doclet.Member_Table_Summary",
+- groupname,
+- configuration.getText("doclet.packages")));
++ addIndexContents(list.toArray(new PackageDoc[list.size()]),
++ groupname, configuration.getText("doclet.Member_Table_Summary",
++ groupname, configuration.getText("doclet.packages")), body);
+ }
+ }
+ }
+
+ /**
+- * Print the overview summary comment for this documentation. Print one line
+- * summary at the top of the page and generate a link to the description,
+- * which is generated at the end of this page.
++ * {@inheritDoc}
+ */
+- protected void printOverviewHeader() {
+- if (root.inlineTags().length > 0) {
+- printSummaryComment(root);
+- p();
+- strong(configuration.getText("doclet.See"));
+- br();
+- printNbsps();
+- printHyperLink("", "overview_description",
+- configuration.getText("doclet.Description"), true);
+- p();
++ protected void addPackagesList(PackageDoc[] packages, String text,
++ String tableSummary, Content body) {
++ Content table = HtmlTree.TABLE(HtmlStyle.overviewSummary, 0, 3, 0, tableSummary,
++ getTableCaption(text));
++ table.addContent(getSummaryTableHeader(packageTableHeader, "col"));
++ Content tbody = new HtmlTree(HtmlTag.TBODY);
++ addPackagesList(packages, tbody);
++ table.addContent(tbody);
++ Content div = HtmlTree.DIV(HtmlStyle.contentContainer, table);
++ body.addContent(div);
++ }
++
++ /**
++ * Adds list of packages in the index table. Generate link to each package.
++ *
++ * @param packages Packages to which link is to be generated
++ * @param tbody the documentation tree to which the list will be added
++ */
++ protected void addPackagesList(PackageDoc[] packages, Content tbody) {
++ for (int i = 0; i < packages.length; i++) {
++ if (packages[i] != null && packages[i].name().length() > 0) {
++ Content packageLinkContent = getPackageLink(packages[i],
++ getPackageName(packages[i]));
++ Content tdPackage = HtmlTree.TD(HtmlStyle.colFirst, packageLinkContent);
++ HtmlTree tdSummary = new HtmlTree(HtmlTag.TD);
++ tdSummary.addStyle(HtmlStyle.colLast);
++ addSummaryComment(packages[i], tdSummary);
++ HtmlTree tr = HtmlTree.TR(tdPackage);
++ tr.addContent(tdSummary);
++ if (i%2 == 0)
++ tr.addStyle(HtmlStyle.altColor);
++ else
++ tr.addStyle(HtmlStyle.rowColor);
++ tbody.addContent(tr);
++ }
+ }
+ }
+
+ /**
+- * Print Html tags for the table for this package index.
++ * Adds the overview summary comment for this documentation. Add one line
++ * summary at the top of the page and generate a link to the description,
++ * which is added at the end of this page.
++ *
++ * @param body the documentation tree to which the overview header will be added
+ */
+- protected void printIndexHeader(String text, String tableSummary) {
+- tableIndexSummary(tableSummary);
+- tableCaptionStart();
+- print(text);
+- tableCaptionEnd();
+- summaryTableHeader(packageTableHeader, "col");
+- }
+-
+- /**
+- * Print Html closing tags for the table for this package index.
+- */
+- protected void printIndexFooter() {
+- tableEnd();
+- p();
+- space();
+- }
+-
+- /**
+- * Print the overview comment as provided in the file specified by the
+- * "-overview" option on the command line.
+- */
+- protected void printOverviewComment() {
++ protected void addOverviewHeader(Content body) {
+ if (root.inlineTags().length > 0) {
+- anchor("overview_description");
+- p();
+- printInlineComment(root);
+- p();
++ HtmlTree p = new HtmlTree(HtmlTag.P);
++ p.addStyle(HtmlStyle.subTitle);
++ addSummaryComment(root, p);
++ Content div = HtmlTree.DIV(HtmlStyle.header, p);
++ Content see = seeLabel;
++ see.addContent(" ");
++ Content descPara = HtmlTree.P(see);
++ Content descLink = getHyperLink("", "overview_description",
++ descriptionLabel, "", "");
++ descPara.addContent(descLink);
++ div.addContent(descPara);
++ body.addContent(div);
+ }
+ }
+
+ /**
+- * Call {@link #printOverviewComment()} and then genrate the tag information
+- * as provided in the file specified by the "-overview" option on the
+- * command line.
++ * Adds the overview comment as provided in the file specified by the
++ * "-overview" option on the command line.
++ *
++ * @param htmltree the documentation tree to which the overview comment will
++ * be added
+ */
+- protected void printOverview() throws IOException {
+- printOverviewComment();
+- printTags(root);
++ protected void addOverviewComment(Content htmltree) {
++ if (root.inlineTags().length > 0) {
++ htmltree.addContent(getMarkerAnchor("overview_description"));
++ HtmlTree p = new HtmlTree(HtmlTag.P);
++ p.addStyle(HtmlStyle.subTitle);
++ addInlineComment(root, p);
++ htmltree.addContent(p);
++ }
+ }
+
+ /**
+- * Print the top text (from the -top option), the upper
+- * navigation bar, and then the title (from the"-title"
+- * option), at the top of page.
++ * Adds the tag information as provided in the file specified by the
++ * "-overview" option on the command line.
++ *
++ * @param body the documentation tree to which the overview will be added
+ */
+- protected void printNavigationBarHeader() {
+- printTop();
+- navLinks(true);
+- hr();
+- printConfigurationTitle();
++ protected void addOverview(Content body) throws IOException {
++ HtmlTree div = new HtmlTree(HtmlTag.DIV);
++ div.addStyle(HtmlStyle.footer);
++ addOverviewComment(div);
++ addTagsInfo(root, div);
++ body.addContent(div);
+ }
+
+ /**
+- * Print the lower navigation bar and the bottom text
++ * Adds the top text (from the -top option), the upper
++ * navigation bar, and then the title (from the"-title"
++ * option), at the top of page.
++ *
++ * @body the documentation tree to which the navigation bar header will be added
++ */
++ protected void addNavigationBarHeader(Content body) {
++ addTop(body);
++ addNavLinks(true, body);
++ addConfigurationTitle(body);
++ }
++
++ /**
++ * Adds the lower navigation bar and the bottom text
+ * (from the -bottom option) at the bottom of page.
+- */
+- protected void printNavigationBarFooter() {
+- hr();
+- navLinks(false);
+- printBottom();
++ *
++ * @param the documentation tree to which the navigation bar footer will be a */
++ protected void addNavigationBarFooter(Content body) {
++ addNavLinks(false, body);
++ addBottom(body);
+ }
+ }
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/PackageTreeWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/PackageTreeWriter.java
+--- langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageTreeWriter.java
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageTreeWriter.java
+@@ -29,12 +29,15 @@
+
+ import com.sun.javadoc.*;
+ import com.sun.tools.doclets.internal.toolkit.util.*;
++import com.sun.tools.doclets.formats.html.markup.*;
++import com.sun.tools.doclets.internal.toolkit.*;
+
+ /**
+ * Class to generate Tree page for a package. The name of the file generated is
+ * "package-tree.html" and it is generated in the respective package directory.
+ *
+ * @author Atul M Dambalkar
++ * @author Bhavesh Patel (Modified)
+ */
+ public class PackageTreeWriter extends AbstractTreeWriter {
+
+@@ -107,94 +110,96 @@
+ * Generate a separate tree file for each package.
+ */
+ protected void generatePackageTreeFile() throws IOException {
+- printHtmlHeader(packagedoc.name() + " "
+- + configuration.getText("doclet.Window_Class_Hierarchy"), null, true);
+-
+- printPackageTreeHeader();
+-
++ Content body = getPackageTreeHeader();
++ Content headContent = getResource("doclet.Hierarchy_For_Package",
++ Util.getPackageName(packagedoc));
++ Content heading = HtmlTree.HEADING(HtmlConstants.TITLE_HEADING, false,
++ HtmlStyle.title, headContent);
++ Content div = HtmlTree.DIV(HtmlStyle.header, heading);
+ if (configuration.packages.length > 1) {
+- printLinkToMainTree();
++ addLinkToMainTree(div);
+ }
+-
+- generateTree(classtree.baseclasses(), "doclet.Class_Hierarchy");
+- generateTree(classtree.baseinterfaces(), "doclet.Interface_Hierarchy");
+- generateTree(classtree.baseAnnotationTypes(), "doclet.Annotation_Type_Hierarchy");
+- generateTree(classtree.baseEnums(), "doclet.Enum_Hierarchy");
+-
+- printPackageTreeFooter();
+- printBottom();
+- printBodyHtmlEnd();
++ body.addContent(div);
++ HtmlTree divTree = new HtmlTree(HtmlTag.DIV);
++ divTree.addStyle(HtmlStyle.contentContainer);
++ addTree(classtree.baseclasses(), "doclet.Class_Hierarchy", divTree);
++ addTree(classtree.baseinterfaces(), "doclet.Interface_Hierarchy", divTree);
++ addTree(classtree.baseAnnotationTypes(), "doclet.Annotation_Type_Hierarchy", divTree);
++ addTree(classtree.baseEnums(), "doclet.Enum_Hierarchy", divTree);
++ body.addContent(divTree);
++ addNavLinks(false, body);
++ addBottom(body);
++ printHtmlDocument(null, true, body);
+ }
+
+ /**
+- * Print the navigation bar header for the package tree file.
++ * Get the package tree header.
++ *
++ * @return a content tree for the header
+ */
+- protected void printPackageTreeHeader() {
+- printTop();
+- navLinks(true);
+- hr();
+- center();
+- h2(configuration.getText("doclet.Hierarchy_For_Package",
+- Util.getPackageName(packagedoc)));
+- centerEnd();
++ protected Content getPackageTreeHeader() {
++ String title = packagedoc.name() + " " +
++ configuration.getText("doclet.Window_Class_Hierarchy");
++ Content bodyTree = getBody(true, getWindowTitle(title));
++ addTop(bodyTree);
++ addNavLinks(true, bodyTree);
++ return bodyTree;
+ }
+
+ /**
+- * Generate a link to the tree for all the packages.
++ * Add a link to the tree for all the packages.
++ *
++ * @param div the content tree to which the link will be added
+ */
+- protected void printLinkToMainTree() {
+- dl();
+- dt();
+- strongText("doclet.Package_Hierarchies");
+- dtEnd();
+- dd();
+- navLinkMainTree(configuration.getText("doclet.All_Packages"));
+- ddEnd();
+- dlEnd();
+- hr();
++ protected void addLinkToMainTree(Content div) {
++ Content span = HtmlTree.SPAN(HtmlStyle.strong,
++ getResource("doclet.Package_Hierarchies"));
++ div.addContent(span);
++ HtmlTree ul = new HtmlTree (HtmlTag.UL);
++ ul.addStyle(HtmlStyle.horizontal);
++ ul.addContent(getNavLinkMainTree(configuration.getText("doclet.All_Packages")));
++ div.addContent(ul);
+ }
+
+ /**
+- * Print the navigation bar footer for the package tree file.
++ * Get link for the previous package tree file.
++ *
++ * @return a content tree for the link
+ */
+- protected void printPackageTreeFooter() {
+- hr();
+- navLinks(false);
+- }
+-
+- /**
+- * Link for the previous package tree file.
+- */
+- protected void navLinkPrevious() {
++ protected Content getNavLinkPrevious() {
+ if (prev == null) {
+- navLinkPrevious(null);
++ return getNavLinkPrevious(null);
+ } else {
+ String path = DirectoryManager.getRelativePath(packagedoc.name(),
+- prev.name());
+- navLinkPrevious(path + "package-tree.html");
++ prev.name());
++ return getNavLinkPrevious(path + "package-tree.html");
+ }
+ }
+
+ /**
+- * Link for the next package tree file.
++ * Get link for the next package tree file.
++ *
++ * @return a content tree for the link
+ */
+- protected void navLinkNext() {
++ protected Content getNavLinkNext() {
+ if (next == null) {
+- navLinkNext(null);
++ return getNavLinkNext(null);
+ } else {
+ String path = DirectoryManager.getRelativePath(packagedoc.name(),
+- next.name());
+- navLinkNext(path + "package-tree.html");
++ next.name());
++ return getNavLinkNext(path + "package-tree.html");
+ }
+ }
+
+ /**
+- * Link to the package summary page for the package of this tree.
++ * Get link to the package summary page for the package of this tree.
++ *
++ * @return a content tree for the package link
+ */
+- protected void navLinkPackage() {
+- navCellStart();
+- printHyperLink("package-summary.html", "", configuration.getText("doclet.Package"),
+- true, "NavBarFont1");
+- navCellEnd();
++ protected Content getNavLinkPackage() {
++ Content linkContent = getHyperLink("package-summary.html", "",
++ packageLabel);
++ Content li = HtmlTree.LI(linkContent);
++ return li;
+ }
+ }
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/PackageUseWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/PackageUseWriter.java
+--- langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageUseWriter.java
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageUseWriter.java
+@@ -25,10 +25,12 @@
+
+ package com.sun.tools.doclets.formats.html;
+
+-import com.sun.tools.doclets.internal.toolkit.util.*;
+-import com.sun.javadoc.*;
+ import java.io.*;
+ import java.util.*;
++import com.sun.javadoc.*;
++import com.sun.tools.doclets.internal.toolkit.util.*;
++import com.sun.tools.doclets.formats.html.markup.*;
++import com.sun.tools.doclets.internal.toolkit.*;
+
+ /**
+ * Generate package usage information.
+@@ -106,49 +108,74 @@
+
+
+ /**
+- * Print the class use list.
++ * Generate the package use list.
+ */
+ protected void generatePackageUseFile() throws IOException {
+- printPackageUseHeader();
+-
++ Content body = getPackageUseHeader();
++ HtmlTree div = new HtmlTree(HtmlTag.DIV);
++ div.addStyle(HtmlStyle.contentContainer);
+ if (usingPackageToUsedClasses.isEmpty()) {
+- printText("doclet.ClassUse_No.usage.of.0", pkgdoc.name());
+- p();
++ div.addContent(getResource(
++ "doclet.ClassUse_No.usage.of.0", pkgdoc.name()));
+ } else {
+- generatePackageUse();
++ addPackageUse(div);
+ }
+-
+- printPackageUseFooter();
++ body.addContent(div);
++ addNavLinks(false, body);
++ addBottom(body);
++ printHtmlDocument(null, true, body);
+ }
+
+ /**
+- * Print the class use list.
++ * Add the package use information.
++ *
++ * @param contentTree the content tree to which the package use information will be added
+ */
+- protected void generatePackageUse() throws IOException {
++ protected void addPackageUse(Content contentTree) throws IOException {
++ HtmlTree ul = new HtmlTree(HtmlTag.UL);
++ ul.addStyle(HtmlStyle.blockList);
+ if (configuration.packages.length > 1) {
+- generatePackageList();
++ addPackageList(ul);
+ }
+- generateClassList();
++ addClassList(ul);
++ contentTree.addContent(ul);
+ }
+
+- protected void generatePackageList() throws IOException {
+- tableIndexSummary(useTableSummary);
+- tableCaptionStart();
+- printText("doclet.ClassUse_Packages.that.use.0",
+- getPackageLink(pkgdoc, Util.getPackageName(pkgdoc), false));
+- tableCaptionEnd();
+- summaryTableHeader(packageTableHeader, "col");
++ /**
++ * Add the list of packages that use the given package.
++ *
++ * @param contentTree the content tree to which the package list will be added
++ */
++ protected void addPackageList(Content contentTree) throws IOException {
++ Content table = HtmlTree.TABLE(0, 3, 0, useTableSummary,
++ getTableCaption(configuration().getText(
++ "doclet.ClassUse_Packages.that.use.0",
++ getPackageLinkString(pkgdoc, Util.getPackageName(pkgdoc), false))));
++ table.addContent(getSummaryTableHeader(packageTableHeader, "col"));
++ Content tbody = new HtmlTree(HtmlTag.TBODY);
+ Iterator it = usingPackageToUsedClasses.keySet().iterator();
+- while (it.hasNext()) {
++ for (int i = 0; it.hasNext(); i++) {
+ PackageDoc pkg = configuration.root.packageNamed((String)it.next());
+- generatePackageUse(pkg);
++ HtmlTree tr = new HtmlTree(HtmlTag.TR);
++ if (i % 2 == 0) {
++ tr.addStyle(HtmlStyle.altColor);
++ } else {
++ tr.addStyle(HtmlStyle.rowColor);
++ }
++ addPackageUse(pkg, tr);
++ tbody.addContent(tr);
+ }
+- tableEnd();
+- space();
+- p();
++ table.addContent(tbody);
++ Content li = HtmlTree.LI(HtmlStyle.blockList, table);
++ contentTree.addContent(li);
+ }
+
+- protected void generateClassList() throws IOException {
++ /**
++ * Add the list of classes that use the given package.
++ *
++ * @param contentTree the content tree to which the class list will be added
++ */
++ protected void addClassList(Content contentTree) throws IOException {
+ String[] classTableHeader = new String[] {
+ configuration.getText("doclet.0_and_1",
+ configuration.getText("doclet.Class"),
+@@ -158,118 +185,127 @@
+ while (itp.hasNext()) {
+ String packageName = (String)itp.next();
+ PackageDoc usingPackage = configuration.root.packageNamed(packageName);
++ HtmlTree li = new HtmlTree(HtmlTag.LI);
++ li.addStyle(HtmlStyle.blockList);
+ if (usingPackage != null) {
+- anchor(usingPackage.name());
++ li.addContent(getMarkerAnchor(usingPackage.name()));
+ }
+- tableIndexSummary(configuration.getText("doclet.Use_Table_Summary",
+- configuration.getText("doclet.classes")));
+- tableCaptionStart();
+- printText("doclet.ClassUse_Classes.in.0.used.by.1",
+- getPackageLink(pkgdoc, Util.getPackageName(pkgdoc), false),
+- getPackageLink(usingPackage,Util.getPackageName(usingPackage), false));
+- tableCaptionEnd();
+- summaryTableHeader(classTableHeader, "col");
++ String tableSummary = configuration.getText("doclet.Use_Table_Summary",
++ configuration.getText("doclet.classes"));
++ Content table = HtmlTree.TABLE(0, 3, 0, tableSummary,
++ getTableCaption(configuration().getText(
++ "doclet.ClassUse_Classes.in.0.used.by.1",
++ getPackageLinkString(pkgdoc, Util.getPackageName(pkgdoc), false),
++ getPackageLinkString(usingPackage,Util.getPackageName(usingPackage), false))));
++ table.addContent(getSummaryTableHeader(classTableHeader, "col"));
++ Content tbody = new HtmlTree(HtmlTag.TBODY);
+ Iterator itc =
+ ((Collection)usingPackageToUsedClasses.get(packageName))
+ .iterator();
+- while (itc.hasNext()) {
+- printClassRow((ClassDoc)itc.next(), packageName);
++ for (int i = 0; itc.hasNext(); i++) {
++ HtmlTree tr = new HtmlTree(HtmlTag.TR);
++ if (i % 2 == 0) {
++ tr.addStyle(HtmlStyle.altColor);
++ } else {
++ tr.addStyle(HtmlStyle.rowColor);
++ }
++ addClassRow(itc.next(), packageName, tr);
++ tbody.addContent(tr);
+ }
+- tableEnd();
+- space();
+- p();
++ table.addContent(tbody);
++ li.addContent(table);
++ contentTree.addContent(li);
+ }
+ }
+
+- protected void printClassRow(ClassDoc usedClass, String packageName) {
++ /**
++ * Add a row for the class that uses the given package.
++ *
++ * @param usedClass the class that uses the given package
++ * @param packageName the name of the package to which the class belongs
++ * @param contentTree the content tree to which the row will be added
++ */
++ protected void addClassRow(ClassDoc usedClass, String packageName,
++ Content contentTree) {
+ String path = pathString(usedClass,
+- "class-use/" + usedClass.name() + ".html");
+-
+- trBgcolorStyle("white", "TableRowColor");
+- summaryRow(0);
+- strong();
+- printHyperLink(path, packageName, usedClass.name(), true);
+- strongEnd();
+- println(); br();
+- printNbsps();
+- printIndexComment(usedClass);
+- summaryRowEnd();
+- trEnd();
++ "class-use/" + usedClass.name() + ".html");
++ Content td = HtmlTree.TD(HtmlStyle.colOne,
++ getHyperLink(path, packageName, new StringContent(usedClass.name())));
++ addIndexComment(usedClass, td);
++ contentTree.addContent(td);
+ }
+
+ /**
+- * Print the package use list.
++ * Add the package use information.
++ *
++ * @param pkg the package that used the given package
++ * @param contentTree the content tree to which the information will be added
+ */
+- protected void generatePackageUse(PackageDoc pkg) throws IOException {
+- trBgcolorStyle("white", "TableRowColor");
+- summaryRow(0);
+- //Just want an anchor here.
+- printHyperLink("", pkg.name(), Util.getPackageName(pkg), true);
+- summaryRowEnd();
+- summaryRow(0);
+- if (pkg != null) {
+- printSummaryComment(pkg);
+- }
+- space();
+- summaryRowEnd();
+- trEnd();
++ protected void addPackageUse(PackageDoc pkg, Content contentTree) throws IOException {
++ Content tdFirst = HtmlTree.TD(HtmlStyle.colFirst,
++ getHyperLink("", pkg.name(), new StringContent(Util.getPackageName(pkg))));
++ contentTree.addContent(tdFirst);
++ HtmlTree tdLast = new HtmlTree(HtmlTag.TD);
++ tdLast.addStyle(HtmlStyle.colLast);
++ if (pkg != null)
++ addSummaryComment(pkg, tdLast);
++ else
++ tdLast.addContent(getSpace());
++ contentTree.addContent(tdLast);
+ }
+
+ /**
+- * Print the header for the class use Listing.
++ * Get the header for the package use listing.
++ *
++ * @return a content tree representing the package use header
+ */
+- protected void printPackageUseHeader() {
+- String packageLabel = configuration.getText("doclet.Package");
++ protected Content getPackageUseHeader() {
++ String packageText = configuration.getText("doclet.Package");
+ String name = pkgdoc.name();
+- printHtmlHeader(configuration.getText("doclet.Window_ClassUse_Header",
+- packageLabel, name), null, true);
+- printTop();
+- navLinks(true);
+- hr();
+- center();
+- h2();
+- strongText("doclet.ClassUse_Title", packageLabel, name);
+- h2End();
+- centerEnd();
++ String title = configuration.getText("doclet.Window_ClassUse_Header",
++ packageText, name);
++ Content bodyTree = getBody(true, getWindowTitle(title));
++ addTop(bodyTree);
++ addNavLinks(true, bodyTree);
++ Content headContent = getResource("doclet.ClassUse_Title", packageText, name);
++ Content heading = HtmlTree.HEADING(HtmlConstants.TITLE_HEADING, true,
++ HtmlStyle.title, headContent);
++ Content div = HtmlTree.DIV(HtmlStyle.header, heading);
++ bodyTree.addContent(div);
++ return bodyTree;
+ }
+
+ /**
+- * Print the footer for the class use Listing.
++ * Get this package link.
++ *
++ * @return a content tree for the package link
+ */
+- protected void printPackageUseFooter() {
+- hr();
+- navLinks(false);
+- printBottom();
+- printBodyHtmlEnd();
+- }
+-
+-
+- /**
+- * Print this package link
+- */
+- protected void navLinkPackage() {
+- navCellStart();
+- printHyperLink("package-summary.html", "", configuration.getText("doclet.Package"),
+- true, "NavBarFont1");
+- navCellEnd();
++ protected Content getNavLinkPackage() {
++ Content linkContent = getHyperLink("package-summary.html", "",
++ packageLabel);
++ Content li = HtmlTree.LI(linkContent);
++ return li;
+ }
+
+ /**
+- * Print class use link
++ * Get the use link.
++ *
++ * @return a content tree for the use link
+ */
+- protected void navLinkClassUse() {
+- navCellRevStart();
+- fontStyle("NavBarFont1Rev");
+- strongText("doclet.navClassUse");
+- fontEnd();
+- navCellEnd();
++ protected Content getNavLinkClassUse() {
++ Content li = HtmlTree.LI(HtmlStyle.navBarCell1Rev, useLabel);
++ return li;
+ }
+
+- protected void navLinkTree() {
+- navCellStart();
+- printHyperLink("package-tree.html", "", configuration.getText("doclet.Tree"),
+- true, "NavBarFont1");
+- navCellEnd();
++ /**
++ * Get the tree link.
++ *
++ * @return a content tree for the tree link
++ */
++ protected Content getNavLinkTree() {
++ Content linkContent = getHyperLink("package-tree.html", "",
++ treeLabel);
++ Content li = HtmlTree.LI(linkContent);
++ return li;
+ }
+-
+ }
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/PackageWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/PackageWriterImpl.java
+--- langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageWriterImpl.java
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageWriterImpl.java
+@@ -25,12 +25,12 @@
+
+ package com.sun.tools.doclets.formats.html;
+
++import java.io.*;
++import java.util.*;
++import com.sun.javadoc.*;
+ import com.sun.tools.doclets.internal.toolkit.*;
+ import com.sun.tools.doclets.internal.toolkit.util.*;
+-
+-import com.sun.javadoc.*;
+-import java.io.*;
+-import java.util.*;
++import com.sun.tools.doclets.formats.html.markup.*;
+
+ /**
+ * Class to generate file for each package contents in the right-hand
+@@ -98,189 +98,206 @@
+ /**
+ * {@inheritDoc}
+ */
+- public void writeSummaryHeader() {}
+-
+- /**
+- * {@inheritDoc}
+- */
+- public void writeSummaryFooter() {}
+-
+- /**
+- * {@inheritDoc}
+- */
+- public void writeClassesSummary(ClassDoc[] classes, String label, String tableSummary, String[] tableHeader) {
+- if(classes.length > 0) {
+- Arrays.sort(classes);
+- tableIndexSummary(tableSummary);
+- boolean printedHeading = false;
+- for (int i = 0; i < classes.length; i++) {
+- if (!printedHeading) {
+- printTableCaption(label);
+- printFirstRow(tableHeader);
+- printedHeading = true;
+- }
+- if (!Util.isCoreClass(classes[i]) ||
+- !configuration.isGeneratedDoc(classes[i])) {
+- continue;
+- }
+- trBgcolorStyle("white", "TableRowColor");
+- summaryRow(15);
+- strong();
+- printLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_PACKAGE,
+- classes[i], false));
+- strongEnd();
+- summaryRowEnd();
+- summaryRow(0);
+- if (Util.isDeprecated(classes[i])) {
+- strongText("doclet.Deprecated");
+- if (classes[i].tags("deprecated").length > 0) {
+- space();
+- printSummaryDeprecatedComment(classes[i],
+- classes[i].tags("deprecated")[0]);
+- }
+- } else {
+- printSummaryComment(classes[i]);
+- }
+- summaryRowEnd();
+- trEnd();
+- }
+- tableEnd();
+- println("&nbsp;");
+- p();
++ public Content getPackageHeader(String heading) {
++ String pkgName = packageDoc.name();
++ Content bodyTree = getBody(true, getWindowTitle(pkgName));
++ addTop(bodyTree);
++ addNavLinks(true, bodyTree);
++ HtmlTree div = new HtmlTree(HtmlTag.DIV);
++ div.addStyle(HtmlStyle.header);
++ Content annotationContent = new HtmlTree(HtmlTag.P);
++ addAnnotationInfo(packageDoc, annotationContent);
++ div.addContent(annotationContent);
++ Content tHeading = HtmlTree.HEADING(HtmlConstants.TITLE_HEADING, true,
++ HtmlStyle.title, packageLabel);
++ tHeading.addContent(getSpace());
++ Content packageHead = new RawHtml(heading);
++ tHeading.addContent(packageHead);
++ div.addContent(tHeading);
++ if (packageDoc.inlineTags().length > 0 && ! configuration.nocomment) {
++ HtmlTree p = new HtmlTree(HtmlTag.P);
++ p.addStyle(HtmlStyle.subTitle);
++ addSummaryComment(packageDoc, p);
++ div.addContent(p);
++ Content space = getSpace();
++ Content descLink = getHyperLink("", "package_description",
++ descriptionLabel, "", "");
++ Content descPara = new HtmlTree(HtmlTag.P, seeLabel, space, descLink);
++ div.addContent(descPara);
+ }
+- }
+-
+- /**
+- * Print the table caption for the class-listing.
+- *
+- * @param label label for the Class kind listing.
+- */
+- protected void printTableCaption(String label) {
+- tableCaptionStart();
+- print(label);
+- tableCaptionEnd();
+- }
+-
+- /**
+- * Print the table heading for the class-listing.
+- *
+- * @param tableHeader table header string for the Class listing.
+- */
+- protected void printFirstRow(String[] tableHeader) {
+- summaryTableHeader(tableHeader, "col");
++ bodyTree.addContent(div);
++ return bodyTree;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- public void writePackageDescription() {
+- if (packageDoc.inlineTags().length > 0) {
+- anchor("package_description");
+- h2(configuration.getText("doclet.Package_Description", packageDoc.name()));
+- p();
+- printInlineComment(packageDoc);
+- p();
++ public Content getContentHeader() {
++ HtmlTree div = new HtmlTree(HtmlTag.DIV);
++ div.addStyle(HtmlStyle.contentContainer);
++ return div;
++ }
++
++ /**
++ * {@inheritDoc}
++ */
++ public Content getSummaryHeader() {
++ HtmlTree ul = new HtmlTree(HtmlTag.UL);
++ ul.addStyle(HtmlStyle.blockList);
++ return ul;
++ }
++
++ /**
++ * {@inheritDoc}
++ */
++ public void addClassesSummary(ClassDoc[] classes, String label,
++ String tableSummary, String[] tableHeader, Content summaryContentTree) {
++ if(classes.length > 0) {
++ Arrays.sort(classes);
++ Content caption = getTableCaption(label);
++ Content table = HtmlTree.TABLE(HtmlStyle.packageSummary, 0, 3, 0,
++ tableSummary, caption);
++ table.addContent(getSummaryTableHeader(tableHeader, "col"));
++ Content tbody = new HtmlTree(HtmlTag.TBODY);
++ for (int i = 0; i < classes.length; i++) {
++ if (!Util.isCoreClass(classes[i]) ||
++ !configuration.isGeneratedDoc(classes[i])) {
++ continue;
++ }
++ Content classContent = new RawHtml(getLink(new LinkInfoImpl(
++ LinkInfoImpl.CONTEXT_PACKAGE, classes[i], false)));
++ Content tdClass = HtmlTree.TD(HtmlStyle.colFirst, classContent);
++ HtmlTree tr = HtmlTree.TR(tdClass);
++ if (i%2 == 0)
++ tr.addStyle(HtmlStyle.altColor);
++ else
++ tr.addStyle(HtmlStyle.rowColor);
++ HtmlTree tdClassDescription = new HtmlTree(HtmlTag.TD);
++ tdClassDescription.addStyle(HtmlStyle.colLast);
++ if (Util.isDeprecated(classes[i])) {
++ tdClassDescription.addContent(deprecatedLabel);
++ if (classes[i].tags("deprecated").length > 0) {
++ addSummaryDeprecatedComment(classes[i],
++ classes[i].tags("deprecated")[0], tdClassDescription);
++ }
++ }
++ else
++ addSummaryComment(classes[i], tdClassDescription);
++ tr.addContent(tdClassDescription);
++ tbody.addContent(tr);
++ }
++ table.addContent(tbody);
++ Content li = HtmlTree.LI(HtmlStyle.blockList, table);
++ summaryContentTree.addContent(li);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- public void writePackageTags() {
+- printTags(packageDoc);
+- }
+-
+- /**
+- * {@inheritDoc}
+- */
+- public void writePackageHeader(String heading) {
+- String pkgName = packageDoc.name();
+- printHtmlHeader(pkgName,
+- configuration.metakeywords.getMetaKeywords(packageDoc), true);
+- printTop();
+- navLinks(true);
+- hr();
+- writeAnnotationInfo(packageDoc);
+- h2(configuration.getText("doclet.Package") + " " + heading);
+- if (packageDoc.inlineTags().length > 0 && ! configuration.nocomment) {
+- printSummaryComment(packageDoc);
+- p();
+- strong(configuration.getText("doclet.See"));
+- br();
+- printNbsps();
+- printHyperLink("", "package_description",
+- configuration.getText("doclet.Description"), true);
+- p();
++ public void addPackageDescription(Content packageContentTree) {
++ if (packageDoc.inlineTags().length > 0) {
++ packageContentTree.addContent(getMarkerAnchor("package_description"));
++ Content h2Content = new StringContent(
++ configuration.getText("doclet.Package_Description",
++ packageDoc.name()));
++ packageContentTree.addContent(HtmlTree.HEADING(HtmlConstants.PACKAGE_HEADING,
++ true, h2Content));
++ addInlineComment(packageDoc, packageContentTree);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+- public void writePackageFooter() {
+- hr();
+- navLinks(false);
+- printBottom();
+- printBodyHtmlEnd();
++ public void addPackageTags(Content packageContentTree) {
++ addTagsInfo(packageDoc, packageContentTree);
+ }
+
+ /**
+- * Print "Use" link for this pacakge in the navigation bar.
++ * {@inheritDoc}
+ */
+- protected void navLinkClassUse() {
+- navCellStart();
+- printHyperLink("package-use.html", "", configuration.getText("doclet.navClassUse"),
+- true, "NavBarFont1");
+- navCellEnd();
++ public void addPackageFooter(Content contentTree) {
++ addNavLinks(false, contentTree);
++ addBottom(contentTree);
+ }
+
+ /**
+- * Print "PREV PACKAGE" link in the navigation bar.
++ * {@inheritDoc}
+ */
+- protected void navLinkPrevious() {
++ public void printDocument(Content contentTree) {
++ printHtmlDocument(configuration.metakeywords.getMetaKeywords(packageDoc),
++ true, contentTree);
++ }
++
++ /**
++ * Get "Use" link for this pacakge in the navigation bar.
++ *
++ * @return a content tree for the class use link
++ */
++ protected Content getNavLinkClassUse() {
++ Content useLink = getHyperLink("package-use.html", "",
++ useLabel, "", "");
++ Content li = HtmlTree.LI(useLink);
++ return li;
++ }
++
++ /**
++ * Get "PREV PACKAGE" link in the navigation bar.
++ *
++ * @return a content tree for the previous link
++ */
++ public Content getNavLinkPrevious() {
++ Content li;
+ if (prev == null) {
+- printText("doclet.Prev_Package");
++ li = HtmlTree.LI(prevpackageLabel);
+ } else {
+ String path = DirectoryManager.getRelativePath(packageDoc.name(),
+ prev.name());
+- printHyperLink(path + "package-summary.html", "",
+- configuration.getText("doclet.Prev_Package"), true);
++ li = HtmlTree.LI(getHyperLink(path + "package-summary.html", "",
++ prevpackageLabel, "", ""));
+ }
++ return li;
+ }
+
+ /**
+- * Print "NEXT PACKAGE" link in the navigation bar.
++ * Get "NEXT PACKAGE" link in the navigation bar.
++ *
++ * @return a content tree for the next link
+ */
+- protected void navLinkNext() {
++ public Content getNavLinkNext() {
++ Content li;
+ if (next == null) {
+- printText("doclet.Next_Package");
++ li = HtmlTree.LI(nextpackageLabel);
+ } else {
+ String path = DirectoryManager.getRelativePath(packageDoc.name(),
+ next.name());
+- printHyperLink(path + "package-summary.html", "",
+- configuration.getText("doclet.Next_Package"), true);
++ li = HtmlTree.LI(getHyperLink(path + "package-summary.html", "",
++ nextpackageLabel, "", ""));
+ }
++ return li;
+ }
+
+ /**
+- * Print "Tree" link in the navigation bar. This will be link to the package
++ * Get "Tree" link in the navigation bar. This will be link to the package
+ * tree file.
++ *
++ * @return a content tree for the tree link
+ */
+- protected void navLinkTree() {
+- navCellStart();
+- printHyperLink("package-tree.html", "", configuration.getText("doclet.Tree"),
+- true, "NavBarFont1");
+- navCellEnd();
++ protected Content getNavLinkTree() {
++ Content useLink = getHyperLink("package-tree.html", "",
++ treeLabel, "", "");
++ Content li = HtmlTree.LI(useLink);
++ return li;
+ }
+
+ /**
+ * Highlight "Package" in the navigation bar, as this is the package page.
++ *
++ * @return a content tree for the package link
+ */
+- protected void navLinkPackage() {
+- navCellRevStart();
+- fontStyle("NavBarFont1Rev");
+- strongText("doclet.Package");
+- fontEnd();
+- navCellEnd();
++ protected Content getNavLinkPackage() {
++ Content li = HtmlTree.LI(HtmlStyle.navBarCell1Rev, packageLabel);
++ return li;
+ }
+ }
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/SerializedFormWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/SerializedFormWriterImpl.java
+--- langtools/src/share/classes/com/sun/tools/doclets/formats/html/SerializedFormWriterImpl.java
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/SerializedFormWriterImpl.java
+@@ -25,8 +25,10 @@
+
+ package com.sun.tools.doclets.formats.html;
+
++import java.io.*;
+ import com.sun.javadoc.*;
+-import java.io.*;
++import com.sun.tools.doclets.formats.html.markup.*;
++import com.sun.tools.doclets.internal.toolkit.*;
+
+ /**
+ * Generate the Serialized Form Information Page.
+@@ -64,76 +66,167 @@
+ }
+
+ /**
+- * Write the given package header.
++ * Get the given header.
+ *
+- * @param packageName the package header to write.
++ * @param header the header to write
++ * @return the body content tree
+ */
+- public void writePackageHeader(String packageName) {
+- hr(4, "noshade");
+- tableHeader();
+- thAlign("center");
+- font("+2");
+- strongText("doclet.Package");
+- print(' ');
+- strong(packageName);
+- tableFooter();
++ public Content getHeader(String header) {
++ Content bodyTree = getBody(true, getWindowTitle(header));
++ addTop(bodyTree);
++ addNavLinks(true, bodyTree);
++ Content h1Content = new StringContent(header);
++ Content heading = HtmlTree.HEADING(HtmlConstants.TITLE_HEADING, true,
++ HtmlStyle.title, h1Content);
++ Content div = HtmlTree.DIV(HtmlStyle.header, heading);
++ bodyTree.addContent(div);
++ return bodyTree;
+ }
+
+ /**
+- * Write the serial UID info.
++ * Get the serialized form summaries header.
+ *
+- * @param header the header that will show up before the UID.
+- * @param serialUID the serial UID to print.
++ * @return the serialized form summary header tree
+ */
+- public void writeSerialUIDInfo(String header, String serialUID) {
+- strong(header + "&nbsp;");
+- println(serialUID);
+- p();
++ public Content getSerializedSummariesHeader() {
++ HtmlTree ul = new HtmlTree(HtmlTag.UL);
++ ul.addStyle(HtmlStyle.blockList);
++ return ul;
+ }
+
+ /**
+- * Write the footer.
++ * Get the package serialized form header.
++ *
++ * @return the package serialized form header tree
+ */
+- public void writeFooter() {
+- p();
+- hr();
+- navLinks(false);
+- printBottom();
+- printBodyHtmlEnd();
++ public Content getPackageSerializedHeader() {
++ HtmlTree li = new HtmlTree(HtmlTag.LI);
++ li.addStyle(HtmlStyle.blockList);
++ return li;
+ }
+
++ /**
++ * Get the given package header.
++ *
++ * @param packageName the package header to write
++ * @return a content tree for the package header
++ */
++ public Content getPackageHeader(String packageName) {
++ Content heading = HtmlTree.HEADING(HtmlConstants.PACKAGE_HEADING, true,
++ packageLabel);
++ heading.addContent(getSpace());
++ heading.addContent(packageName);
++ return heading;
++ }
+
+ /**
+- * Write the serializable class heading.
++ * Get the serialized class header.
+ *
+- * @param classDoc the class being processed.
++ * @return a content tree for the serialized class header
+ */
+- public void writeClassHeader(ClassDoc classDoc) {
++ public Content getClassSerializedHeader() {
++ HtmlTree ul = new HtmlTree(HtmlTag.UL);
++ ul.addStyle(HtmlStyle.blockList);
++ return ul;
++ }
++
++ /**
++ * Get the serializable class heading.
++ *
++ * @param classDoc the class being processed
++ * @return a content tree for the class header
++ */
++ public Content getClassHeader(ClassDoc classDoc) {
+ String classLink = (classDoc.isPublic() || classDoc.isProtected())?
+ getLink(new LinkInfoImpl(classDoc,
+- configuration.getClassName(classDoc))):
++ configuration.getClassName(classDoc))):
+ classDoc.qualifiedName();
+- p();
+- anchor(classDoc.qualifiedName());
++ Content li = HtmlTree.LI(HtmlStyle.blockList, getMarkerAnchor(
++ classDoc.qualifiedName()));
+ String superClassLink =
+ classDoc.superclassType() != null ?
+ getLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_SERIALIZED_FORM,
+- classDoc.superclassType())) :
++ classDoc.superclassType())) :
+ null;
+
+ //Print the heading.
+ String className = superClassLink == null ?
+ configuration.getText(
+- "doclet.Class_0_implements_serializable", classLink) :
++ "doclet.Class_0_implements_serializable", classLink) :
+ configuration.getText(
+- "doclet.Class_0_extends_implements_serializable", classLink,
+- superClassLink);
+- tableHeader();
+- thAlignColspan("left", 2);
+- font("+2");
+- strong(className);
+- tableFooter();
+- p();
++ "doclet.Class_0_extends_implements_serializable", classLink,
++ superClassLink);
++ Content classNameContent = new RawHtml(className);
++ li.addContent(HtmlTree.HEADING(HtmlConstants.SERIALIZED_MEMBER_HEADING,
++ classNameContent));
++ return li;
++ }
++
++ /**
++ * Get the serial UID info header.
++ *
++ * @return a content tree for the serial uid info header
++ */
++ public Content getSerialUIDInfoHeader() {
++ HtmlTree dl = new HtmlTree(HtmlTag.DL);
++ dl.addStyle(HtmlStyle.nameValue);
++ return dl;
++ }
++
++ /**
++ * Adds the serial UID info.
++ *
++ * @param header the header that will show up before the UID.
++ * @param serialUID the serial UID to print.
++ * @param serialUidTree the serial UID content tree to which the serial UID
++ * content will be added
++ */
++ public void addSerialUIDInfo(String header, String serialUID,
++ Content serialUidTree) {
++ Content headerContent = new StringContent(header);
++ serialUidTree.addContent(HtmlTree.DT(headerContent));
++ Content serialContent = new StringContent(serialUID);
++ serialUidTree.addContent(HtmlTree.DD(serialContent));
++ }
++
++ /**
++ * Get the class serialize content header.
++ *
++ * @return a content tree for the class serialize content header
++ */
++ public Content getClassContentHeader() {
++ HtmlTree ul = new HtmlTree(HtmlTag.UL);
++ ul.addStyle(HtmlStyle.blockList);
++ return ul;
++ }
++
++ /**
++ * Get the serialized content tree section.
++ *
++ * @param serializedTreeContent the serialized content tree to be added
++ * @return a div content tree
++ */
++ public Content getSerializedContent(Content serializedTreeContent) {
++ Content divContent = HtmlTree.DIV(HtmlStyle.serializedFormContainer,
++ serializedTreeContent);
++ return divContent;
++ }
++
++ /**
++ * Add the footer.
++ *
++ * @param serializedTree the serialized tree to be added
++ */
++ public void addFooter(Content serializedTree) {
++ addNavLinks(false, serializedTree);
++ addBottom(serializedTree);
++ }
++
++ /**
++ * {@inheritDoc}
++ */
++ public void printDocument(Content serializedTree) {
++ printHtmlDocument(null, true, serializedTree);
+ }
+
+ private void tableHeader() {
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/SingleIndexWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/SingleIndexWriter.java
+--- langtools/src/share/classes/com/sun/tools/doclets/formats/html/SingleIndexWriter.java
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/SingleIndexWriter.java
+@@ -25,9 +25,10 @@
+
+ package com.sun.tools.doclets.formats.html;
+
++import java.io.*;
+ import com.sun.tools.doclets.internal.toolkit.util.*;
+-
+-import java.io.*;
++import com.sun.tools.doclets.formats.html.markup.*;
++import com.sun.tools.doclets.internal.toolkit.*;
+
+ /**
+ * Generate only one index file for all the Member Names with Indexing in
+@@ -36,6 +37,7 @@
+ *
+ * @see java.lang.Character
+ * @author Atul M Dambalkar
++ * @author Bhavesh Patel (Modified)
+ */
+ public class SingleIndexWriter extends AbstractIndexWriter {
+
+@@ -82,34 +84,35 @@
+ * Member Field, Method and Constructor Description.
+ */
+ protected void generateIndexFile() throws IOException {
+- printHtmlHeader(configuration.getText("doclet.Window_Single_Index"),
+- null, true);
+- printTop();
+- navLinks(true);
+- printLinksForIndexes();
+-
+- hr();
+-
++ String title = configuration.getText("doclet.Window_Single_Index");
++ Content body = getBody(true, getWindowTitle(title));
++ addTop(body);
++ addNavLinks(true, body);
++ HtmlTree divTree = new HtmlTree(HtmlTag.DIV);
++ divTree.addStyle(HtmlStyle.contentContainer);
++ addLinksForIndexes(divTree);
+ for (int i = 0; i < indexbuilder.elements().length; i++) {
+ Character unicode = (Character)((indexbuilder.elements())[i]);
+- generateContents(unicode, indexbuilder.getMemberList(unicode));
++ addContents(unicode, indexbuilder.getMemberList(unicode), divTree);
+ }
+-
+- printLinksForIndexes();
+- navLinks(false);
+-
+- printBottom();
+- printBodyHtmlEnd();
++ addLinksForIndexes(divTree);
++ body.addContent(divTree);
++ addNavLinks(false, body);
++ addBottom(body);
++ printHtmlDocument(null, true, body);
+ }
+
+ /**
+- * Print Links for all the Index Files per unicode character.
++ * Add links for all the Index Files per unicode character.
++ *
++ * @param contentTree the content tree to which the links for indexes will be added
+ */
+- protected void printLinksForIndexes() {
++ protected void addLinksForIndexes(Content contentTree) {
+ for (int i = 0; i < indexbuilder.elements().length; i++) {
+ String unicode = (indexbuilder.elements())[i].toString();
+- printHyperLink("#_" + unicode + "_", unicode);
+- print(' ');
++ contentTree.addContent(
++ getHyperLink("#_" + unicode + "_", new StringContent(unicode)));
++ contentTree.addContent(getSpace());
+ }
+ }
+ }
+diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/SourceToHTMLConverter.java b/src/share/classes/com/sun/tools/doclets/formats/html/SourceToHTMLConverter.java
+# most patch programs can not handle renames
+# rename from src/share/classes/com/sun/tools/doclets/internal/toolkit/util/SourceToHTMLConverter.java
+# rename to src/share/classes/com/sun/tools/doclets/formats/html/SourceToHTMLConverter.java
+--- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/SourceToHTMLConverter.java
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/SourceToHTMLConverter.java
+@@ -23,14 +23,14 @@
+ * questions.
+ */
+
+-package com.sun.tools.doclets.internal.toolkit.util;
++package com.sun.tools.doclets.formats.html;
+
+ import java.io.*;
+-import java.util.*;
+ import javax.tools.FileObject;
+-
+ import com.sun.javadoc.*;
+ import com.sun.tools.doclets.internal.toolkit.*;
++import com.sun.tools.doclets.internal.toolkit.util.*;
++import com.sun.tools.doclets.formats.html.markup.*;
+
+ /**
+ * Converts Java Source Code to HTML.
+@@ -40,27 +40,28 @@
+ * Do not use it as an API
+ *
+ * @author Jamie Ho
++ * @author Bhavesh Patel (Modified)
+ * @since 1.4
+ */
+ public class SourceToHTMLConverter {
+
+ /**
+- * The background color.
+- */
+- protected static final String BGCOLOR = "white";
+-
+- /**
+- * The line number color.
+- */
+- protected static final String LINE_NO_COLOR = "green";
+-
+- /**
+ * The number of trailing blank lines at the end of the page.
+ * This is inserted so that anchors at the bottom of small pages
+ * can be reached.
+ */
+- protected static final int NUM_BLANK_LINES = 60;
++ private static final int NUM_BLANK_LINES = 60;
+
++ /**
++ * New line to be added to the documentation.
++ */
++ private static final Content NEW_LINE = new RawHtml(DocletConstants.NL);
++
++ /**
++ * Relative path from the documentation root to the file that is being
++ * generated.
++ */
++ private static String relativePath = "";
+
+ /**
+ * Source is converted to HTML using static methods below.
+@@ -69,11 +70,13 @@
+
+ /**
+ * Convert the Classes in the given RootDoc to an HTML.
++ *
+ * @param configuration the configuration.
+ * @param rd the RootDoc to convert.
+ * @param outputdir the name of the directory to output to.
+ */
+- public static void convertRoot(Configuration configuration, RootDoc rd, String outputdir) {
++ public static void convertRoot(ConfigurationImpl configuration, RootDoc rd,
++ String outputdir) {
+ if (rd == null || outputdir == null) {
+ return;
+ }
+@@ -84,17 +87,19 @@
+ ClassDoc[] cds = rd.specifiedClasses();
+ for (int i = 0; i < cds.length; i++) {
+ convertClass(configuration, cds[i],
+- getPackageOutputDir(outputdir, cds[i].containingPackage()));
++ getPackageOutputDir(outputdir, cds[i].containingPackage()));
+ }
+ }
+
+ /**
+ * Convert the Classes in the given Package to an HTML.
++ *
+ * @param configuration the configuration.
+ * @param pd the Package to convert.
+ * @param outputdir the name of the directory to output to.
+ */
+- public static void convertPackage(Configuration configuration, PackageDoc pd, String outputdir) {
++ public static void convertPackage(ConfigurationImpl configuration, PackageDoc pd,
++ String outputdir) {
+ if (pd == null || outputdir == null) {
+ return;
+ }
+@@ -107,8 +112,10 @@
+
+ /**
+ * Return the directory write output to for the given package.
++ *
+ * @param outputDir the directory to output to.
+ * @param pd the Package to generate output for.
++ * @return the package output directory as a String.
+ */
+ private static String getPackageOutputDir(String outputDir, PackageDoc pd) {
+ return outputDir + File.separator +
+@@ -117,11 +124,13 @@
+
+ /**
+ * Convert the given Class to an HTML.
++ *
+ * @param configuration the configuration.
+ * @param cd the class to convert.
+ * @param outputdir the name of the directory to output to.
+ */
+- public static void convertClass(Configuration configuration, ClassDoc cd, String outputdir) {
++ public static void convertClass(ConfigurationImpl configuration, ClassDoc cd,
++ String outputdir) {
+ if (cd == null || outputdir == null) {
+ return;
+ }
+@@ -145,19 +154,23 @@
+ LineNumberReader reader = new LineNumberReader(r);
+ int lineno = 1;
+ String line;
+- StringBuffer output = new StringBuffer();
++ relativePath = DirectoryManager.getRelativePath(DocletConstants.SOURCE_OUTPUT_DIR_NAME) +
++ DirectoryManager.getRelativePath(cd.containingPackage());
++ Content body = getHeader();
++ Content pre = new HtmlTree(HtmlTag.PRE);
+ try {
+ while ((line = reader.readLine()) != null) {
+- output.append(formatLine(line, configuration.sourcetab, lineno));
++ addLineNo(pre, lineno);
++ addLine(pre, line, configuration.sourcetab, lineno);
+ lineno++;
+ }
+ } finally {
+ reader.close();
+ }
+- output = addLineNumbers(output.toString());
+- output.insert(0, getHeader(configuration));
+- output.append(getFooter());
+- writeToFile(output.toString(), outputdir, cd.name(), configuration);
++ addBlankLines(pre);
++ Content div = HtmlTree.DIV(HtmlStyle.sourceContainer, pre);
++ body.addContent(div);
++ writeToFile(body, outputdir, cd.name(), configuration);
+ } catch (Exception e){
+ e.printStackTrace();
+ }
+@@ -165,135 +178,117 @@
+
+ /**
+ * Write the output to the file.
+- * @param output the string to output.
++ *
++ * @param body the documentation content to be written to the file.
+ * @param outputDir the directory to output to.
+ * @param className the name of the class that I am converting to HTML.
+ * @param configuration the Doclet configuration to pass notices to.
+ */
+- private static void writeToFile(String output, String outputDir, String className, Configuration configuration) throws IOException {
++ private static void writeToFile(Content body, String outputDir,
++ String className, ConfigurationImpl configuration) throws IOException {
++ Content htmlDocType = DocType.Transitional();
++ Content head = new HtmlTree(HtmlTag.HEAD);
++ head.addContent(HtmlTree.TITLE(new StringContent(
++ configuration.getText("doclet.Window_Source_title"))));
++ head.addContent(getStyleSheetProperties(configuration));
++ Content htmlTree = HtmlTree.HTML(configuration.getLocale().getLanguage(),
++ head, body);
++ Content htmlDocument = new HtmlDocument(htmlDocType, htmlTree);
+ File dir = new File(outputDir);
+ dir.mkdirs();
+ File newFile = new File(dir, className + ".html");
+ configuration.message.notice("doclet.Generating_0", newFile.getPath());
+ FileOutputStream fout = new FileOutputStream(newFile);
+ BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fout));
+- bw.write(output);
++ bw.write(htmlDocument.toString());
+ bw.close();
+ fout.close();
+ }
+
+ /**
+- * Given a <code>String</code>, add line numbers.
+- * @param s the text to add line numbers to.
++ * Returns a link to the stylesheet file.
+ *
+- * @return the string buffer with the line numbering for each line.
++ * @param configuration the doclet configuration for the current run of javadoc
++ * @return an HtmlTree for the lINK tag which provides the stylesheet location
+ */
+- private static StringBuffer addLineNumbers(String s) {
+- StringBuffer sb = new StringBuffer();
+- StringTokenizer st = new StringTokenizer(s, "\n", true);
+- int lineno = 1;
+- String current;
+- while(st.hasMoreTokens()){
+- current = st.nextToken();
+- sb.append(current.equals("\n") ?
+- getHTMLLineNo(lineno) + current :
+- getHTMLLineNo(lineno) + current + st.nextToken());
+- lineno++;
++ public static HtmlTree getStyleSheetProperties(ConfigurationImpl configuration) {
++ String filename = configuration.stylesheetfile;
++ if (filename.length() > 0) {
++ File stylefile = new File(filename);
++ String parent = stylefile.getParent();
++ filename = (parent == null)?
++ filename:
++ filename.substring(parent.length() + 1);
++ } else {
++ filename = "stylesheet.css";
+ }
+- return sb;
++ filename = relativePath + filename;
++ HtmlTree link = HtmlTree.LINK("stylesheet", "text/css", filename, "Style");
++ return link;
+ }
+
+ /**
+ * Get the header.
+- * @param configuration the Doclet configuration
+- * @return the header to the output file
++ *
++ * @return the header content for the HTML file
+ */
+- protected static String getHeader(Configuration configuration) {
+- StringBuffer result = new StringBuffer("<HTML lang=\"" + configuration.getLocale().getLanguage() + "\">" + DocletConstants.NL);
+- result.append("<BODY BGCOLOR=\""+ BGCOLOR + "\">" + DocletConstants.NL);
+- result.append("<PRE>" + DocletConstants.NL);
+- return result.toString();
++ private static Content getHeader() {
++ return new HtmlTree(HtmlTag.BODY);
+ }
+
+ /**
+- * Get the footer
+- * @return the footer to the output file
++ * Add the line numbers for the source code.
++ *
++ * @param pre the content tree to which the line number will be added
++ * @param lineno The line number
+ */
+- protected static String getFooter() {
+- StringBuffer footer = new StringBuffer();
+- for (int i = 0; i < NUM_BLANK_LINES; i++) {
+- footer.append(DocletConstants.NL);
++ private static void addLineNo(Content pre, int lineno) {
++ HtmlTree span = new HtmlTree(HtmlTag.SPAN);
++ span.addStyle(HtmlStyle.sourceLineNo);
++ if (lineno < 10) {
++ span.addContent("00" + Integer.toString(lineno));
++ } else if (lineno < 100) {
++ span.addContent("0" + Integer.toString(lineno));
++ } else {
++ span.addContent(Integer.toString(lineno));
+ }
+- footer.append("</PRE>" + DocletConstants.NL + "</BODY>" +
+- DocletConstants.NL + "</HTML>" + DocletConstants.NL);
+- return footer.toString();
++ pre.addContent(span);
+ }
+
+ /**
+- * Get the HTML for the lines.
+- * @param lineno The line number
+- * @return the HTML code for the line
+- */
+- protected static String getHTMLLineNo(int lineno) {
+- StringBuffer result = new StringBuffer("<FONT color=\"" + LINE_NO_COLOR
+- + "\">");
+- if (lineno < 10) {
+- result.append("00" + ((new Integer(lineno)).toString()));
+- } else if (lineno < 100) {
+- result.append("0" + ((new Integer(lineno)).toString()));
+- } else {
+- result.append((new Integer(lineno)).toString());
+- }
+- result.append("</FONT> ");
+- return result.toString();
+- }
+-
+- /**
+- * Format a given line of source. <br>
+- * Note: In the future, we will add special colors for constructs in the
+- * language.
++ * Add a line from source to the HTML file that is generated.
++ *
++ * @param pre the content tree to which the line will be added.
+ * @param line the string to format.
+ * @param tabLength the number of spaces for each tab.
+ * @param currentLineNo the current number.
+ */
+- protected static String formatLine(String line, int tabLength, int currentLineNo) {
+- if (line == null) {
+- return null;
+- }
+- StringBuffer lineBuffer = new StringBuffer(Util.escapeHtmlChars(line));
+- //Insert an anchor for the line
+- lineBuffer.append("<a name=\"line." + Integer.toString(currentLineNo) + "\"></a>");
+- lineBuffer.append(DocletConstants.NL);
+- Util.replaceTabs(tabLength, lineBuffer);
+- return lineBuffer.toString();
+- }
+-
+- /**
+- * Given an array of <code>Doc</code>s, add to the given <code>HashMap</code> the
+- * line numbers and anchors that should be inserted in the output at those lines.
+- * @param docs the array of <code>Doc</code>s to add anchors for.
+- * @param hash the <code>HashMap</code> to add to.
+- */
+- protected static void addToHash(Doc[] docs, HashMap<Integer,String> hash) {
+- if(docs == null) {
+- return;
+- }
+- for(int i = 0; i < docs.length; i++) {
+- hash.put(docs[i].position().line(), getAnchor(docs[i]));
++ private static void addLine(Content pre, String line, int tabLength,
++ int currentLineNo) {
++ if (line != null) {
++ StringBuffer lineBuffer = new StringBuffer(Util.escapeHtmlChars(line));
++ Util.replaceTabs(tabLength, lineBuffer);
++ pre.addContent(new RawHtml(lineBuffer.toString()));
++ Content anchor = HtmlTree.A_NAME("line." + Integer.toString(currentLineNo));
++ pre.addContent(anchor);
++ pre.addContent(NEW_LINE);
+ }
+ }
+
+ /**
+- * Given a <code>Doc</code>, return an anchor for it.
+- * @param d the <code>Doc</code> to check.
+- * @return an anchor of the form &lt;a name="my_name">&lt;/a>
++ * Add trailing blank lines at the end of the page.
++ *
++ * @param pre the content tree to which the blank lines will be added.
+ */
+- protected static String getAnchor(Doc d) {
+- return " <a name=\"" + getAnchorName(d) + "\"></a>";
++ private static void addBlankLines(Content pre) {
++ for (int i = 0; i < NUM_BLANK_LINES; i++) {
++ pre.addContent(NEW_LINE);
++ }
+ }
+
+ /**
+ * Given a <code>Doc</code>, return an anchor name for it.
++ *
+ * @param d the <code>Doc</code> to check.
+ * @return the name of the anchor.
+ */
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/SplitIndexWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/SplitIndexWriter.java
+--- langtools/src/share/classes/com/sun/tools/doclets/formats/html/SplitIndexWriter.java
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/SplitIndexWriter.java
+@@ -25,9 +25,10 @@
+
+ package com.sun.tools.doclets.formats.html;
+
++import java.io.*;
+ import com.sun.tools.doclets.internal.toolkit.util.*;
+-
+-import java.io.*;
++import com.sun.tools.doclets.formats.html.markup.*;
++import com.sun.tools.doclets.internal.toolkit.*;
+
+ /**
+ * Generate Separate Index Files for all the member names with Indexing in
+@@ -36,6 +37,7 @@
+ *
+ * @see java.lang.Character
+ * @author Atul M Dambalkar
++ * @author Bhavesh Patel (Modified)
+ */
+ public class SplitIndexWriter extends AbstractIndexWriter {
+
+@@ -109,56 +111,68 @@
+ * index.
+ */
+ protected void generateIndexFile(Character unicode) throws IOException {
+- printHtmlHeader(configuration.getText("doclet.Window_Split_Index",
+- unicode.toString()), null, true);
+- printTop();
+- navLinks(true);
+- printLinksForIndexes();
+-
+- hr();
+-
+- generateContents(unicode, indexbuilder.getMemberList(unicode));
+-
+- navLinks(false);
+- printLinksForIndexes();
+-
+- printBottom();
+- printBodyHtmlEnd();
++ String title = configuration.getText("doclet.Window_Split_Index",
++ unicode.toString());
++ Content body = getBody(true, getWindowTitle(title));
++ addTop(body);
++ addNavLinks(true, body);
++ HtmlTree divTree = new HtmlTree(HtmlTag.DIV);
++ divTree.addStyle(HtmlStyle.contentContainer);
++ addLinksForIndexes(divTree);
++ addContents(unicode, indexbuilder.getMemberList(unicode), divTree);
++ addLinksForIndexes(divTree);
++ body.addContent(divTree);
++ addNavLinks(false, body);
++ addBottom(body);
++ printHtmlDocument(null, true, body);
+ }
+
+ /**
+- * Print Links for all the Index Files per unicode character.
++ * Add links for all the Index Files per unicode character.
++ *
++ * @param contentTree the content tree to which the links for indexes will be added
+ */
+- protected void printLinksForIndexes() {
+- for (int i = 0; i < indexbuilder.elements().length; i++) {
++ protected void addLinksForIndexes(Content contentTree) {
++ Object[] unicodeChars = indexbuilder.elements();
++ for (int i = 0; i < unicodeChars.length; i++) {
+ int j = i + 1;
+- printHyperLink("index-" + j + ".html",
+- indexbuilder.elements()[i].toString());
+- print(' ');
++ contentTree.addContent(getHyperLink("index-" + j + ".html",
++ new StringContent(unicodeChars[i].toString())));
++ contentTree.addContent(getSpace());
+ }
+ }
+
+ /**
+- * Print the previous unicode character index link.
++ * Get link to the previous unicode character.
++ *
++ * @return a content tree for the link
+ */
+- protected void navLinkPrevious() {
++ public Content getNavLinkPrevious() {
++ Content prevletterLabel = getResource("doclet.Prev_Letter");
+ if (prev == -1) {
+- printText("doclet.Prev_Letter");
+- } else {
+- printHyperLink("index-" + prev + ".html", "",
+- configuration.getText("doclet.Prev_Letter"), true);
++ return HtmlTree.LI(prevletterLabel);
++ }
++ else {
++ Content prevLink = getHyperLink("index-" + prev + ".html", "",
++ prevletterLabel);
++ return HtmlTree.LI(prevLink);
+ }
+ }
+
+ /**
+- * Print the next unicode character index link.
++ * Get link to the next unicode character.
++ *
++ * @return a content tree for the link
+ */
+- protected void navLinkNext() {
++ public Content getNavLinkNext() {
++ Content nextletterLabel = getResource("doclet.Next_Letter");
+ if (next == -1) {
+- printText("doclet.Next_Letter");
+- } else {
+- printHyperLink("index-" + next + ".html","",
+- configuration.getText("doclet.Next_Letter"), true);
++ return HtmlTree.LI(nextletterLabel);
++ }
++ else {
++ Content nextLink = getHyperLink("index-" + next + ".html","",
++ nextletterLabel);
++ return HtmlTree.LI(nextLink);
+ }
+ }
+ }
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/StylesheetWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/StylesheetWriter.java
+deleted file mode 100644
+--- langtools/src/share/classes/com/sun/tools/doclets/formats/html/StylesheetWriter.java
++++ /dev/null
+@@ -1,130 +0,0 @@
+-/*
+- * Copyright (c) 1998, 2005, Oracle and/or its affiliates. All rights reserved.
+- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+- *
+- * This code is free software; you can redistribute it and/or modify it
+- * under the terms of the GNU General Public License version 2 only, as
+- * published by the Free Software Foundation. Oracle designates this
+- * particular file as subject to the "Classpath" exception as provided
+- * by Oracle in the LICENSE file that accompanied this code.
+- *
+- * This code is distributed in the hope that it will be useful, but WITHOUT
+- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+- * version 2 for more details (a copy is included in the LICENSE file that
+- * accompanied this code).
+- *
+- * You should have received a copy of the GNU General Public License version
+- * 2 along with this work; if not, write to the Free Software Foundation,
+- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+- *
+- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+- * or visit www.oracle.com if you need additional information or have any
+- * questions.
+- */
+-
+-package com.sun.tools.doclets.formats.html;
+-
+-import com.sun.tools.doclets.internal.toolkit.util.*;
+-
+-import java.io.*;
+-
+-/**
+- * Writes the style sheet for the doclet output.
+- *
+- * @author Atul M Dambalkar
+- * @author Bhavesh Patel (Modified)
+- */
+-public class StylesheetWriter extends HtmlDocletWriter {
+-
+- /**
+- * Constructor.
+- */
+- public StylesheetWriter(ConfigurationImpl configuration,
+- String filename) throws IOException {
+- super(configuration, filename);
+- }
+-
+- /**
+- * Generate the style file contents.
+- * @throws DocletAbortException
+- */
+- public static void generate(ConfigurationImpl configuration) {
+- StylesheetWriter stylegen;
+- String filename = "";
+- try {
+- filename = "stylesheet.css";
+- stylegen = new StylesheetWriter(configuration, filename);
+- stylegen.generateStyleFile();
+- stylegen.close();
+- } catch (IOException exc) {
+- configuration.standardmessage.error(
+- "doclet.exception_encountered",
+- exc.toString(), filename);
+- throw new DocletAbortException();
+- }
+- }
+-
+- /**
+- * Generate the style file contents.
+- */
+- protected void generateStyleFile() {
+- print("/* "); printText("doclet.Style_line_1"); println(" */");
+- println("");
+-
+- print("/* "); printText("doclet.Style_line_2"); println(" */");
+- println("");
+-
+- print("/* "); printText("doclet.Style_line_3"); println(" */");
+- println("body { background-color: #FFFFFF; color:#000000 }");
+- println("");
+-
+- print("/* "); printText("doclet.Style_Headings"); println(" */");
+- println("h1 { font-size: 145% }");
+- println("");
+-
+- print("/* "); printText("doclet.Style_line_4"); println(" */");
+- print(".TableHeadingColor { background: #CCCCFF; color:#000000 }");
+- print(" /* "); printText("doclet.Style_line_5"); println(" */");
+- print(".TableSubHeadingColor { background: #EEEEFF; color:#000000 }");
+- print(" /* "); printText("doclet.Style_line_6"); println(" */");
+- print(".TableRowColor { background: #FFFFFF; color:#000000 }");
+- print(" /* "); printText("doclet.Style_line_7"); println(" */");
+- println("");
+-
+- print("/* "); printText("doclet.Style_line_8"); println(" */");
+- println(".FrameTitleFont { font-size: 100%; font-family: Helvetica, Arial, sans-serif; color:#000000 }");
+- println(".FrameHeadingFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif; color:#000000 }");
+- println(".FrameItemFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif; color:#000000 }");
+- println("");
+-
+- // Removed doclet.Style_line_9 as no longer needed
+-
+- print("/* "); printText("doclet.Style_line_10"); println(" */");
+- print(".NavBarCell1 { background-color:#EEEEFF; color:#000000}");
+- print(" /* "); printText("doclet.Style_line_6"); println(" */");
+- print(".NavBarCell1Rev { background-color:#00008B; color:#FFFFFF}");
+- print(" /* "); printText("doclet.Style_line_11"); println(" */");
+-
+- print(".NavBarFont1 { font-family: Arial, Helvetica, sans-serif; color:#000000;");
+- println("color:#000000;}");
+- print(".NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;");
+- println("color:#FFFFFF;}");
+- println("");
+-
+- print(".NavBarCell2 { font-family: Arial, Helvetica, sans-serif; ");
+- println("background-color:#FFFFFF; color:#000000}");
+- print(".NavBarCell3 { font-family: Arial, Helvetica, sans-serif; ");
+- println("background-color:#FFFFFF; color:#000000}");
+-
+- print("/* "); printText("doclet.Style_line_12"); println(" */");
+- print(".TableCaption { background: #CCCCFF; color:#000000; text-align: left; font-size: 150%; font-weight: bold; border-left: 2px ridge; border-right: 2px ridge; border-top: 2px ridge; padding-left: 5px; }");
+- print(" /* "); printText("doclet.Style_line_5"); println(" */");
+- print(".TableSubCaption { background: #EEEEFF; color:#000000; text-align: left; font-weight: bold; border-left: 2px ridge; border-right: 2px ridge; border-top: 2px ridge; padding-left: 5px; }");
+- print(" /* "); printText("doclet.Style_line_6"); println(" */");
+- print(".TableHeader { text-align: center; font-size: 80%; font-weight: bold; }");
+- println("");
+-
+- }
+-
+-}
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/SubWriterHolderWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/SubWriterHolderWriter.java
+--- langtools/src/share/classes/com/sun/tools/doclets/formats/html/SubWriterHolderWriter.java
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/SubWriterHolderWriter.java
+@@ -25,10 +25,11 @@
+
+ package com.sun.tools.doclets.formats.html;
+
++import java.io.*;
+ import com.sun.javadoc.*;
++import com.sun.tools.doclets.internal.toolkit.*;
+ import com.sun.tools.doclets.internal.toolkit.util.*;
+-
+-import java.io.*;
++import com.sun.tools.doclets.formats.html.markup.*;
+
+ /**
+ * This abstract class exists to provide functionality needed in the
+@@ -71,13 +72,31 @@
+ tdEnd();
+ }
+
+- public void printSummaryHeader(AbstractMemberWriter mw, ClassDoc cd) {
+- mw.printSummaryAnchor(cd);
+- mw.printTableSummary();
+- tableCaptionStart();
+- mw.printSummaryLabel();
+- tableCaptionEnd();
+- mw.printSummaryTableHeader(cd);
++ /**
++ * Add the summary header.
++ *
++ * @param mw the writer for the member being documented
++ * @param cd the classdoc to be documented
++ * @param memberTree the content tree to which the summary header will be added
++ */
++ public void addSummaryHeader(AbstractMemberWriter mw, ClassDoc cd,
++ Content memberTree) {
++ mw.addSummaryAnchor(cd, memberTree);
++ mw.addSummaryLabel(memberTree);
++ }
++
++ /**
++ * Get the summary table.
++ *
++ * @param mw the writer for the member being documented
++ * @param cd the classdoc to be documented
++ * @return the content tree for the summary table
++ */
++ public Content getSummaryTableTree(AbstractMemberWriter mw, ClassDoc cd) {
++ Content table = HtmlTree.TABLE(HtmlStyle.overviewSummary, 0, 3, 0,
++ mw.getTableSummary(), getTableCaption(mw.getCaption()));
++ table.addContent(getSummaryTableHeader(mw.getSummaryTableHeader(cd), "col"));
++ return table;
+ }
+
+ public void printTableHeadingBackground(String str) {
+@@ -88,15 +107,17 @@
+ tableEnd();
+ }
+
+- public void printInheritedSummaryHeader(AbstractMemberWriter mw, ClassDoc cd) {
+- mw.printInheritedSummaryAnchor(cd);
+- tableIndexSummary();
+- tableInheritedHeaderStart("#EEEEFF");
+- mw.printInheritedSummaryLabel(cd);
+- tableInheritedHeaderEnd();
+- trBgcolorStyle("white", "TableRowColor");
+- summaryRow(0);
+- code();
++ /**
++ * Add the inherited summary header.
++ *
++ * @param mw the writer for the member being documented
++ * @param cd the classdoc to be documented
++ * @param inheritedTree the content tree to which the inherited summary header will be added
++ */
++ public void addInheritedSummaryHeader(AbstractMemberWriter mw, ClassDoc cd,
++ Content inheritedTree) {
++ mw.addInheritedSummaryAnchor(cd, inheritedTree);
++ mw.addInheritedSummaryLabel(cd, inheritedTree);
+ }
+
+ public void printSummaryFooter(AbstractMemberWriter mw, ClassDoc cd) {
+@@ -112,8 +133,14 @@
+ space();
+ }
+
+- protected void printIndexComment(Doc member) {
+- printIndexComment(member, member.firstSentenceTags());
++ /**
++ * Add the index comment.
++ *
++ * @param member the member being documented
++ * @param contentTree the content tree to which the comment will be added
++ */
++ protected void addIndexComment(Doc member, Content contentTree) {
++ addIndexComment(member, member.firstSentenceTags(), contentTree);
+ }
+
+ protected void printIndexComment(Doc member, Tag[] firstSentenceTags) {
+@@ -134,17 +161,60 @@
+ printSummaryComment(member, firstSentenceTags);
+ }
+
+- public void printSummaryLinkType(AbstractMemberWriter mw,
+- ProgramElementDoc member) {
+- trBgcolorStyle("white", "TableRowColor");
+- mw.printSummaryType(member);
+- summaryRow(0);
+- code();
++ /**
++ * Add the index comment.
++ *
++ * @param member the member being documented
++ * @param firstSentenceTags the first sentence tags for the member to be documented
++ * @param tdSummary the content tree to which the comment will be added
++ */
++ protected void addIndexComment(Doc member, Tag[] firstSentenceTags,
++ Content tdSummary) {
++ Tag[] deprs = member.tags("deprecated");
++ Content div;
++ if (Util.isDeprecated((ProgramElementDoc) member)) {
++ Content strong = HtmlTree.STRONG(deprecatedPhrase);
++ div = HtmlTree.DIV(HtmlStyle.block, strong);
++ div.addContent(getSpace());
++ if (deprs.length > 0) {
++ addInlineDeprecatedComment(member, deprs[0], div);
++ }
++ tdSummary.addContent(div);
++ return;
++ } else {
++ ClassDoc cd = ((ProgramElementDoc)member).containingClass();
++ if (cd != null && Util.isDeprecated(cd)) {
++ Content strong = HtmlTree.STRONG(deprecatedPhrase);
++ div = HtmlTree.DIV(HtmlStyle.block, strong);
++ div.addContent(getSpace());
++ tdSummary.addContent(div);
++ }
++ }
++ addSummaryComment(member, firstSentenceTags, tdSummary);
+ }
+
+- public void printSummaryLinkComment(AbstractMemberWriter mw,
+- ProgramElementDoc member) {
+- printSummaryLinkComment(mw, member, member.firstSentenceTags());
++ /**
++ * Add the summary type for the member.
++ *
++ * @param mw the writer for the member being documented
++ * @param member the member to be documented
++ * @param tdSummaryType the content tree to which the type will be added
++ */
++ public void addSummaryType(AbstractMemberWriter mw, ProgramElementDoc member,
++ Content tdSummaryType) {
++ mw.addSummaryType(member, tdSummaryType);
++ }
++
++ /**
++ * Add the summary link for the member.
++ *
++ * @param mw the writer for the member being documented
++ * @param member the member to be documented
++ * @param contentTree the content tree to which the link will be added
++ */
++ public void addSummaryLinkComment(AbstractMemberWriter mw,
++ ProgramElementDoc member, Content contentTree) {
++ addSummaryLinkComment(mw, member, member.firstSentenceTags(), contentTree);
+ }
+
+ public void printSummaryLinkComment(AbstractMemberWriter mw,
+@@ -159,12 +229,34 @@
+ trEnd();
+ }
+
+- public void printInheritedSummaryMember(AbstractMemberWriter mw, ClassDoc cd,
+- ProgramElementDoc member, boolean isFirst) {
++ /**
++ * Add the summary link comment.
++ *
++ * @param mw the writer for the member being documented
++ * @param member the member being documented
++ * @param firstSentenceTags the first sentence tags for the member to be documented
++ * @param tdSummary the content tree to which the comment will be added
++ */
++ public void addSummaryLinkComment(AbstractMemberWriter mw,
++ ProgramElementDoc member, Tag[] firstSentenceTags, Content tdSummary) {
++ addIndexComment(member, firstSentenceTags, tdSummary);
++ }
++
++ /**
++ * Add the inherited member summary.
++ *
++ * @param mw the writer for the member being documented
++ * @param cd the class being documented
++ * @param member the member being documented
++ * @param isFirst true if its the first link being documented
++ * @param linksTree the content tree to which the summary will be added
++ */
++ public void addInheritedMemberSummary(AbstractMemberWriter mw, ClassDoc cd,
++ ProgramElementDoc member, boolean isFirst, Content linksTree) {
+ if (! isFirst) {
+- mw.print(", ");
++ linksTree.addContent(", ");
+ }
+- mw.writeInheritedSummaryLink(cd, member);
++ mw.addInheritedSummaryLink(cd, member, linksTree);
+ }
+
+ public void printMemberHeader() {
+@@ -174,4 +266,67 @@
+ public void printMemberFooter() {
+ }
+
++ /**
++ * Get the document content header tree
++ *
++ * @return a content tree the document content header
++ */
++ public Content getContentHeader() {
++ HtmlTree div = new HtmlTree(HtmlTag.DIV);
++ div.addStyle(HtmlStyle.contentContainer);
++ return div;
++ }
++
++ /**
++ * Get the member header tree
++ *
++ * @return a content tree the member header
++ */
++ public Content getMemberTreeHeader() {
++ HtmlTree li = new HtmlTree(HtmlTag.LI);
++ li.addStyle(HtmlStyle.blockList);
++ return li;
++ }
++
++ /**
++ * Get the member tree
++ *
++ * @param contentTree the tree used to generate the complete member tree
++ * @return a content tree for the member
++ */
++ public Content getMemberTree(Content contentTree) {
++ Content ul = HtmlTree.UL(HtmlStyle.blockList, contentTree);
++ return ul;
++ }
++
++ /**
++ * Get the member summary tree
++ *
++ * @param contentTree the tree used to generate the member summary tree
++ * @return a content tree for the member summary
++ */
++ public Content getMemberSummaryTree(Content contentTree) {
++ return getMemberTree(HtmlStyle.summary, contentTree);
++ }
++
++ /**
++ * Get the member details tree
++ *
++ * @param contentTree the tree used to generate the member details tree
++ * @return a content tree for the member details
++ */
++ public Content getMemberDetailsTree(Content contentTree) {
++ return getMemberTree(HtmlStyle.details, contentTree);
++ }
++
++ /**
++ * Get the member tree
++ *
++ * @param style the style class to be added to the content tree
++ * @param contentTree the tree used to generate the complete member tree
++ */
++ public Content getMemberTree(HtmlStyle style, Content contentTree) {
++ Content div = HtmlTree.DIV(style, getMemberTree(contentTree));
++ return div;
++ }
+ }
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/TagletWriterImpl.java b/src/share/classes/com/sun/tools/doclets/formats/html/TagletWriterImpl.java
+--- langtools/src/share/classes/com/sun/tools/doclets/formats/html/TagletWriterImpl.java
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/TagletWriterImpl.java
+@@ -70,9 +70,9 @@
+ Tag[] deprs = doc.tags("deprecated");
+ if (doc instanceof ClassDoc) {
+ if (Util.isDeprecated((ProgramElementDoc) doc)) {
+- output.append("<STRONG>" +
++ output.append("<span class=\"strong\">" +
+ ConfigurationImpl.getInstance().
+- getText("doclet.Deprecated") + "</STRONG>&nbsp;");
++ getText("doclet.Deprecated") + "</span>&nbsp;");
+ if (deprs.length > 0) {
+ Tag[] commentTags = deprs[0].inlineTags();
+ if (commentTags.length > 0) {
+@@ -82,30 +82,24 @@
+ );
+ }
+ }
+- output.append("<p>");
+ }
+ } else {
+ MemberDoc member = (MemberDoc) doc;
+ if (Util.isDeprecated((ProgramElementDoc) doc)) {
+- output.append("<DD><STRONG>" +
++ output.append("<span class=\"strong\">" +
+ ConfigurationImpl.getInstance().
+- getText("doclet.Deprecated") + "</STRONG>&nbsp;");
++ getText("doclet.Deprecated") + "</span>&nbsp;");
+ if (deprs.length > 0) {
+- output.append("<I>");
++ output.append("<i>");
+ output.append(commentTagsToOutput(null, doc,
+ deprs[0].inlineTags(), false).toString());
+- output.append("</I>");
++ output.append("</i>");
+ }
+- if (member instanceof ExecutableMemberDoc) {
+- output.append(DocletConstants.NL + "<P>" +
+- DocletConstants.NL);
+- }
+- output.append("</DD>");
+ } else {
+ if (Util.isDeprecated(member.containingClass())) {
+- output.append("<DD><STRONG>" +
++ output.append("<span class=\"strong\">" +
+ ConfigurationImpl.getInstance().
+- getText("doclet.Deprecated") + "</STRONG>&nbsp;</DD>");
++ getText("doclet.Deprecated") + "</span>&nbsp;");
+ }
+ }
+ }
+@@ -124,8 +118,8 @@
+ */
+ public TagletOutput getParamHeader(String header) {
+ StringBuffer result = new StringBuffer();
+- result.append("<DT>");
+- result.append("<STRONG>" + header + "</STRONG></DT>");
++ result.append("<dt>");
++ result.append("<span class=\"strong\">" + header + "</span></dt>");
+ return new TagletOutputImpl(result.toString());
+ }
+
+@@ -133,8 +127,8 @@
+ * {@inheritDoc}
+ */
+ public TagletOutput paramTagOutput(ParamTag paramTag, String paramName) {
+- TagletOutput result = new TagletOutputImpl("<DD><CODE>" + paramName + "</CODE>"
+- + " - " + htmlWriter.commentTagsToString(paramTag, null, paramTag.inlineTags(), false) + "</DD>");
++ TagletOutput result = new TagletOutputImpl("<dd><code>" + paramName + "</code>"
++ + " - " + htmlWriter.commentTagsToString(paramTag, null, paramTag.inlineTags(), false) + "</dd>");
+ return result;
+ }
+
+@@ -142,11 +136,11 @@
+ * {@inheritDoc}
+ */
+ public TagletOutput returnTagOutput(Tag returnTag) {
+- TagletOutput result = new TagletOutputImpl(DocletConstants.NL + "<DT>" +
+- "<STRONG>" + htmlWriter.configuration.getText("doclet.Returns") +
+- "</STRONG>" + "</DT>" + "<DD>" +
++ TagletOutput result = new TagletOutputImpl(DocletConstants.NL + "<dt>" +
++ "<span class=\"strong\">" + htmlWriter.configuration.getText("doclet.Returns") +
++ "</span>" + "</dt>" + "<dd>" +
+ htmlWriter.commentTagsToString(returnTag, null, returnTag.inlineTags(),
+- false) + "</DD>");
++ false) + "</dd>");
+ return result;
+ }
+
+@@ -168,7 +162,7 @@
+ htmlWriter instanceof ClassWriterImpl) {
+ //Automatically add link to constant values page for constant fields.
+ result = addSeeHeader(result);
+- result += htmlWriter.getHyperLink(htmlWriter.relativePath +
++ result += htmlWriter.getHyperLinkString(htmlWriter.relativePath +
+ ConfigurationImpl.CONSTANTS_FILE_NAME
+ + "#" + ((ClassWriterImpl) htmlWriter).getClassDoc().qualifiedName()
+ + "." + ((FieldDoc) holder).name(),
+@@ -179,18 +173,19 @@
+ if ((SerializedFormBuilder.serialInclude(holder) &&
+ SerializedFormBuilder.serialInclude(((ClassDoc)holder).containingPackage()))) {
+ result = addSeeHeader(result);
+- result += htmlWriter.getHyperLink(htmlWriter.relativePath + "serialized-form.html",
++ result += htmlWriter.getHyperLinkString(htmlWriter.relativePath + "serialized-form.html",
+ ((ClassDoc)holder).qualifiedName(), htmlWriter.configuration.getText("doclet.Serialized_Form"), false);
+ }
+ }
+- return result.equals("") ? null : new TagletOutputImpl(result + "</DD>");
++ return result.equals("") ? null : new TagletOutputImpl(result + "</dd>");
+ }
+
+ private String addSeeHeader(String result) {
+ if (result != null && result.length() > 0) {
+ return result + ", " + DocletConstants.NL;
+ } else {
+- return "<DT><STRONG>" + htmlWriter.configuration().getText("doclet.See_Also") + "</STRONG></DT><DD>";
++ return "<dt><span class=\"strong\">" +
++ htmlWriter.configuration().getText("doclet.See_Also") + "</span></dt><dd>";
+ }
+ }
+
+@@ -198,15 +193,15 @@
+ * {@inheritDoc}
+ */
+ public TagletOutput simpleTagOutput(Tag[] simpleTags, String header) {
+- String result = "<DT><STRONG>" + header + "</STRONG></DT>" + DocletConstants.NL +
+- " <DD>";
++ String result = "<dt><span class=\"strong\">" + header + "</span></dt>" + DocletConstants.NL +
++ " <dd>";
+ for (int i = 0; i < simpleTags.length; i++) {
+ if (i > 0) {
+ result += ", ";
+ }
+ result += htmlWriter.commentTagsToString(simpleTags[i], null, simpleTags[i].inlineTags(), false);
+ }
+- result += "</DD>" + DocletConstants.NL;
++ result += "</dd>" + DocletConstants.NL;
+ return new TagletOutputImpl(result);
+ }
+
+@@ -214,24 +209,24 @@
+ * {@inheritDoc}
+ */
+ public TagletOutput simpleTagOutput(Tag simpleTag, String header) {
+- return new TagletOutputImpl("<DT><STRONG>" + header + "</STRONG></DT>" + " <DD>"
++ return new TagletOutputImpl("<dt><span class=\"strong\">" + header + "</span></dt>" + " <dd>"
+ + htmlWriter.commentTagsToString(simpleTag, null, simpleTag.inlineTags(), false)
+- + "</DD>" + DocletConstants.NL);
++ + "</dd>" + DocletConstants.NL);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public TagletOutput getThrowsHeader() {
+- return new TagletOutputImpl(DocletConstants.NL + "<DT>" + "<STRONG>" +
+- htmlWriter.configuration().getText("doclet.Throws") + "</STRONG></DT>");
++ return new TagletOutputImpl(DocletConstants.NL + "<dt>" + "<span class=\"strong\">" +
++ htmlWriter.configuration().getText("doclet.Throws") + "</span></dt>");
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public TagletOutput throwsTagOutput(ThrowsTag throwsTag) {
+- String result = DocletConstants.NL + "<DD>";
++ String result = DocletConstants.NL + "<dd>";
+ result += throwsTag.exceptionType() == null ?
+ htmlWriter.codeText(throwsTag.exceptionName()) :
+ htmlWriter.codeText(
+@@ -243,7 +238,7 @@
+ if (text != null && text.toString().length() > 0) {
+ result += " - " + text;
+ }
+- result += "</DD>";
++ result += "</dd>";
+ return new TagletOutputImpl(result);
+ }
+
+@@ -251,9 +246,9 @@
+ * {@inheritDoc}
+ */
+ public TagletOutput throwsTagOutput(Type throwsType) {
+- return new TagletOutputImpl(DocletConstants.NL + "<DD>" +
++ return new TagletOutputImpl(DocletConstants.NL + "<dd>" +
+ htmlWriter.codeText(htmlWriter.getLink(
+- new LinkInfoImpl(LinkInfoImpl.CONTEXT_MEMBER, throwsType))) + "</DD>");
++ new LinkInfoImpl(LinkInfoImpl.CONTEXT_MEMBER, throwsType))) + "</dd>");
+ }
+
+ /**
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/TreeWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/TreeWriter.java
+--- langtools/src/share/classes/com/sun/tools/doclets/formats/html/TreeWriter.java
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/TreeWriter.java
+@@ -29,6 +29,8 @@
+
+ import com.sun.javadoc.*;
+ import com.sun.tools.doclets.internal.toolkit.util.*;
++import com.sun.tools.doclets.formats.html.markup.*;
++import com.sun.tools.doclets.internal.toolkit.*;
+
+ /**
+ * Generate Class Hierarchy page for all the Classes in this run. Use
+@@ -37,6 +39,7 @@
+ * current or the destination directory.
+ *
+ * @author Atul M Dambalkar
++ * @author Bhavesh Patel (Modified)
+ */
+ public class TreeWriter extends AbstractTreeWriter {
+
+@@ -90,86 +93,70 @@
+ }
+
+ /**
+- * Print the interface hierarchy and class hierarchy in the file.
++ * Generate the interface hierarchy and class hierarchy.
+ */
+ public void generateTreeFile() throws IOException {
+- printHtmlHeader(configuration.getText("doclet.Window_Class_Hierarchy"),
+- null, true);
+-
+- printTreeHeader();
+-
+- printPageHeading();
+-
+- printPackageTreeLinks();
+-
+- generateTree(classtree.baseclasses(), "doclet.Class_Hierarchy");
+- generateTree(classtree.baseinterfaces(), "doclet.Interface_Hierarchy");
+- generateTree(classtree.baseAnnotationTypes(), "doclet.Annotation_Type_Hierarchy");
+- generateTree(classtree.baseEnums(), "doclet.Enum_Hierarchy");
+-
+- printTreeFooter();
++ Content body = getTreeHeader();
++ Content headContent = getResource("doclet.Hierarchy_For_All_Packages");
++ Content heading = HtmlTree.HEADING(HtmlConstants.TITLE_HEADING, false,
++ HtmlStyle.title, headContent);
++ Content div = HtmlTree.DIV(HtmlStyle.header, heading);
++ addPackageTreeLinks(div);
++ body.addContent(div);
++ HtmlTree divTree = new HtmlTree(HtmlTag.DIV);
++ divTree.addStyle(HtmlStyle.contentContainer);
++ addTree(classtree.baseclasses(), "doclet.Class_Hierarchy", divTree);
++ addTree(classtree.baseinterfaces(), "doclet.Interface_Hierarchy", divTree);
++ addTree(classtree.baseAnnotationTypes(), "doclet.Annotation_Type_Hierarchy", divTree);
++ addTree(classtree.baseEnums(), "doclet.Enum_Hierarchy", divTree);
++ body.addContent(divTree);
++ addNavLinks(false, body);
++ addBottom(body);
++ printHtmlDocument(null, true, body);
+ }
+
+ /**
+- * Generate the links to all the package tree files.
++ * Add the links to all the package tree files.
++ *
++ * @param contentTree the content tree to which the links will be added
+ */
+- protected void printPackageTreeLinks() {
++ protected void addPackageTreeLinks(Content contentTree) {
+ //Do nothing if only unnamed package is used
+ if (packages.length == 1 && packages[0].name().length() == 0) {
+ return;
+ }
+ if (!classesonly) {
+- dl();
+- dt();
+- strongText("doclet.Package_Hierarchies");
+- dtEnd();
+- dd();
++ Content span = HtmlTree.SPAN(HtmlStyle.strong,
++ getResource("doclet.Package_Hierarchies"));
++ contentTree.addContent(span);
++ HtmlTree ul = new HtmlTree(HtmlTag.UL);
++ ul.addStyle(HtmlStyle.horizontal);
+ for (int i = 0; i < packages.length; i++) {
+ if (packages[i].name().length() == 0) {
+ continue;
+ }
+- String filename = pathString(packages[i], "package-tree.html");
+- printHyperLink(filename, "", packages[i].name());
++ String link = pathString(packages[i], "package-tree.html");
++ Content li = HtmlTree.LI(getHyperLink(
++ link, "", new StringContent(packages[i].name())));
+ if (i < packages.length - 1) {
+- print(", ");
++ li.addContent(", ");
+ }
++ ul.addContent(li);
+ }
+- ddEnd();
+- dlEnd();
+- hr();
++ contentTree.addContent(ul);
+ }
+ }
+
+ /**
+- * Print the top text (from the -top option) and
+- * navigation bar at the top of page.
++ * Get the tree header.
++ *
++ * @return a content tree for the tree header
+ */
+- protected void printTreeHeader() {
+- printTop();
+- navLinks(true);
+- hr();
+- }
+-
+- /**
+- * Print the navigation bar and bottom text (from the -bottom option)
+- * at the bottom of page.
+- */
+- protected void printTreeFooter() {
+- hr();
+- navLinks(false);
+- printBottom();
+- printBodyHtmlEnd();
+- }
+-
+- /**
+- * Print the page title "Hierarchy For All Packages" at the top of the tree
+- * page.
+- */
+- protected void printPageHeading() {
+- center();
+- h2();
+- printText("doclet.Hierarchy_For_All_Packages");
+- h2End();
+- centerEnd();
++ protected Content getTreeHeader() {
++ String title = configuration.getText("doclet.Window_Class_Hierarchy");
++ Content bodyTree = getBody(true, getWindowTitle(title));
++ addTop(bodyTree);
++ addNavLinks(true, bodyTree);
++ return bodyTree;
+ }
+ }
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/markup/Comment.java b/src/share/classes/com/sun/tools/doclets/formats/html/markup/Comment.java
+new file mode 100644
+--- /dev/null
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/Comment.java
+@@ -0,0 +1,90 @@
++/*
++ * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
++ *
++ * This code is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License version 2 only, as
++ * published by the Free Software Foundation. Oracle designates this
++ * particular file as subject to the "Classpath" exception as provided
++ * by Oracle in the LICENSE file that accompanied this code.
++ *
++ * This code is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ * version 2 for more details (a copy is included in the LICENSE file that
++ * accompanied this code).
++ *
++ * You should have received a copy of the GNU General Public License version
++ * 2 along with this work; if not, write to the Free Software Foundation,
++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
++ *
++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
++ * or visit www.oracle.com if you need additional information or have any
++ * questions.
++ */
++
++package com.sun.tools.doclets.formats.html.markup;
++
++import com.sun.tools.doclets.internal.toolkit.Content;
++import com.sun.tools.doclets.internal.toolkit.util.*;
++
++/**
++ * Class for generating a comment for HTML pages of javadoc output.
++ *
++ * @author Bhavesh Patel
++ */
++public class Comment extends Content{
++
++ private String commentText;
++
++ /**
++ * Constructor to construct a Comment object.
++ *
++ * @param comment comment text for the comment
++ */
++ public Comment(String comment) {
++ commentText = nullCheck(comment);
++ }
++
++ /**
++ * This method is not supported by the class.
++ *
++ * @param content content that needs to be added
++ * @throws DocletAbortException this method will always throw a
++ * DocletAbortException because it
++ * is not supported.
++ */
++ public void addContent(Content content) {
++ throw new DocletAbortException();
++ }
++
++ /**
++ * This method is not supported by the class.
++ *
++ * @param stringContent string content that needs to be added
++ * @throws DocletAbortException this method will always throw a
++ * DocletAbortException because it
++ * is not supported.
++ */
++ public void addContent(String stringContent) {
++ throw new DocletAbortException();
++ }
++
++ /**
++ * {@inheritDoc}
++ */
++ public boolean isEmpty() {
++ return commentText.isEmpty();
++ }
++
++ /**
++ * {@inheritDoc}
++ */
++ public void write(StringBuilder contentBuilder) {
++ if (!endsWithNewLine(contentBuilder))
++ contentBuilder.append("\n");
++ contentBuilder.append("<!-- ");
++ contentBuilder.append(commentText);
++ contentBuilder.append(" -->\n");
++ }
++}
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/markup/DocType.java b/src/share/classes/com/sun/tools/doclets/formats/html/markup/DocType.java
+new file mode 100644
+--- /dev/null
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/DocType.java
+@@ -0,0 +1,113 @@
++/*
++ * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
++ *
++ * This code is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License version 2 only, as
++ * published by the Free Software Foundation. Oracle designates this
++ * particular file as subject to the "Classpath" exception as provided
++ * by Oracle in the LICENSE file that accompanied this code.
++ *
++ * This code is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ * version 2 for more details (a copy is included in the LICENSE file that
++ * accompanied this code).
++ *
++ * You should have received a copy of the GNU General Public License version
++ * 2 along with this work; if not, write to the Free Software Foundation,
++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
++ *
++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
++ * or visit www.oracle.com if you need additional information or have any
++ * questions.
++ */
++
++package com.sun.tools.doclets.formats.html.markup;
++
++import com.sun.tools.doclets.internal.toolkit.Content;
++import com.sun.tools.doclets.internal.toolkit.util.*;
++
++/**
++ * Class for generating document type for HTML pages of javadoc output.
++ *
++ * @author Bhavesh Patel
++ */
++public class DocType extends Content{
++
++ private String docType;
++
++ private static DocType transitional;
++
++ private static DocType frameset;
++
++ /**
++ * Constructor to construct a DocType object.
++ *
++ * @param type the doctype to be added
++ */
++ private DocType(String type, String dtd) {
++ docType = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 " + type +
++ "//EN\" \"" + dtd + "\">\n";
++ }
++
++ /**
++ * Construct and return a HTML 4.01 transitional DocType content
++ *
++ * @return a content tree for transitional DocType
++ */
++ public static DocType Transitional() {
++ if (transitional == null)
++ transitional = new DocType("Transitional", "http://www.w3.org/TR/html4/loose.dtd");
++ return transitional;
++ }
++
++ /**
++ * Construct and return a HTML 4.01 frameset DocType content
++ *
++ * @return a content tree for frameset DocType
++ */
++ public static DocType Frameset() {
++ if (frameset == null)
++ frameset = new DocType("Frameset", "http://www.w3.org/TR/html4/frameset.dtd");
++ return frameset;
++ }
++
++ /**
++ * This method is not supported by the class.
++ *
++ * @param content content that needs to be added
++ * @throws DocletAbortException this method will always throw a
++ * DocletAbortException because it
++ * is not supported.
++ */
++ public void addContent(Content content) {
++ throw new DocletAbortException();
++ }
++
++ /**
++ * This method is not supported by the class.
++ *
++ * @param stringContent string content that needs to be added
++ * @throws DocletAbortException this method will always throw a
++ * DocletAbortException because it
++ * is not supported.
++ */
++ public void addContent(String stringContent) {
++ throw new DocletAbortException();
++ }
++
++ /**
++ * {@inheritDoc}
++ */
++ public boolean isEmpty() {
++ return (docType.length() == 0);
++ }
++
++ /**
++ * {@inheritDoc}
++ */
++ public void write(StringBuilder contentBuilder) {
++ contentBuilder.append(docType);
++ }
++}
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlAttr.java b/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlAttr.java
+new file mode 100644
+--- /dev/null
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlAttr.java
+@@ -0,0 +1,73 @@
++/*
++ * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
++ *
++ * This code is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License version 2 only, as
++ * published by the Free Software Foundation. Oracle designates this
++ * particular file as subject to the "Classpath" exception as provided
++ * by Oracle in the LICENSE file that accompanied this code.
++ *
++ * This code is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ * version 2 for more details (a copy is included in the LICENSE file that
++ * accompanied this code).
++ *
++ * You should have received a copy of the GNU General Public License version
++ * 2 along with this work; if not, write to the Free Software Foundation,
++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
++ *
++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
++ * or visit www.oracle.com if you need additional information or have any
++ * questions.
++ */
++
++package com.sun.tools.doclets.formats.html.markup;
++
++/**
++ * Enum representing HTML tag attributes.
++ *
++ * @author Bhavesh Patel
++ */
++public enum HtmlAttr {
++ ALT,
++ BORDER,
++ CELLPADDING,
++ CELLSPACING,
++ CHARSET,
++ CLASS,
++ CLEAR,
++ COLS,
++ CONTENT,
++ HREF,
++ HTTP_EQUIV("http-equiv"),
++ ID,
++ LANG,
++ NAME,
++ ONLOAD,
++ REL,
++ ROWS,
++ SCOPE,
++ SCROLLING,
++ SRC,
++ SUMMARY,
++ TARGET,
++ TITLE,
++ TYPE,
++ WIDTH;
++
++ private final String value;
++
++ HtmlAttr() {
++ this.value = name().toLowerCase();
++ }
++
++ HtmlAttr(String name) {
++ this.value = name;
++ }
++
++ public String toString() {
++ return value;
++ }
++}
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlConstants.java b/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlConstants.java
+new file mode 100644
+--- /dev/null
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlConstants.java
+@@ -0,0 +1,189 @@
++/*
++ * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
++ *
++ * This code is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License version 2 only, as
++ * published by the Free Software Foundation. Oracle designates this
++ * particular file as subject to the "Classpath" exception as provided
++ * by Oracle in the LICENSE file that accompanied this code.
++ *
++ * This code is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ * version 2 for more details (a copy is included in the LICENSE file that
++ * accompanied this code).
++ *
++ * You should have received a copy of the GNU General Public License version
++ * 2 along with this work; if not, write to the Free Software Foundation,
++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
++ *
++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
++ * or visit www.oracle.com if you need additional information or have any
++ * questions.
++ */
++
++package com.sun.tools.doclets.formats.html.markup;
++
++import com.sun.tools.doclets.internal.toolkit.Content;
++
++/**
++ * Stores constants for Html Doclet.
++ *
++ * @author Bhavesh Patel
++ */
++public class HtmlConstants {
++
++ /**
++ * Marker to identify start of top navigation bar.
++ */
++ public static final Content START_OF_TOP_NAVBAR =
++ new Comment("========= START OF TOP NAVBAR =======");
++
++ /**
++ * Marker to identify start of bottom navigation bar.
++ */
++ public static final Content START_OF_BOTTOM_NAVBAR =
++ new Comment("======= START OF BOTTOM NAVBAR ======");
++
++ /**
++ * Marker to identify end of top navigation bar.
++ */
++ public static final Content END_OF_TOP_NAVBAR =
++ new Comment("========= END OF TOP NAVBAR =========");
++
++ /**
++ * Marker to identify end of bottom navigation bar.
++ */
++ public static final Content END_OF_BOTTOM_NAVBAR =
++ new Comment("======== END OF BOTTOM NAVBAR =======");
++
++ /**
++ * Marker to identify start of class data.
++ */
++ public static final Content START_OF_CLASS_DATA =
++ new Comment("======== START OF CLASS DATA ========");
++
++ /**
++ * Marker to identify end of class data.
++ */
++ public static final Content END_OF_CLASS_DATA =
++ new Comment("========= END OF CLASS DATA =========");
++
++ /**
++ * Marker to identify start of nested class summary.
++ */
++ public static final Content START_OF_NESTED_CLASS_SUMMARY =
++ new Comment("======== NESTED CLASS SUMMARY ========");
++
++ /**
++ * Marker to identify start of annotation type optional member summary.
++ */
++ public static final Content START_OF_ANNOTATION_TYPE_OPTIONAL_MEMBER_SUMMARY =
++ new Comment("=========== ANNOTATION TYPE OPTIONAL MEMBER SUMMARY ===========");
++
++ /**
++ * Marker to identify start of annotation type required member summary.
++ */
++ public static final Content START_OF_ANNOTATION_TYPE_REQUIRED_MEMBER_SUMMARY =
++ new Comment("=========== ANNOTATION TYPE REQUIRED MEMBER SUMMARY ===========");
++
++ /**
++ * Marker to identify start of constructor summary.
++ */
++ public static final Content START_OF_CONSTRUCTOR_SUMMARY =
++ new Comment("======== CONSTRUCTOR SUMMARY ========");
++
++ /**
++ * Marker to identify start of enum constants summary.
++ */
++ public static final Content START_OF_ENUM_CONSTANT_SUMMARY =
++ new Comment("=========== ENUM CONSTANT SUMMARY ===========");
++
++ /**
++ * Marker to identify start of field summary.
++ */
++ public static final Content START_OF_FIELD_SUMMARY =
++ new Comment("=========== FIELD SUMMARY ===========");
++
++ /**
++ * Marker to identify start of method summary.
++ */
++ public static final Content START_OF_METHOD_SUMMARY =
++ new Comment("========== METHOD SUMMARY ===========");
++
++ /**
++ * Marker to identify start of annotation type details.
++ */
++ public static final Content START_OF_ANNOTATION_TYPE_DETAILS =
++ new Comment("============ ANNOTATION TYPE MEMBER DETAIL ===========");
++
++ /**
++ * Marker to identify start of method details.
++ */
++ public static final Content START_OF_METHOD_DETAILS =
++ new Comment("============ METHOD DETAIL ==========");
++
++ /**
++ * Marker to identify start of field details.
++ */
++ public static final Content START_OF_FIELD_DETAILS =
++ new Comment("============ FIELD DETAIL ===========");
++
++ /**
++ * Marker to identify start of constructor details.
++ */
++ public static final Content START_OF_CONSTRUCTOR_DETAILS =
++ new Comment("========= CONSTRUCTOR DETAIL ========");
++
++ /**
++ * Marker to identify start of enum constants details.
++ */
++ public static final Content START_OF_ENUM_CONSTANT_DETAILS =
++ new Comment("============ ENUM CONSTANT DETAIL ===========");
++
++ /**
++ * Html tag for the page title heading.
++ */
++ public static final HtmlTag TITLE_HEADING = HtmlTag.H1;
++
++ /**
++ * Html tag for the class page title heading.
++ */
++ public static final HtmlTag CLASS_PAGE_HEADING = HtmlTag.H2;
++
++ /**
++ * Html tag for the content heading.
++ */
++ public static final HtmlTag CONTENT_HEADING = HtmlTag.H2;
++
++ /**
++ * Html tag for the package name heading.
++ */
++ public static final HtmlTag PACKAGE_HEADING = HtmlTag.H2;
++
++ /**
++ * Html tag for the member summary heading.
++ */
++ public static final HtmlTag SUMMARY_HEADING = HtmlTag.H3;
++
++ /**
++ * Html tag for the inherited member summary heading.
++ */
++ public static final HtmlTag INHERITED_SUMMARY_HEADING = HtmlTag.H3;
++
++ /**
++ * Html tag for the member details heading.
++ */
++ public static final HtmlTag DETAILS_HEADING = HtmlTag.H3;
++
++ /**
++ * Html tag for the serialized member heading.
++ */
++ public static final HtmlTag SERIALIZED_MEMBER_HEADING = HtmlTag.H3;
++
++ /**
++ * Html tag for the member heading.
++ */
++ public static final HtmlTag MEMBER_HEADING = HtmlTag.H4;
++}
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlDocWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlDocWriter.java
+--- langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlDocWriter.java
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlDocWriter.java
+@@ -87,7 +87,7 @@
+ */
+ public void printHyperLink(String link, String where,
+ String label, boolean strong) {
+- print(getHyperLink(link, where, label, strong, "", "", ""));
++ print(getHyperLinkString(link, where, label, strong, "", "", ""));
+ }
+
+ /**
+@@ -115,7 +115,7 @@
+ public void printHyperLink(String link, String where,
+ String label, boolean strong,
+ String stylename) {
+- print(getHyperLink(link, where, label, strong, stylename, "", ""));
++ print(getHyperLinkString(link, where, label, strong, stylename, "", ""));
+ }
+
+ /**
+@@ -128,9 +128,9 @@
+ * @param strong Boolean that sets label to strong.
+ * @return String Hyper Link.
+ */
+- public String getHyperLink(String link, String where,
++ public String getHyperLinkString(String link, String where,
+ String label, boolean strong) {
+- return getHyperLink(link, where, label, strong, "", "", "");
++ return getHyperLinkString(link, where, label, strong, "", "", "");
+ }
+
+ /**
+@@ -144,10 +144,24 @@
+ * @param stylename String style of text defined in style sheet.
+ * @return String Hyper Link.
+ */
+- public String getHyperLink(String link, String where,
++ public String getHyperLinkString(String link, String where,
+ String label, boolean strong,
+ String stylename) {
+- return getHyperLink(link, where, label, strong, stylename, "", "");
++ return getHyperLinkString(link, where, label, strong, stylename, "", "");
++ }
++
++ /**
++ * Get Html Hyper Link string.
++ *
++ * @param link String name of the file.
++ * @param where Position of the link in the file. Character '#' is not
++ * needed.
++ * @param label Tag for the link.
++ * @return a content tree for the hyper link
++ */
++ public Content getHyperLink(String link, String where,
++ Content label) {
++ return getHyperLink(link, where, label, "", "");
+ }
+
+ /**
+@@ -163,11 +177,11 @@
+ * @param target Target frame.
+ * @return String Hyper Link.
+ */
+- public String getHyperLink(String link, String where,
++ public String getHyperLinkString(String link, String where,
+ String label, boolean strong,
+ String stylename, String title, String target) {
+ StringBuffer retlink = new StringBuffer();
+- retlink.append("<A HREF=\"");
++ retlink.append("<a href=\"");
+ retlink.append(link);
+ if (where != null && where.length() != 0) {
+ retlink.append("#");
+@@ -187,27 +201,54 @@
+ retlink.append("\">");
+ }
+ if (strong) {
+- retlink.append("<STRONG>");
++ retlink.append("<span class=\"strong\">");
+ }
+ retlink.append(label);
+ if (strong) {
+- retlink.append("</STRONG>");
++ retlink.append("</span>");
+ }
+ if (stylename != null && stylename.length() != 0) {
+ retlink.append("</FONT>");
+ }
+- retlink.append("</A>");
++ retlink.append("</a>");
+ return retlink.toString();
+ }
+
+ /**
+- * Print link without positioning in the file.
++ * Get Html Hyper Link.
+ *
+ * @param link String name of the file.
++ * @param where Position of the link in the file. Character '#' is not
++ * needed.
+ * @param label Tag for the link.
++ * @param title String that describes the link's content for accessibility.
++ * @param target Target frame.
++ * @return a content tree for the hyper link.
+ */
+- public void printHyperLink(String link, String label) {
+- print(getHyperLink(link, "", label, false));
++ public Content getHyperLink(String link, String where,
++ Content label, String title, String target) {
++ if (where != null && where.length() != 0) {
++ link += "#" + where;
++ }
++ HtmlTree anchor = HtmlTree.A(link, label);
++ if (title != null && title.length() != 0) {
++ anchor.addAttr(HtmlAttr.TITLE, title);
++ }
++ if (target != null && target.length() != 0) {
++ anchor.addAttr(HtmlAttr.TARGET, target);
++ }
++ return anchor;
++ }
++
++ /**
++ * Get a hyperlink to a file.
++ *
++ * @param link String name of the file
++ * @param label Label for the link
++ * @return a content for the hyperlink to the file
++ */
++ public Content getHyperLink(String link, Content label) {
++ return getHyperLink(link, "", label);
+ }
+
+ /**
+@@ -217,8 +258,8 @@
+ * @param label Tag for the link.
+ * @return Strign Hyper link.
+ */
+- public String getHyperLink(String link, String label) {
+- return getHyperLink(link, "", label, false);
++ public String getHyperLinkString(String link, String label) {
++ return getHyperLinkString(link, "", label, false);
+ }
+
+ /**
+@@ -273,54 +314,32 @@
+ * Print the frameset version of the Html file header.
+ * Called only when generating an HTML frameset file.
+ *
+- * @param title Title of this HTML document.
++ * @param title Title of this HTML document
++ * @param noTimeStamp If true, don't print time stamp in header
++ * @param frameset the frameset to be added to the HTML document
+ */
+- public void printFramesetHeader(String title) {
+- printFramesetHeader(title, false);
+- }
+-
+- /**
+- * Print the frameset version of the Html file header.
+- * Called only when generating an HTML frameset file.
+- *
+- * @param title Title of this HTML document.
+- * @param noTimeStamp If true, don't print time stamp in header.
+- */
+- public void printFramesetHeader(String title, boolean noTimeStamp) {
+- println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 " +
+- "Frameset//EN\" " +
+- "\"http://www.w3.org/TR/html4/frameset.dtd\">");
+- println("<!--NewPage-->");
+- html();
+- head();
++ public void printFramesetDocument(String title, boolean noTimeStamp,
++ Content frameset) {
++ Content htmlDocType = DocType.Frameset();
++ Content htmlComment = new Comment(configuration.getText("doclet.New_Page"));
++ Content head = new HtmlTree(HtmlTag.HEAD);
+ if (! noTimeStamp) {
+- print("<!-- Generated by javadoc on ");
+- print(today());
+- println("-->");
++ Content headComment = new Comment("Generated by javadoc on " + today());
++ head.addContent(headComment);
+ }
+ if (configuration.charset.length() > 0) {
+- println("<META http-equiv=\"Content-Type\" content=\"text/html; "
+- + "charset=" + configuration.charset + "\">");
++ Content meta = HtmlTree.META("Content-Type", "text/html",
++ configuration.charset);
++ head.addContent(meta);
+ }
+- title();
+- println(title);
+- titleEnd();
+- //Script to set the classFrame if necessary.
+- script();
+- println(" targetPage = \"\" + window.location.search;");
+- println(" if (targetPage != \"\" && targetPage != \"undefined\")");
+- println(" targetPage = targetPage.substring(1);");
+- println(" if (targetPage.indexOf(\":\") != -1)");
+- println(" targetPage = \"undefined\";");
+-
+- println(" function loadFrames() {");
+- println(" if (targetPage != \"\" && targetPage != \"undefined\")");
+- println(" top.classFrame.location = top.targetPage;");
+- println(" }");
+- scriptEnd();
+- noScript();
+- noScriptEnd();
+- headEnd();
++ Content windowTitle = HtmlTree.TITLE(new StringContent(title));
++ head.addContent(windowTitle);
++ head.addContent(getFramesetJavaScript());
++ Content htmlTree = HtmlTree.HTML(configuration.getLocale().getLanguage(),
++ head, frameset);
++ Content htmlDocument = new HtmlDocument(htmlDocType,
++ htmlComment, htmlTree);
++ print(htmlDocument.toString());
+ }
+
+ /**
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlDocument.java b/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlDocument.java
+new file mode 100644
+--- /dev/null
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlDocument.java
+@@ -0,0 +1,103 @@
++/*
++ * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
++ *
++ * This code is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License version 2 only, as
++ * published by the Free Software Foundation. Oracle designates this
++ * particular file as subject to the "Classpath" exception as provided
++ * by Oracle in the LICENSE file that accompanied this code.
++ *
++ * This code is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ * version 2 for more details (a copy is included in the LICENSE file that
++ * accompanied this code).
++ *
++ * You should have received a copy of the GNU General Public License version
++ * 2 along with this work; if not, write to the Free Software Foundation,
++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
++ *
++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
++ * or visit www.oracle.com if you need additional information or have any
++ * questions.
++ */
++
++package com.sun.tools.doclets.formats.html.markup;
++
++import java.util.*;
++import com.sun.tools.doclets.internal.toolkit.Content;
++import com.sun.tools.doclets.internal.toolkit.util.*;
++
++/**
++ * Class for generating an HTML document for javadoc output.
++ *
++ * @author Bhavesh Patel
++ */
++public class HtmlDocument extends Content {
++
++ private List<Content> docContent = Collections.<Content>emptyList();
++
++ /**
++ * Constructor to construct an HTML document.
++ *
++ * @param docType document type for the HTML document
++ * @param docComment comment for the document
++ * @param htmlTree HTML tree of the document
++ */
++ public HtmlDocument(Content docType, Content docComment, Content htmlTree) {
++ docContent = new ArrayList<Content>();
++ addContent(nullCheck(docType));
++ addContent(nullCheck(docComment));
++ addContent(nullCheck(htmlTree));
++ }
++
++ /**
++ * Constructor to construct an HTML document.
++ *
++ * @param docType document type for the HTML document
++ * @param htmlTree HTML tree of the document
++ */
++ public HtmlDocument(Content docType, Content htmlTree) {
++ docContent = new ArrayList<Content>();
++ addContent(nullCheck(docType));
++ addContent(nullCheck(htmlTree));
++ }
++
++ /**
++ * Adds content for the HTML document.
++ *
++ * @param htmlContent html content to be added
++ */
++ public void addContent(Content htmlContent) {
++ if (htmlContent.isValid())
++ docContent.add(htmlContent);
++ }
++
++ /**
++ * This method is not supported by the class.
++ *
++ * @param stringContent string content that needs to be added
++ * @throws DocletAbortException this method will always throw a
++ * DocletAbortException because it
++ * is not supported.
++ */
++ public void addContent(String stringContent) {
++ throw new DocletAbortException();
++ }
++
++ /**
++ * {@inheritDoc}
++ */
++ public boolean isEmpty() {
++ return (docContent.isEmpty());
++ }
++
++ /**
++ * {@inheritDoc}
++ */
++ public void write(StringBuilder contentBuilder) {
++ for (Content c : docContent)
++ c.write(contentBuilder);
++ }
++}
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlStyle.java b/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlStyle.java
+new file mode 100644
+--- /dev/null
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlStyle.java
+@@ -0,0 +1,73 @@
++/*
++ * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
++ *
++ * This code is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License version 2 only, as
++ * published by the Free Software Foundation. Oracle designates this
++ * particular file as subject to the "Classpath" exception as provided
++ * by Oracle in the LICENSE file that accompanied this code.
++ *
++ * This code is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ * version 2 for more details (a copy is included in the LICENSE file that
++ * accompanied this code).
++ *
++ * You should have received a copy of the GNU General Public License version
++ * 2 along with this work; if not, write to the Free Software Foundation,
++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
++ *
++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
++ * or visit www.oracle.com if you need additional information or have any
++ * questions.
++ */
++
++package com.sun.tools.doclets.formats.html.markup;
++
++/**
++ * Enum representing HTML styles. The name map to values in the CSS file.
++ *
++ * @author Bhavesh Patel
++ */
++public enum HtmlStyle {
++ aboutLanguage,
++ altColor,
++ bar,
++ block,
++ blockList,
++ blockListLast,
++ bottomNav,
++ classUseContainer,
++ colFirst,
++ colLast,
++ colOne,
++ constantValuesContainer,
++ contentContainer,
++ description,
++ details,
++ header,
++ horizontal,
++ footer,
++ indexContainer,
++ indexHeader,
++ inheritance,
++ legalCopy,
++ nameValue,
++ navBarCell1Rev,
++ navList,
++ overviewSummary,
++ packageSummary,
++ rowColor,
++ serializedFormContainer,
++ sourceContainer,
++ sourceLineNo,
++ strong,
++ subNav,
++ subNavList,
++ subTitle,
++ summary,
++ tabEnd,
++ title,
++ topNav;
++}
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlTag.java b/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlTag.java
+new file mode 100644
+--- /dev/null
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlTag.java
+@@ -0,0 +1,126 @@
++/*
++ * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
++ *
++ * This code is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License version 2 only, as
++ * published by the Free Software Foundation. Oracle designates this
++ * particular file as subject to the "Classpath" exception as provided
++ * by Oracle in the LICENSE file that accompanied this code.
++ *
++ * This code is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ * version 2 for more details (a copy is included in the LICENSE file that
++ * accompanied this code).
++ *
++ * You should have received a copy of the GNU General Public License version
++ * 2 along with this work; if not, write to the Free Software Foundation,
++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
++ *
++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
++ * or visit www.oracle.com if you need additional information or have any
++ * questions.
++ */
++
++package com.sun.tools.doclets.formats.html.markup;
++
++/**
++ * Enum representing HTML tags.
++ *
++ * @author Bhavesh Patel
++ */
++public enum HtmlTag {
++ A(BlockType.INLINE, EndTag.END),
++ BLOCKQUOTE,
++ BODY(BlockType.OTHER, EndTag.END),
++ BR(BlockType.INLINE, EndTag.NOEND),
++ CAPTION,
++ CENTER,
++ CODE(BlockType.INLINE, EndTag.END),
++ DD,
++ DIV,
++ DL,
++ DT,
++ EM(BlockType.INLINE, EndTag.END),
++ FONT(BlockType.INLINE, EndTag.END),
++ FRAME(BlockType.OTHER, EndTag.NOEND),
++ FRAMESET(BlockType.OTHER, EndTag.END),
++ H1,
++ H2,
++ H3,
++ H4,
++ H5,
++ H6,
++ HEAD(BlockType.OTHER, EndTag.END),
++ HR(BlockType.BLOCK, EndTag.NOEND),
++ HTML(BlockType.OTHER, EndTag.END),
++ I(BlockType.INLINE, EndTag.END),
++ IMG(BlockType.INLINE, EndTag.NOEND),
++ LI,
++ LINK(BlockType.OTHER, EndTag.NOEND),
++ MENU,
++ META(BlockType.OTHER, EndTag.NOEND),
++ NOFRAMES(BlockType.OTHER, EndTag.END),
++ NOSCRIPT(BlockType.OTHER, EndTag.END),
++ OL,
++ P,
++ PRE,
++ SCRIPT(BlockType.OTHER, EndTag.END),
++ SMALL(BlockType.INLINE, EndTag.END),
++ SPAN(BlockType.INLINE, EndTag.END),
++ STRONG(BlockType.INLINE, EndTag.END),
++ TABLE,
++ TBODY,
++ TD,
++ TH,
++ TITLE(BlockType.OTHER, EndTag.END),
++ TR,
++ TT(BlockType.INLINE, EndTag.END),
++ UL;
++
++ protected final BlockType blockType;
++ protected final EndTag endTag;
++ private final String value;
++
++ /**
++ * Enum representing the type of HTML element.
++ */
++ protected static enum BlockType {
++ BLOCK,
++ INLINE,
++ OTHER;
++ }
++
++ /**
++ * Enum representing HTML end tag requirement.
++ */
++ protected static enum EndTag {
++ END,
++ NOEND;
++ }
++
++ HtmlTag() {
++ this(BlockType.BLOCK, EndTag.END);
++ }
++
++ HtmlTag(BlockType blockType, EndTag endTag ) {
++ this.blockType = blockType;
++ this.endTag = endTag;
++ this.value = name().toLowerCase();
++ }
++
++ /**
++ * Returns true if the end tag is required. This is specific to the standard
++ * doclet and does not exactly resemble the W3C specifications.
++ *
++ * @return true if end tag needs to be displayed else return false
++ */
++ public boolean endTagRequired() {
++ return (endTag == EndTag.END);
++ }
++
++ public String toString() {
++ return value;
++ }
++}
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlTree.java b/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlTree.java
+new file mode 100644
+--- /dev/null
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlTree.java
+@@ -0,0 +1,777 @@
++/*
++ * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
++ *
++ * This code is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License version 2 only, as
++ * published by the Free Software Foundation. Oracle designates this
++ * particular file as subject to the "Classpath" exception as provided
++ * by Oracle in the LICENSE file that accompanied this code.
++ *
++ * This code is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ * version 2 for more details (a copy is included in the LICENSE file that
++ * accompanied this code).
++ *
++ * You should have received a copy of the GNU General Public License version
++ * 2 along with this work; if not, write to the Free Software Foundation,
++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
++ *
++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
++ * or visit www.oracle.com if you need additional information or have any
++ * questions.
++ */
++
++package com.sun.tools.doclets.formats.html.markup;
++
++import java.util.*;
++import com.sun.tools.doclets.internal.toolkit.Content;
++import com.sun.tools.doclets.internal.toolkit.util.*;
++
++/**
++ * Class for generating HTML tree for javadoc output.
++ *
++ * @author Bhavesh Patel
++ */
++public class HtmlTree extends Content {
++
++ private HtmlTag htmlTag;
++ private Map<HtmlAttr,String> attrs = Collections.<HtmlAttr,String>emptyMap();
++ private List<Content> content = Collections.<Content>emptyList();
++ public static final Content EMPTY = new StringContent("");
++
++ /**
++ * Constructor to construct HtmlTree object.
++ *
++ * @param tag HTML tag for the HtmlTree object
++ */
++ public HtmlTree(HtmlTag tag) {
++ htmlTag = nullCheck(tag);
++ }
++
++ /**
++ * Constructor to construct HtmlTree object.
++ *
++ * @param tag HTML tag for the HtmlTree object
++ * @param contents contents to be added to the tree
++ */
++ public HtmlTree(HtmlTag tag, Content... contents) {
++ this(tag);
++ for (Content content: contents)
++ addContent(content);
++ }
++
++ /**
++ * Adds an attribute for the HTML tag.
++ *
++ * @param attrName name of the attribute
++ * @param attrValue value of the attribute
++ */
++ public void addAttr(HtmlAttr attrName, String attrValue) {
++ if (attrs.isEmpty())
++ attrs = new LinkedHashMap<HtmlAttr,String>();
++ attrs.put(nullCheck(attrName), nullCheck(attrValue));
++ }
++
++ /**
++ * Adds a style for the HTML tag.
++ *
++ * @param style style to be added
++ */
++ public void addStyle(HtmlStyle style) {
++ addAttr(HtmlAttr.CLASS, style.toString());
++ }
++
++ /**
++ * Adds content for the HTML tag.
++ *
++ * @param tagContent tag content to be added
++ */
++ public void addContent(Content tagContent) {
++ if (tagContent == HtmlTree.EMPTY || tagContent.isValid()) {
++ if (content.isEmpty())
++ content = new ArrayList<Content>();
++ content.add(tagContent);
++ }
++ }
++
++ /**
++ * This method adds a string content to the htmltree. If the last content member
++ * added is a StringContent, append the string to that StringContent or else
++ * create a new StringContent and add it to the html tree.
++ *
++ * @param stringContent string content that needs to be added
++ */
++ public void addContent(String stringContent) {
++ if (!content.isEmpty()) {
++ Content lastContent = content.get(content.size() - 1);
++ if (lastContent instanceof StringContent)
++ lastContent.addContent(stringContent);
++ else
++ addContent(new StringContent(stringContent));
++ }
++ else
++ addContent(new StringContent(stringContent));
++ }
++
++ /**
++ * Generates an HTML anchor tag.
++ *
++ * @param ref reference url for the anchor tag
++ * @param body content for the anchor tag
++ * @return an HtmlTree object
++ */
++ public static HtmlTree A(String ref, Content body) {
++ HtmlTree htmltree = new HtmlTree(HtmlTag.A, nullCheck(body));
++ htmltree.addAttr(HtmlAttr.HREF, nullCheck(ref));
++ return htmltree;
++ }
++
++ /**
++ * Generates an HTML anchor tag with name attribute and content.
++ *
++ * @param name name for the anchor tag
++ * @param body content for the anchor tag
++ * @return an HtmlTree object
++ */
++ public static HtmlTree A_NAME(String name, Content body) {
++ HtmlTree htmltree = HtmlTree.A_NAME(name);
++ htmltree.addContent(nullCheck(body));
++ return htmltree;
++ }
++
++ /**
++ * Generates an HTML anchor tag with name attribute.
++ *
++ * @param name name for the anchor tag
++ * @return an HtmlTree object
++ */
++ public static HtmlTree A_NAME(String name) {
++ HtmlTree htmltree = new HtmlTree(HtmlTag.A);
++ htmltree.addAttr(HtmlAttr.NAME, nullCheck(name));
++ return htmltree;
++ }
++
++ /**
++ * Generates a CAPTION tag with some content.
++ *
++ * @param body content for the tag
++ * @return an HtmlTree object for the CAPTION tag
++ */
++ public static HtmlTree CAPTION(Content body) {
++ HtmlTree htmltree = new HtmlTree(HtmlTag.CAPTION, nullCheck(body));
++ return htmltree;
++ }
++
++ /**
++ * Generates a CODE tag with some content.
++ *
++ * @param body content for the tag
++ * @return an HtmlTree object for the CODE tag
++ */
++ public static HtmlTree CODE(Content body) {
++ HtmlTree htmltree = new HtmlTree(HtmlTag.CODE, nullCheck(body));
++ return htmltree;
++ }
++
++ /**
++ * Generates a DD tag with some content.
++ *
++ * @param body content for the tag
++ * @return an HtmlTree object for the DD tag
++ */
++ public static HtmlTree DD(Content body) {
++ HtmlTree htmltree = new HtmlTree(HtmlTag.DD, nullCheck(body));
++ return htmltree;
++ }
++
++ /**
++ * Generates a DL tag with some content.
++ *
++ * @param body content for the tag
++ * @return an HtmlTree object for the DL tag
++ */
++ public static HtmlTree DL(Content body) {
++ HtmlTree htmltree = new HtmlTree(HtmlTag.DL, nullCheck(body));
++ return htmltree;
++ }
++
++ /**
++ * Generates a DIV tag with the style class attributes. It also encloses
++ * a content.
++ *
++ * @param styleClass stylesheet class for the tag
++ * @param body content for the tag
++ * @return an HtmlTree object for the DIV tag
++ */
++ public static HtmlTree DIV(HtmlStyle styleClass, Content body) {
++ HtmlTree htmltree = new HtmlTree(HtmlTag.DIV, nullCheck(body));
++ if (styleClass != null)
++ htmltree.addStyle(styleClass);
++ return htmltree;
++ }
++
++ /**
++ * Generates a DIV tag with some content.
++ *
++ * @param body content for the tag
++ * @return an HtmlTree object for the DIV tag
++ */
++ public static HtmlTree DIV(Content body) {
++ return DIV(null, body);
++ }
++
++ /**
++ * Generates a DT tag with some content.
++ *
++ * @param body content for the tag
++ * @return an HtmlTree object for the DT tag
++ */
++ public static HtmlTree DT(Content body) {
++ HtmlTree htmltree = new HtmlTree(HtmlTag.DT, nullCheck(body));
++ return htmltree;
++ }
++
++ /**
++ * Generates a EM tag with some content.
++ *
++ * @param body content to be added to the tag
++ * @return an HtmlTree object for the EM tag
++ */
++ public static HtmlTree EM(Content body) {
++ HtmlTree htmltree = new HtmlTree(HtmlTag.EM, nullCheck(body));
++ return htmltree;
++ }
++
++ /**
++ * Generates a FRAME tag.
++ *
++ * @param src the url of the document to be shown in the frame
++ * @param name specifies the name of the frame
++ * @param title the title for the frame
++ * @param scrolling specifies whether to display scrollbars in the frame
++ * @return an HtmlTree object for the FRAME tag
++ */
++ public static HtmlTree FRAME(String src, String name, String title, String scrolling) {
++ HtmlTree htmltree = new HtmlTree(HtmlTag.FRAME);
++ htmltree.addAttr(HtmlAttr.SRC, nullCheck(src));
++ htmltree.addAttr(HtmlAttr.NAME, nullCheck(name));
++ htmltree.addAttr(HtmlAttr.TITLE, nullCheck(title));
++ if (scrolling != null)
++ htmltree.addAttr(HtmlAttr.SCROLLING, scrolling);
++ return htmltree;
++ }
++
++ /**
++ * Generates a Frame tag.
++ *
++ * @param src the url of the document to be shown in the frame
++ * @param name specifies the name of the frame
++ * @param title the title for the frame
++ * @return an HtmlTree object for the SPAN tag
++ */
++ public static HtmlTree FRAME(String src, String name, String title) {
++ return FRAME(src, name, title, null);
++ }
++
++ /**
++ * Generates a FRAMESET tag.
++ *
++ * @param cols the size of columns in the frameset
++ * @param rows the size of rows in the frameset
++ * @param title the title for the frameset
++ * @param onload the script to run when the document loads
++ * @return an HtmlTree object for the FRAMESET tag
++ */
++ public static HtmlTree FRAMESET(String cols, String rows, String title, String onload) {
++ HtmlTree htmltree = new HtmlTree(HtmlTag.FRAMESET);
++ if (cols != null)
++ htmltree.addAttr(HtmlAttr.COLS, cols);
++ if (rows != null)
++ htmltree.addAttr(HtmlAttr.ROWS, rows);
++ htmltree.addAttr(HtmlAttr.TITLE, nullCheck(title));
++ htmltree.addAttr(HtmlAttr.ONLOAD, nullCheck(onload));
++ return htmltree;
++ }
++
++ /**
++ * Generates a heading tag (h1 to h6) with the title and style class attributes. It also encloses
++ * a content.
++ *
++ * @param headingTag the heading tag to be generated
++ * @param printTitle true if title for the tag needs to be printed else false
++ * @param styleClass stylesheet class for the tag
++ * @param body content for the tag
++ * @return an HtmlTree object for the tag
++ */
++ public static HtmlTree HEADING(HtmlTag headingTag, boolean printTitle,
++ HtmlStyle styleClass, Content body) {
++ HtmlTree htmltree = new HtmlTree(headingTag, nullCheck(body));
++ if (printTitle)
++ htmltree.addAttr(HtmlAttr.TITLE, Util.stripHtml(body.toString()));
++ if (styleClass != null)
++ htmltree.addStyle(styleClass);
++ return htmltree;
++ }
++
++ /**
++ * Generates a heading tag (h1 to h6) with style class attribute. It also encloses
++ * a content.
++ *
++ * @param headingTag the heading tag to be generated
++ * @param styleClass stylesheet class for the tag
++ * @param body content for the tag
++ * @return an HtmlTree object for the tag
++ */
++ public static HtmlTree HEADING(HtmlTag headingTag, HtmlStyle styleClass, Content body) {
++ return HEADING(headingTag, false, styleClass, body);
++ }
++
++ /**
++ * Generates a heading tag (h1 to h6) with the title attribute. It also encloses
++ * a content.
++ *
++ * @param headingTag the heading tag to be generated
++ * @param printTitle true if the title for the tag needs to be printed else false
++ * @param body content for the tag
++ * @return an HtmlTree object for the tag
++ */
++ public static HtmlTree HEADING(HtmlTag headingTag, boolean printTitle, Content body) {
++ return HEADING(headingTag, printTitle, null, body);
++ }
++
++ /**
++ * Generates a heading tag (h1 to h6) with some content.
++ *
++ * @param headingTag the heading tag to be generated
++ * @param body content for the tag
++ * @return an HtmlTree object for the tag
++ */
++ public static HtmlTree HEADING(HtmlTag headingTag, Content body) {
++ return HEADING(headingTag, false, null, body);
++ }
++
++ /**
++ * Generates an HTML tag with lang attribute. It also adds head and body
++ * content to the HTML tree.
++ *
++ * @param lang language for the HTML document
++ * @param head head for the HTML tag
++ * @param body body for the HTML tag
++ * @return an HtmlTree object for the HTML tag
++ */
++ public static HtmlTree HTML(String lang, Content head, Content body) {
++ HtmlTree htmltree = new HtmlTree(HtmlTag.HTML, nullCheck(head), nullCheck(body));
++ htmltree.addAttr(HtmlAttr.LANG, nullCheck(lang));
++ return htmltree;
++ }
++
++ /**
++ * Generates a I tag with some content.
++ *
++ * @param body content for the tag
++ * @return an HtmlTree object for the I tag
++ */
++ public static HtmlTree I(Content body) {
++ HtmlTree htmltree = new HtmlTree(HtmlTag.I, nullCheck(body));
++ return htmltree;
++ }
++
++ /**
++ * Generates a LI tag with some content.
++ *
++ * @param body content for the tag
++ * @return an HtmlTree object for the LI tag
++ */
++ public static HtmlTree LI(Content body) {
++ return LI(null, body);
++ }
++
++ /**
++ * Generates a LI tag with some content.
++ *
++ * @param styleClass style for the tag
++ * @param body content for the tag
++ * @return an HtmlTree object for the LI tag
++ */
++ public static HtmlTree LI(HtmlStyle styleClass, Content body) {
++ HtmlTree htmltree = new HtmlTree(HtmlTag.LI, nullCheck(body));
++ if (styleClass != null)
++ htmltree.addStyle(styleClass);
++ return htmltree;
++ }
++
++ /**
++ * Generates a LINK tag with the rel, type, href and title attributes.
++ *
++ * @param rel relevance of the link
++ * @param type type of link
++ * @param href the path for the link
++ * @param title title for the link
++ * @return an HtmlTree object for the LINK tag
++ */
++ public static HtmlTree LINK(String rel, String type, String href, String title) {
++ HtmlTree htmltree = new HtmlTree(HtmlTag.LINK);
++ htmltree.addAttr(HtmlAttr.REL, nullCheck(rel));
++ htmltree.addAttr(HtmlAttr.TYPE, nullCheck(type));
++ htmltree.addAttr(HtmlAttr.HREF, nullCheck(href));
++ htmltree.addAttr(HtmlAttr.TITLE, nullCheck(title));
++ return htmltree;
++ }
++
++ /**
++ * Generates a META tag with the http-equiv, content and charset attributes.
++ *
++ * @param http-equiv http equiv attribute for the META tag
++ * @param content type of content
++ * @param charset character set used
++ * @return an HtmlTree object for the META tag
++ */
++ public static HtmlTree META(String httpEquiv, String content, String charSet) {
++ HtmlTree htmltree = new HtmlTree(HtmlTag.META);
++ htmltree.addAttr(HtmlAttr.HTTP_EQUIV, nullCheck(httpEquiv));
++ htmltree.addAttr(HtmlAttr.CONTENT, nullCheck(content));
++ htmltree.addAttr(HtmlAttr.CHARSET, nullCheck(charSet));
++ return htmltree;
++ }
++
++ /**
++ * Generates a META tag with the name and content attributes.
++ *
++ * @param name name attribute
++ * @param content type of content
++ * @return an HtmlTree object for the META tag
++ */
++ public static HtmlTree META(String name, String content) {
++ HtmlTree htmltree = new HtmlTree(HtmlTag.META);
++ htmltree.addAttr(HtmlAttr.NAME, nullCheck(name));
++ htmltree.addAttr(HtmlAttr.CONTENT, nullCheck(content));
++ return htmltree;
++ }
++
++ /**
++ * Generates a NOSCRIPT tag with some content.
++ *
++ * @param body content of the noscript tag
++ * @return an HtmlTree object for the NOSCRIPT tag
++ */
++ public static HtmlTree NOSCRIPT(Content body) {
++ HtmlTree htmltree = new HtmlTree(HtmlTag.NOSCRIPT, nullCheck(body));
++ return htmltree;
++ }
++
++ /**
++ * Generates a P tag with some content.
++ *
++ * @param body content of the Paragraph tag
++ * @return an HtmlTree object for the P tag
++ */
++ public static HtmlTree P(Content body) {
++ return P(null, body);
++ }
++
++ /**
++ * Generates a P tag with some content.
++ *
++ * @param styleClass style of the Paragraph tag
++ * @param body content of the Paragraph tag
++ * @return an HtmlTree object for the P tag
++ */
++ public static HtmlTree P(HtmlStyle styleClass, Content body) {
++ HtmlTree htmltree = new HtmlTree(HtmlTag.P, nullCheck(body));
++ if (styleClass != null)
++ htmltree.addStyle(styleClass);
++ return htmltree;
++ }
++
++ /**
++ * Generates a SMALL tag with some content.
++ *
++ * @param body content for the tag
++ * @return an HtmlTree object for the SMALL tag
++ */
++ public static HtmlTree SMALL(Content body) {
++ HtmlTree htmltree = new HtmlTree(HtmlTag.SMALL, nullCheck(body));
++ return htmltree;
++ }
++
++ /**
++ * Generates a STRONG tag with some content.
++ *
++ * @param body content for the tag
++ * @return an HtmlTree object for the STRONG tag
++ */
++ public static HtmlTree STRONG(Content body) {
++ HtmlTree htmltree = new HtmlTree(HtmlTag.STRONG, nullCheck(body));
++ return htmltree;
++ }
++
++ /**
++ * Generates a SPAN tag with some content.
++ *
++ * @param body content for the tag
++ * @return an HtmlTree object for the SPAN tag
++ */
++ public static HtmlTree SPAN(Content body) {
++ return SPAN(null, body);
++ }
++
++ /**
++ * Generates a SPAN tag with style class attribute and some content.
++ *
++ * @param styleClass style class for the tag
++ * @param body content for the tag
++ * @return an HtmlTree object for the SPAN tag
++ */
++ public static HtmlTree SPAN(HtmlStyle styleClass, Content body) {
++ HtmlTree htmltree = new HtmlTree(HtmlTag.SPAN, nullCheck(body));
++ if (styleClass != null)
++ htmltree.addStyle(styleClass);
++ return htmltree;
++ }
++
++ /**
++ * Generates a Table tag with border, width and summary attributes and
++ * some content.
++ *
++ * @param border border for the table
++ * @param width width of the table
++ * @param summary summary for the table
++ * @param body content for the table
++ * @return an HtmlTree object for the TABLE tag
++ */
++ public static HtmlTree TABLE(int border, int width, String summary,
++ Content body) {
++ HtmlTree htmltree = new HtmlTree(HtmlTag.TABLE, nullCheck(body));
++ htmltree.addAttr(HtmlAttr.BORDER, Integer.toString(border));
++ htmltree.addAttr(HtmlAttr.WIDTH, Integer.toString(width));
++ htmltree.addAttr(HtmlAttr.SUMMARY, nullCheck(summary));
++ return htmltree;
++ }
++
++ /**
++ * Generates a Table tag with style class, border, cell padding,
++ * cellspacing and summary attributes and some content.
++ *
++ * @param styleClass style of the table
++ * @param border border for the table
++ * @param cellPadding cell padding for the table
++ * @param cellSpacing cell spacing for the table
++ * @param summary summary for the table
++ * @param body content for the table
++ * @return an HtmlTree object for the TABLE tag
++ */
++ public static HtmlTree TABLE(HtmlStyle styleClass, int border, int cellPadding,
++ int cellSpacing, String summary, Content body) {
++ HtmlTree htmltree = new HtmlTree(HtmlTag.TABLE, nullCheck(body));
++ if (styleClass != null)
++ htmltree.addStyle(styleClass);
++ htmltree.addAttr(HtmlAttr.BORDER, Integer.toString(border));
++ htmltree.addAttr(HtmlAttr.CELLPADDING, Integer.toString(cellPadding));
++ htmltree.addAttr(HtmlAttr.CELLSPACING, Integer.toString(cellSpacing));
++ htmltree.addAttr(HtmlAttr.SUMMARY, nullCheck(summary));
++ return htmltree;
++ }
++
++ /**
++ * Generates a Table tag with border, cell padding,
++ * cellspacing and summary attributes and some content.
++ *
++ * @param border border for the table
++ * @param cellPadding cell padding for the table
++ * @param cellSpacing cell spacing for the table
++ * @param summary summary for the table
++ * @param body content for the table
++ * @return an HtmlTree object for the TABLE tag
++ */
++ public static HtmlTree TABLE(int border, int cellPadding,
++ int cellSpacing, String summary, Content body) {
++ return TABLE(null, border, cellPadding, cellSpacing, summary, body);
++ }
++
++ /**
++ * Generates a TD tag with style class attribute and some content.
++ *
++ * @param styleClass style for the tag
++ * @param body content for the tag
++ * @return an HtmlTree object for the TD tag
++ */
++ public static HtmlTree TD(HtmlStyle styleClass, Content body) {
++ HtmlTree htmltree = new HtmlTree(HtmlTag.TD, nullCheck(body));
++ if (styleClass != null)
++ htmltree.addStyle(styleClass);
++ return htmltree;
++ }
++
++ /**
++ * Generates a TD tag for an HTML table with some content.
++ *
++ * @param body content for the tag
++ * @return an HtmlTree object for the TD tag
++ */
++ public static HtmlTree TD(Content body) {
++ return TD(null, body);
++ }
++
++ /**
++ * Generates a TH tag with style class and scope attributes and some content.
++ *
++ * @param styleClass style for the tag
++ * @param scope scope of the tag
++ * @param body content for the tag
++ * @return an HtmlTree object for the TH tag
++ */
++ public static HtmlTree TH(HtmlStyle styleClass, String scope, Content body) {
++ HtmlTree htmltree = new HtmlTree(HtmlTag.TH, nullCheck(body));
++ if (styleClass != null)
++ htmltree.addStyle(styleClass);
++ htmltree.addAttr(HtmlAttr.SCOPE, nullCheck(scope));
++ return htmltree;
++ }
++
++ /**
++ * Generates a TH tag with scope attribute and some content.
++ *
++ * @param scope scope of the tag
++ * @param body content for the tag
++ * @return an HtmlTree object for the TH tag
++ */
++ public static HtmlTree TH(String scope, Content body) {
++ return TH(null, scope, body);
++ }
++
++ /**
++ * Generates a TITLE tag with some content.
++ *
++ * @param body content for the tag
++ * @return an HtmlTree object for the TITLE tag
++ */
++ public static HtmlTree TITLE(Content body) {
++ HtmlTree htmltree = new HtmlTree(HtmlTag.TITLE, nullCheck(body));
++ return htmltree;
++ }
++
++ /**
++ * Generates a TR tag for an HTML table with some content.
++ *
++ * @param body content for the tag
++ * @return an HtmlTree object for the TR tag
++ */
++ public static HtmlTree TR(Content body) {
++ HtmlTree htmltree = new HtmlTree(HtmlTag.TR, nullCheck(body));
++ return htmltree;
++ }
++
++ /**
++ * Generates a UL tag with the style class attribute and some content.
++ *
++ * @param styleClass style for the tag
++ * @param body content for the tag
++ * @return an HtmlTree object for the UL tag
++ */
++ public static HtmlTree UL(HtmlStyle styleClass, Content body) {
++ HtmlTree htmltree = new HtmlTree(HtmlTag.UL, nullCheck(body));
++ htmltree.addStyle(nullCheck(styleClass));
++ return htmltree;
++ }
++
++ /**
++ * {@inheritDoc}
++ */
++ public boolean isEmpty() {
++ return (!hasContent() && !hasAttrs());
++ }
++
++ /**
++ * Returns true if the HTML tree has content.
++ *
++ * @return true if the HTML tree has content else return false
++ */
++ public boolean hasContent() {
++ return (!content.isEmpty());
++ }
++
++ /**
++ * Returns true if the HTML tree has attributes.
++ *
++ * @return true if the HTML tree has attributes else return false
++ */
++ public boolean hasAttrs() {
++ return (!attrs.isEmpty());
++ }
++
++ /**
++ * Returns true if the HTML tree has a specific attribute.
++ *
++ * @param attrName name of the attribute to check within the HTML tree
++ * @return true if the HTML tree has the specified attribute else return false
++ */
++ public boolean hasAttr(HtmlAttr attrName) {
++ return (attrs.containsKey(attrName));
++ }
++
++ /**
++ * Returns true if the HTML tree is valid. This check is more specific to
++ * standard doclet and not exactly similar to W3C specifications. But it
++ * ensures HTML validation.
++ *
++ * @return true if the HTML tree is valid
++ */
++ public boolean isValid() {
++ switch (htmlTag) {
++ case A :
++ return (hasAttr(HtmlAttr.NAME) || (hasAttr(HtmlAttr.HREF) && hasContent()));
++ case BR :
++ return (!hasContent() && (!hasAttrs() || hasAttr(HtmlAttr.CLEAR)));
++ case FRAME :
++ return (hasAttr(HtmlAttr.SRC) && !hasContent());
++ case HR :
++ return (!hasContent());
++ case IMG :
++ return (hasAttr(HtmlAttr.SRC) && hasAttr(HtmlAttr.ALT) && !hasContent());
++ case LINK :
++ return (hasAttr(HtmlAttr.HREF) && !hasContent());
++ case META :
++ return (hasAttr(HtmlAttr.CONTENT) && !hasContent());
++ default :
++ return hasContent();
++ }
++ }
++
++ /**
++ * Returns true if the element is an inline element.
++ *
++ * @return true if the HTML tag is an inline element
++ */
++ public boolean isInline() {
++ return (htmlTag.blockType == HtmlTag.BlockType.INLINE);
++ }
++
++ /**
++ * {@inheritDoc}
++ */
++ public void write(StringBuilder contentBuilder) {
++ if (!isInline() && !endsWithNewLine(contentBuilder))
++ contentBuilder.append("\n");
++ String tagString = htmlTag.toString();
++ contentBuilder.append("<" + tagString);
++ Iterator<HtmlAttr> iterator = attrs.keySet().iterator();
++ HtmlAttr key;
++ String value = "";
++ while (iterator.hasNext()) {
++ key = iterator.next();
++ value = attrs.get(key);
++ contentBuilder.append(" " + key.toString());
++ if (!value.isEmpty())
++ contentBuilder.append("=\"" + value + "\"");
++ }
++ contentBuilder.append(">");
++ for (Content c : content)
++ c.write(contentBuilder);
++ if (htmlTag.endTagRequired())
++ contentBuilder.append("</" + tagString + ">");
++ if (!isInline())
++ contentBuilder.append("\n");
++ }
++}
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java b/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java
+--- langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java
+@@ -55,7 +55,7 @@
+ * URL file separator string("/").
+ */
+ public static final String fileseparator =
+- DirectoryManager.URL_FILE_SEPERATOR;
++ DirectoryManager.URL_FILE_SEPARATOR;
+
+ /**
+ * The configuration
+@@ -82,6 +82,72 @@
+ */
+ protected final String modifierTypeHeader;
+
++ public final Content overviewLabel;
++
++ public final Content defaultPackageLabel;
++
++ public final Content packageLabel;
++
++ public final Content useLabel;
++
++ public final Content prevLabel;
++
++ public final Content nextLabel;
++
++ public final Content prevclassLabel;
++
++ public final Content nextclassLabel;
++
++ public final Content summaryLabel;
++
++ public final Content detailLabel;
++
++ public final Content framesLabel;
++
++ public final Content noframesLabel;
++
++ public final Content treeLabel;
++
++ public final Content classLabel;
++
++ public final Content deprecatedLabel;
++
++ public final Content deprecatedPhrase;
++
++ public final Content allclassesLabel;
++
++ public final Content indexLabel;
++
++ public final Content helpLabel;
++
++ public final Content seeLabel;
++
++ public final Content descriptionLabel;
++
++ public final Content prevpackageLabel;
++
++ public final Content nextpackageLabel;
++
++ public final Content packagesLabel;
++
++ public final Content methodDetailsLabel;
++
++ public final Content annotationTypeDetailsLabel;
++
++ public final Content fieldDetailsLabel;
++
++ public final Content constructorDetailsLabel;
++
++ public final Content enumConstantsDetailsLabel;
++
++ public final Content specifiedByLabel;
++
++ public final Content overridesLabel;
++
++ public final Content descfrmClassLabel;
++
++ public final Content descfrmInterfaceLabel;
++
+ /**
+ * Constructor.
+ *
+@@ -111,6 +177,73 @@
+ modifierTypeHeader = configuration.getText("doclet.0_and_1",
+ configuration.getText("doclet.Modifier"),
+ configuration.getText("doclet.Type"));
++ overviewLabel = getResource("doclet.Overview");
++ defaultPackageLabel = new RawHtml(
++ DocletConstants.DEFAULT_PACKAGE_NAME);
++ packageLabel = getResource("doclet.Package");
++ useLabel = getResource("doclet.navClassUse");
++ prevLabel = getResource("doclet.Prev");
++ nextLabel = getResource("doclet.Next");
++ prevclassLabel = getResource("doclet.Prev_Class");
++ nextclassLabel = getResource("doclet.Next_Class");
++ summaryLabel = getResource("doclet.Summary");
++ detailLabel = getResource("doclet.Detail");
++ framesLabel = getResource("doclet.FRAMES");
++ noframesLabel = getResource("doclet.NO_FRAMES");
++ treeLabel = getResource("doclet.Tree");
++ classLabel = getResource("doclet.Class");
++ deprecatedLabel = getResource("doclet.navDeprecated");
++ deprecatedPhrase = getResource("doclet.Deprecated");
++ allclassesLabel = getResource("doclet.All_Classes");
++ indexLabel = getResource("doclet.Index");
++ helpLabel = getResource("doclet.Help");
++ seeLabel = getResource("doclet.See");
++ descriptionLabel = getResource("doclet.Description");
++ prevpackageLabel = getResource("doclet.Prev_Package");
++ nextpackageLabel = getResource("doclet.Next_Package");
++ packagesLabel = getResource("doclet.Packages");
++ methodDetailsLabel = getResource("doclet.Method_Detail");
++ annotationTypeDetailsLabel = getResource("doclet.Annotation_Type_Member_Detail");
++ fieldDetailsLabel = getResource("doclet.Field_Detail");
++ constructorDetailsLabel = getResource("doclet.Constructor_Detail");
++ enumConstantsDetailsLabel = getResource("doclet.Enum_Constant_Detail");
++ specifiedByLabel = getResource("doclet.Specified_By");
++ overridesLabel = getResource("doclet.Overrides");
++ descfrmClassLabel = getResource("doclet.Description_From_Class");
++ descfrmInterfaceLabel = getResource("doclet.Description_From_Interface");
++ }
++
++ /**
++ * Get the configuration string as a content.
++ *
++ * @param key the key to look for in the configuration file
++ * @return a content tree for the text
++ */
++ public Content getResource(String key) {
++ return new StringContent(configuration.getText(key));
++ }
++
++ /**
++ * Get the configuration string as a content.
++ *
++ * @param key the key to look for in the configuration file
++ * @param a1 string argument added to configuration text
++ * @return a content tree for the text
++ */
++ public Content getResource(String key, String a1) {
++ return new RawHtml(configuration.getText(key, a1));
++ }
++
++ /**
++ * Get the configuration string as a content.
++ *
++ * @param key the key to look for in the configuration file
++ * @param a1 string argument added to configuration text
++ * @param a2 string argument added to configuration text
++ * @return a content tree for the text
++ */
++ public Content getResource(String key, String a1, String a2) {
++ return new RawHtml(configuration.getText(key, a1, a2));
+ }
+
+ /**
+@@ -146,6 +279,48 @@
+ }
+
+ /**
++ * Returns an HtmlTree for the SCRIPT tag.
++ *
++ * @return an HtmlTree for the SCRIPT tag
++ */
++ protected HtmlTree getWinTitleScript(){
++ HtmlTree script = new HtmlTree(HtmlTag.SCRIPT);
++ if(winTitle != null && winTitle.length() > 0) {
++ script.addAttr(HtmlAttr.TYPE, "text/javascript");
++ String scriptCode = "<!--\n" +
++ " if (location.href.indexOf('is-external=true') == -1) {\n" +
++ " parent.document.title=\"" + winTitle + "\";\n" +
++ " }\n" +
++ "//-->\n";
++ RawHtml scriptContent = new RawHtml(scriptCode);
++ script.addContent(scriptContent);
++ }
++ return script;
++ }
++
++ /**
++ * Returns a content tree for the SCRIPT tag for the main page(index.html).
++ *
++ * @return a content for the SCRIPT tag
++ */
++ protected Content getFramesetJavaScript(){
++ HtmlTree script = new HtmlTree(HtmlTag.SCRIPT);
++ script.addAttr(HtmlAttr.TYPE, "text/javascript");
++ String scriptCode = "\n targetPage = \"\" + window.location.search;\n" +
++ " if (targetPage != \"\" && targetPage != \"undefined\")\n" +
++ " targetPage = targetPage.substring(1);\n" +
++ " if (targetPage.indexOf(\":\") != -1)\n" +
++ " targetPage = \"undefined\";\n" +
++ " function loadFrames() {\n" +
++ " if (targetPage != \"\" && targetPage != \"undefined\")\n" +
++ " top.classFrame.location = top.targetPage;\n" +
++ " }\n";
++ RawHtml scriptContent = new RawHtml(scriptCode);
++ script.addContent(scriptContent);
++ return script;
++ }
++
++ /**
+ * Print the Javascript &lt;SCRIPT&gt; start tag with its type
+ * attribute.
+ */
+@@ -204,6 +379,28 @@
+ }
+
+ /**
++ * Returns an HtmlTree for the BODY tag.
++ *
++ * @param includeScript set true if printing windowtitle script
++ * @param title title for the window
++ * @return an HtmlTree for the BODY tag
++ */
++ public HtmlTree getBody(boolean includeScript, String title) {
++ HtmlTree body = new HtmlTree(HtmlTag.BODY);
++ // Set window title string which is later printed
++ this.winTitle = title;
++ // Don't print windowtitle script for overview-frame, allclasses-frame
++ // and package-frame
++ if (includeScript) {
++ body.addContent(getWinTitleScript());
++ Content noScript = HtmlTree.NOSCRIPT(
++ HtmlTree.DIV(getResource("doclet.No_Script_Message")));
++ body.addContent(noScript);
++ }
++ return body;
++ }
++
++ /**
+ * Print &lt;/BODY&gt; tag. Add a newline character at the end.
+ */
+ public void bodyEnd() {
+@@ -228,6 +425,15 @@
+ title();
+ }
+
++ /**
++ * Returns an HtmlTree for the TITLE tag.
++ *
++ * @return an HtmlTree for the TITLE tag
++ */
++ public HtmlTree getTitle() {
++ HtmlTree title = HtmlTree.TITLE(new StringContent(winTitle));
++ return title;
++ }
+
+ /**
+ * Print &lt;/TITLE&gt; tag. Add a newline character at the end.
+@@ -519,17 +725,17 @@
+ }
+
+ /**
+- * Return, text passed, with Italics &lt;I&gt; and &lt;/I&gt; tags, surrounding it.
+- * So if the text passed is "Hi", then string returned will be "&lt;I&gt;Hi&lt;/I&gt;".
++ * Return, text passed, with Italics &lt;i&gt; and &lt;/i&gt; tags, surrounding it.
++ * So if the text passed is "Hi", then string returned will be "&lt;i&gt;Hi&lt;/i&gt;".
+ *
+ * @param text String to be printed in between &lt;I&gt; and &lt;/I&gt; tags.
+ */
+ public String italicsText(String text) {
+- return "<I>" + text + "</I>";
++ return "<i>" + text + "</i>";
+ }
+
+ public String codeText(String text) {
+- return "<CODE>" + text + "</CODE>";
++ return "<code>" + text + "</code>";
+ }
+
+ /**
+@@ -540,6 +746,13 @@
+ }
+
+ /**
++ * Return "&#38;nbsp;", non-breaking space.
++ */
++ public Content getSpace() {
++ return RawHtml.nbsp;
++ }
++
++ /**
+ * Print &lt;DL&gt; tag. Add a newline character at the end.
+ */
+ public void dl() {
+@@ -1182,21 +1395,21 @@
+ }
+
+ /**
+- * Get the "&lt;CODE&gt;" string.
++ * Get the "&lt;code&gt;" string.
+ *
+- * @return String Return String "&lt;CODE>";
++ * @return String Return String "&lt;code&gt;";
+ */
+ public String getCode() {
+- return "<CODE>";
++ return "<code>";
+ }
+
+ /**
+- * Get the "&lt;/CODE&gt;" string.
++ * Get the "&lt;/code&gt;" string.
+ *
+- * @return String Return String "&lt;/CODE&gt;";
++ * @return String Return String "&lt;/code&gt;";
+ */
+ public String getCodeEnd() {
+- return "</CODE>";
++ return "</code>";
+ }
+
+ /**
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/markup/RawHtml.java b/src/share/classes/com/sun/tools/doclets/formats/html/markup/RawHtml.java
+new file mode 100644
+--- /dev/null
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/RawHtml.java
+@@ -0,0 +1,88 @@
++/*
++ * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
++ *
++ * This code is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License version 2 only, as
++ * published by the Free Software Foundation. Oracle designates this
++ * particular file as subject to the "Classpath" exception as provided
++ * by Oracle in the LICENSE file that accompanied this code.
++ *
++ * This code is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ * version 2 for more details (a copy is included in the LICENSE file that
++ * accompanied this code).
++ *
++ * You should have received a copy of the GNU General Public License version
++ * 2 along with this work; if not, write to the Free Software Foundation,
++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
++ *
++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
++ * or visit www.oracle.com if you need additional information or have any
++ * questions.
++ */
++
++package com.sun.tools.doclets.formats.html.markup;
++
++import com.sun.tools.doclets.internal.toolkit.Content;
++import com.sun.tools.doclets.internal.toolkit.util.*;
++
++/**
++ * Class for generating raw HTML content to be added to HTML pages of javadoc output.
++ *
++ * @author Bhavesh Patel
++ */
++public class RawHtml extends Content{
++
++ private String rawHtmlContent;
++
++ public static final Content nbsp = new RawHtml("&nbsp;");
++
++ /**
++ * Constructor to construct a RawHtml object.
++ *
++ * @param rawHtml raw HTML text to be added
++ */
++ public RawHtml(String rawHtml) {
++ rawHtmlContent = nullCheck(rawHtml);
++ }
++
++ /**
++ * This method is not supported by the class.
++ *
++ * @param content content that needs to be added
++ * @throws DocletAbortException this method will always throw a
++ * DocletAbortException because it
++ * is not supported.
++ */
++ public void addContent(Content content) {
++ throw new DocletAbortException();
++ }
++
++ /**
++ * This method is not supported by the class.
++ *
++ * @param stringContent string content that needs to be added
++ * @throws DocletAbortException this method will always throw a
++ * DocletAbortException because it
++ * is not supported.
++ */
++ public void addContent(String stringContent) {
++ throw new DocletAbortException();
++ }
++
++ /**
++ * {@inheritDoc}
++ */
++ public boolean isEmpty() {
++ return rawHtmlContent.isEmpty();
++ }
++
++ /**
++ * {@inheritDoc}
++ */
++ public void write(StringBuilder contentBuilder) {
++ contentBuilder.append(rawHtmlContent);
++ }
++}
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/markup/StringContent.java b/src/share/classes/com/sun/tools/doclets/formats/html/markup/StringContent.java
+new file mode 100644
+--- /dev/null
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/StringContent.java
+@@ -0,0 +1,99 @@
++/*
++ * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
++ *
++ * This code is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License version 2 only, as
++ * published by the Free Software Foundation. Oracle designates this
++ * particular file as subject to the "Classpath" exception as provided
++ * by Oracle in the LICENSE file that accompanied this code.
++ *
++ * This code is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ * version 2 for more details (a copy is included in the LICENSE file that
++ * accompanied this code).
++ *
++ * You should have received a copy of the GNU General Public License version
++ * 2 along with this work; if not, write to the Free Software Foundation,
++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
++ *
++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
++ * or visit www.oracle.com if you need additional information or have any
++ * questions.
++ */
++
++package com.sun.tools.doclets.formats.html.markup;
++
++import com.sun.tools.doclets.internal.toolkit.Content;
++import com.sun.tools.doclets.internal.toolkit.util.*;
++
++/**
++ * Class for generating string content for HTML tags of javadoc output.
++ *
++ * @author Bhavesh Patel
++ */
++public class StringContent extends Content{
++
++ private StringBuilder stringContent;
++
++ /**
++ * Constructor to construct StringContent object.
++ */
++ public StringContent() {
++ stringContent = new StringBuilder();
++ }
++
++ /**
++ * Constructor to construct StringContent object with some initial content.
++ *
++ * @param initialContent initial content for the object
++ */
++ public StringContent(String initialContent) {
++ stringContent = new StringBuilder(
++ Util.escapeHtmlChars(nullCheck(initialContent)));
++ }
++
++ /**
++ * This method is not supported by the class.
++ *
++ * @param content content that needs to be added
++ * @throws DocletAbortException this method will always throw a
++ * DocletAbortException because it
++ * is not supported.
++ */
++ public void addContent(Content content) {
++ throw new DocletAbortException();
++ }
++
++ /**
++ * Adds content for the StringContent object. The method escapes
++ * HTML characters for the string content that is added.
++ *
++ * @param strContent string content to be added
++ */
++ public void addContent(String strContent) {
++ stringContent.append(Util.escapeHtmlChars(nullCheck(strContent)));
++ }
++
++ /**
++ * {@inheritDoc}
++ */
++ public boolean isEmpty() {
++ return (stringContent.length() == 0);
++ }
++
++ /**
++ * {@inheritDoc}
++ */
++ public String toString() {
++ return stringContent.toString();
++ }
++
++ /**
++ * {@inheritDoc}
++ */
++ public void write(StringBuilder contentBuilder) {
++ contentBuilder.append(stringContent);
++ }
++}
+diff --git a/src/share/classes/com/sun/tools/doclets/formats/html/resources/standard.properties b/src/share/classes/com/sun/tools/doclets/formats/html/resources/standard.properties
+--- langtools/src/share/classes/com/sun/tools/doclets/formats/html/resources/standard.properties
++++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/resources/standard.properties
+@@ -43,6 +43,7 @@
+ doclet.Window_Split_Index={0}-Index
+ doclet.Help=Help
+ doclet.Skip_navigation_links=Skip navigation links
++doclet.New_Page=NewPage
+ doclet.None=None
+ doclet.CLASSES=CLASSES
+ doclet.MEMBERS=MEMBERS
+@@ -53,7 +54,7 @@
+ doclet.Window_Deprecated_List=Deprecated List
+ doclet.Note_0_is_deprecated=Note: {0} is deprecated.
+ doclet.Overrides=Overrides:
+-doclet.in_class={0} in class {1}
++doclet.in_class=in class
+ doclet.0_Fields_and_Methods=&quot;{0}&quot; Fields and Methods
+ doclet.Index_of_Fields_and_Methods=Index of Fields and Methods
+ doclet.Static_variable_in=Static variable in {0}
+@@ -102,7 +103,7 @@
+ doclet.Package_Description=Package {0} Description
+ doclet.Description=Description
+ doclet.Specified_By=Specified by:
+-doclet.in_interface={0} in interface {1}
++doclet.in_interface=in interface
+ doclet.Subclasses=Direct Known Subclasses:
+ doclet.Subinterfaces=All Known Subinterfaces:
+ doclet.Implementing_Classes=All Known Implementing Classes:
+@@ -120,18 +121,20 @@
+ doclet.Frame_Alert=Frame Alert
+ doclet.Overview-Member-Frame=Overview Member Frame
+ doclet.Frame_Warning_Message=This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
++doclet.No_Script_Message=JavaScript is disabled on your browser.
+ doclet.Non_Frame_Version=Non-frame version.
+ doclet.Frame_Version=Frame version
+ doclet.Link_To=Link to
+ doclet.Following_From_Class=Following copied from class: {0}
+ doclet.Following_From_Interface=Following copied from interface: {0}
+-doclet.Description_From_Interface=Description copied from interface: {0}
+-doclet.Description_From_Class=Description copied from class: {0}
++doclet.Description_From_Interface=Description copied from interface:
++doclet.Description_From_Class=Description copied from class:
+ doclet.Standard_doclet_invoked=Standard doclet invoked...
+ doclet.No_Non_Deprecated_Classes_To_Document=No non-deprecated classes found to document.
+ doclet.Interfaces_Italic=Interfaces (italic)
+ doclet.Enclosing_Class=Enclosing class:
+ doclet.Enclosing_Interface=Enclosing interface:
++doclet.Window_Source_title=Source code
+ doclet.Help_title=API Help
+ doclet.Window_Help_title=API Help
+ doclet.Help_line_1=How This API Document Is Organized
+diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/AnnotationTypeOptionalMemberWriter.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/AnnotationTypeOptionalMemberWriter.java
+--- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/AnnotationTypeOptionalMemberWriter.java
++++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/AnnotationTypeOptionalMemberWriter.java
+@@ -35,14 +35,18 @@
+ * Do not use it as an API
+ *
+ * @author Jamie Ho
++ * @author Bhavesh Patel (Modified)
+ * @since 1.5
+ */
+
+ public interface AnnotationTypeOptionalMemberWriter extends
+- AnnotationTypeRequiredMemberWriter {
++ AnnotationTypeRequiredMemberWriter {
+
+ /**
+- * Write the default value documentation.
++ * Add the the default value documentation.
++ *
++ * @param member the member being documented
++ * @param annotationDocTree content tree to which the default value will be added
+ */
+- public void writeDefaultValueInfo(MemberDoc member);
++ public void addDefaultValueInfo(MemberDoc member, Content annotationDocTree);
+ }
+diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/AnnotationTypeRequiredMemberWriter.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/AnnotationTypeRequiredMemberWriter.java
+--- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/AnnotationTypeRequiredMemberWriter.java
++++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/AnnotationTypeRequiredMemberWriter.java
+@@ -36,67 +36,79 @@
+ * Do not use it as an API
+ *
+ * @author Jamie Ho
++ * @author Bhavesh Patel (Modified)
+ * @since 1.5
+ */
+
+ public interface AnnotationTypeRequiredMemberWriter {
+
+ /**
+- * Write the header for the member documentation.
++ * Add the annotation type details tree header.
+ *
+- * @param classDoc the annotation type that the members belong to.
+- * @param header the header to write.
++ * @param classDoc the annotation type being documented
++ * @param memberDetailsTree the content tree representing member details
+ */
+- public void writeHeader(ClassDoc classDoc, String header);
++ public void addAnnotationDetailsTreeHeader(ClassDoc classDoc,
++ Content memberDetailsTree);
+
+ /**
+- * Write the member header for the given member.
++ * Get the annotation type documentation tree header.
+ *
+- * @param member the member being documented.
+- * @param isFirst the flag to indicate whether or not the member is
+- * the first to be documented.
++ * @param member the annotation type being documented
++ * @param annotationDetailsTree the content tree representing annotation type details
++ * @return content tree for the annotation type documentation header
+ */
+- public void writeMemberHeader(MemberDoc member, boolean isFirst);
++ public Content getAnnotationDocTreeHeader(MemberDoc member,
++ Content annotationDetailsTree);
+
+ /**
+- * Write the signature for the given member.
++ * Get the annotation type details tree.
+ *
+- * @param member the member being documented.
++ * @param annotationDetailsTree the content tree representing annotation type details
++ * @return content tree for the annotation type details
+ */
+- public void writeSignature(MemberDoc member);
++ public Content getAnnotationDetails(Content annotationDetailsTree);
+
+ /**
+- * Write the deprecated output for the given member.
++ * Get the annotation type documentation.
+ *
+- * @param member the member being documented.
++ * @param annotationDocTree the content tree representing annotation type documentation
++ * @param isLastContent true if the content to be added is the last content
++ * @return content tree for the annotation type documentation
+ */
+- public void writeDeprecated(MemberDoc member);
++ public Content getAnnotationDoc(Content annotationDocTree, boolean isLastContent);
+
+ /**
+- * Write the comments for the given member.
++ * Get the signature for the given member.
+ *
+- * @param member the member being documented.
++ * @param member the member being documented
++ * @return content tree for the annotation type signature
+ */
+- public void writeComments(MemberDoc member);
++ public Content getSignature(MemberDoc member);
+
+ /**
+- * Write the tag output for the given member.
++ * Add the deprecated output for the given member.
+ *
+- * @param member the member being documented.
++ * @param member the member being documented
++ * @param annotationDocTree content tree to which the deprecated information will be added
+ */
+- public void writeTags(MemberDoc member);
++ public void addDeprecated(MemberDoc member, Content annotationDocTree);
+
+ /**
+- * Write the member footer.
++ * Add the comments for the given member.
++ *
++ * @param member the member being documented
++ * @param annotationDocTree the content tree to which the comments will be added
+ */
+- public void writeMemberFooter();
++ public void addComments(MemberDoc member, Content annotationDocTree);
+
+ /**
+- * Write the footer for the member documentation.
++ * Add the tags for the given member.
+ *
+- * @param classDoc the class that the member belong to.
++ * @param member the member being documented
++ * @param annotationDocTree the content tree to which the tags will be added
+ */
+- public void writeFooter(ClassDoc classDoc);
++ public void addTags(MemberDoc member, Content annotationDocTree);
+
+ /**
+ * Close the writer.
+diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/AnnotationTypeWriter.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/AnnotationTypeWriter.java
+--- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/AnnotationTypeWriter.java
++++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/AnnotationTypeWriter.java
+@@ -37,43 +37,122 @@
+ * Do not use it as an API.
+ *
+ * @author Jamie Ho
++ * @author Bhavesh Patel (Modified)
+ * @since 1.5
+ */
+
+ public interface AnnotationTypeWriter {
+
+ /**
+- * Write the header of the page.
+- * @param header the header to write.
++ * Get the header of the page.
++ *
++ * @param header the header string to write
++ * @return a content tree for the header documentation
+ */
+- public void writeHeader(String header);
++ public Content getHeader(String header);
+
+ /**
+- * Write the signature of the current annotation type.
++ * Get the annotation content header.
+ *
+- * @param modifiers the modifiers for the signature.
++ * @return annotation content header that needs to be added to the documentation
+ */
+- public void writeAnnotationTypeSignature(String modifiers);
++ public Content getAnnotationContentHeader();
++
++ /**
++ * Get the annotation information tree header.
++ *
++ * @return annotation information tree header that needs to be added to the documentation
++ */
++ public Content getAnnotationInfoTreeHeader();
++
++ /**
++ * Get the annotation information.
++ *
++ * @param annotationInfoTree content tree containing the annotation information
++ * @return a content tree for the annotation
++ */
++ public Content getAnnotationInfo(Content annotationInfoTree);
++
++ /**
++ * Add the signature of the current annotation type.
++ *
++ * @param modifiers the modifiers for the signature
++ * @param annotationInfoTree the annotation content tree to which the signature will be added
++ */
++ public void addAnnotationTypeSignature(String modifiers, Content annotationInfoTree);
+
+ /**
+ * Build the annotation type description.
++ *
++ * @param annotationInfoTree content tree to which the description will be added
+ */
+- public void writeAnnotationTypeDescription();
++ public void addAnnotationTypeDescription(Content annotationInfoTree);
+
+ /**
+- * Write the tag information for the current annotation type.
++ * Add the tag information for the current annotation type.
++ *
++ * @param annotationInfoTree content tree to which the tag information will be added
+ */
+- public void writeAnnotationTypeTagInfo();
++ public void addAnnotationTypeTagInfo(Content annotationInfoTree);
+
+ /**
+- * If this annotation type is deprecated, write the appropriate information.
++ * If this annotation is deprecated, add the appropriate information.
++ *
++ * @param annotationInfoTree content tree to which the deprecated information will be added
+ */
+- public void writeAnnotationTypeDeprecationInfo();
++ public void addAnnotationTypeDeprecationInfo (Content annotationInfoTree);
+
+ /**
+- * Write the footer of the page.
++ * Add the annotation type details marker.
++ *
++ * @param memberDetails the content tree representing member details marker
+ */
+- public void writeFooter();
++ public void addAnnotationDetailsMarker(Content memberDetails);
++
++ /**
++ * Get the member tree header for the annotation type.
++ *
++ * @return a content tree for the member tree header
++ */
++ public Content getMemberTreeHeader();
++
++ /**
++ * Get the member tree.
++ *
++ * @param memberTree the content tree that will be modified and returned
++ * @return a content tree for the member
++ */
++ public Content getMemberTree(Content memberTree);
++
++ /**
++ * Get the member summary tree.
++ *
++ * @param memberTree the content tree that will be used to build the summary tree
++ * @return a content tree for the member summary
++ */
++ public Content getMemberSummaryTree(Content memberTree);
++
++ /**
++ * Get the member details tree.
++ *
++ * @param memberTree the content tree that will be used to build the details tree
++ * @return a content tree for the member details
++ */
++ public Content getMemberDetailsTree(Content memberTree);
++
++ /**
++ * Add the footer of the page.
++ *
++ * @param contentTree content tree to which the footer will be added
++ */
++ public void addFooter(Content contentTree);
++
++ /**
++ * Print the document.
++ *
++ * @param contentTree content tree that will be printed as a document
++ */
++ public void printDocument(Content contentTree);
+
+ /**
+ * Close the writer.
+@@ -86,10 +165,4 @@
+ * @return the AnnotationTypeDoc being documented.
+ */
+ public AnnotationTypeDoc getAnnotationTypeDoc();
+-
+- /**
+- * Perform any operations that are necessary when the member summary
+- * finished building.
+- */
+- public void completeMemberSummaryBuild();
+ }
+diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/ClassWriter.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/ClassWriter.java
+--- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/ClassWriter.java
++++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/ClassWriter.java
+@@ -37,85 +37,149 @@
+ * Do not use it as an API
+ *
+ * @author Jamie Ho
++ * @author Bhavesh Patel (Modified)
+ * @since 1.5
+ */
+
+ public interface ClassWriter {
+
+ /**
+- * Write the header of the page.
+- * @param header the header to write.
++ * Get the header of the page.
++ *
++ * @param header the header string to write
++ * @return header content that needs to be added to the documentation
+ */
+- public void writeHeader(String header);
++ public Content getHeader(String header);
+
+ /**
+- * Write the class tree documentation.
++ * Get the class content header.
++ *
++ * @return class content header that needs to be added to the documentation
+ */
+- public void writeClassTree();
++ public Content getClassContentHeader();
+
+ /**
+- * Write all implemented interfaces if this is a class.
++ * Add the class tree documentation.
++ *
++ * @param classContentTree class content tree to which the documentation will be added
+ */
+- public void writeImplementedInterfacesInfo();
++ public void addClassTree(Content classContentTree);
+
+ /**
+- * Write all super interfaces if this is an interface.
++ * Get the class information tree header.
++ *
++ * @return class informaion tree header that needs to be added to the documentation
+ */
+- public void writeSuperInterfacesInfo();
++ public Content getClassInfoTreeHeader();
+
+ /**
+- * Write the type parameter information.
++ * Add the type parameter information.
++ *
++ * @param classInfoTree content tree to which the documentation will be added
+ */
+- public void writeTypeParamInfo();
++ public void addTypeParamInfo(Content classInfoTree);
+
+ /**
+- * Write all the classes that extend this one.
++ * Add all super interfaces if this is an interface.
++ *
++ * @param classInfoTree content tree to which the documentation will be added
+ */
+- public void writeSubClassInfo();
++ public void addSuperInterfacesInfo(Content classInfoTree);
+
+ /**
+- * Write all the interfaces that extend this one.
++ * Add all implemented interfaces if this is a class.
++ *
++ * @param classInfoTree content tree to which the documentation will be added
+ */
+- public void writeSubInterfacesInfo();
++ public void addImplementedInterfacesInfo(Content classInfoTree);
+
+ /**
+- * If this is an interface, write all classes that implement this
+- * interface.
++ * Add all the classes that extend this one.
++ *
++ * @param classInfoTree content tree to which the documentation will be added
+ */
+- public void writeInterfaceUsageInfo ();
++ public void addSubClassInfo(Content classInfoTree);
+
+ /**
+- * If this is an inner class or interface, write the enclosing class or
+- * interface.
++ * Add all the interfaces that extend this one.
++ *
++ * @param classInfoTree content tree to which the documentation will be added
+ */
+- public void writeNestedClassInfo ();
++ public void addSubInterfacesInfo(Content classInfoTree);
+
+ /**
+- * If this class is deprecated, write the appropriate information.
++ * If this is an interface, add all classes that implement this
++ * interface.
++ *
++ * @param classInfoTree content tree to which the documentation will be added
+ */
+- public void writeClassDeprecationInfo ();
++ public void addInterfaceUsageInfo(Content classInfoTree);
+
+ /**
+- * Write the signature of the current class.
++ * If this is an inner class or interface, add the enclosing class or
++ * interface.
+ *
+- * @param modifiers the modifiers for the signature.
++ * @param classInfoTree content tree to which the documentation will be added
+ */
+- public void writeClassSignature(String modifiers);
++ public void addNestedClassInfo (Content classInfoTree);
++
++ /**
++ * Get the class information.
++ *
++ * @param classInfoTree content tree conatining the class information
++ * @return a content tree for the class
++ */
++ public Content getClassInfo(Content classInfoTree);
++
++ /**
++ * If this class is deprecated, add the appropriate information.
++ *
++ * @param classInfoTree content tree to which the documentation will be added
++ */
++ public void addClassDeprecationInfo (Content classInfoTree);
++
++ /**
++ * Add the signature of the current class content tree.
++ *
++ * @param modifiers the modifiers for the signature
++ * @param classInfoTree the class content tree to which the signature will be added
++ */
++ public void addClassSignature(String modifiers, Content classInfoTree);
+
+ /**
+ * Build the class description.
++ *
++ * @param classInfoTree content tree to which the documentation will be added
+ */
+- public void writeClassDescription();
++ public void addClassDescription(Content classInfoTree);
+
+ /**
+- * Write the tag information for the current class.
++ * Add the tag information for the current class.
++ *
++ * @param classInfoTree content tree to which the tag information will be added
+ */
+- public void writeClassTagInfo();
++ public void addClassTagInfo(Content classInfoTree);
+
+ /**
+- * Write the footer of the page.
++ * Get the member tree header for the class.
++ *
++ * @return a content tree for the member tree header
+ */
+- public void writeFooter();
++ public Content getMemberTreeHeader();
++
++ /**
++ * Add the footer of the page.
++ *
++ * @param contentTree content tree to which the footer will be added
++ */
++ public void addFooter(Content contentTree);
++
++ /**
++ * Print the document.
++ *
++ * @param contentTree content tree that will be printed as a document
++ */
++ public void printDocument(Content contentTree);
+
+ /**
+ * Close the writer.
+@@ -130,8 +194,18 @@
+ public ClassDoc getClassDoc();
+
+ /**
+- * Perform any operations that are necessary when the member summary
+- * finished building.
++ * Get the member summary tree.
++ *
++ * @param memberTree the content tree used to build the summary tree
++ * @return a content tree for the member summary
+ */
+- public void completeMemberSummaryBuild();
++ public Content getMemberSummaryTree(Content memberTree);
++
++ /**
++ * Get the member details tree.
++ *
++ * @param memberTree the content tree used to build the details tree
++ * @return a content tree for the member details
++ */
++ public Content getMemberDetailsTree(Content memberTree);
+ }
+diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/ConstantsSummaryWriter.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/ConstantsSummaryWriter.java
+--- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/ConstantsSummaryWriter.java
++++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/ConstantsSummaryWriter.java
+@@ -25,9 +25,9 @@
+
+ package com.sun.tools.doclets.internal.toolkit;
+
+-import com.sun.javadoc.*;
+ import java.util.*;
+ import java.io.*;
++import com.sun.javadoc.*;
+
+ /**
+ * The interface for writing constants summary output.
+@@ -37,38 +37,34 @@
+ * Do not use it as an API
+ *
+ * @author Jamie Ho
++ * @author Bhavesh Patel (Modified)
+ * @since 1.5
+ */
+
+ public interface ConstantsSummaryWriter {
+
+ /**
+- * Write the header for the summary.
+- */
+- public abstract void writeHeader();
+-
+- /**
+- * Write the footer for the summary.
+- */
+- public abstract void writeFooter();
+-
+- /**
+ * Close the writer.
+ */
+ public abstract void close() throws IOException;
+
+ /**
+- * Write the header for the index.
++ * Get the header for the constant summary documentation.
++ *
++ * @return header that needs to be added to the documentation
+ */
+- public abstract void writeContentsHeader();
++ public abstract Content getHeader();
+
+ /**
+- * Write the footer for the index.
++ * Get the header for the constant content list.
++ *
++ * @return content header that needs to be added to the documentation
+ */
+- public abstract void writeContentsFooter();
++ public abstract Content getContentsHeader();
+
+ /**
+- * Add the given package name to the index.
++ * Adds the given package name link to the constant content list tree.
++ *
+ * @param pkg the {@link PackageDoc} to index.
+ * @param parsedPackageName the parsed package name. We only Write the
+ * first 2 directory levels of the package
+@@ -77,38 +73,70 @@
+ * @param WriteedPackageHeaders the set of package headers that have already
+ * been indexed. We don't want to index
+ * something more than once.
++ * @param contentListTree the content tree to which the link will be added
+ */
+- public abstract void writeLinkToPackageContent(PackageDoc pkg, String parsedPackageName,
+- Set WriteedPackageHeaders);
++ public abstract void addLinkToPackageContent(PackageDoc pkg, String parsedPackageName,
++ Set<String> WriteedPackageHeaders, Content contentListTree);
+
+ /**
+- * Write the given package name.
+- * @param pkg the {@link PackageDoc} to index.
+- * @param parsedPackageName the parsed package name. We only Write the
+- * first 2 directory levels of the package
+- * name. For example, java.lang.ref would be
+- * indexed as java.lang.*.
++ * Get the content list to be added to the documentation tree.
++ *
++ * @param contentListTree the content that will be added to the list
++ * @return content list that will be added to the documentation tree
+ */
+- public abstract void writePackageName(PackageDoc pkg,
+- String parsedPackageName);
++ public abstract Content getContentsList(Content contentListTree);
+
+ /**
+- * Write the heading for the current table of constants for a given class.
+- * @param cd the class whose constants are being documented.
++ * Get the constant summaries for the document.
++ *
++ * @return constant summaries header to be added to the documentation tree
+ */
+- public abstract void writeConstantMembersHeader(ClassDoc cd);
++ public abstract Content getConstantSummaries();
+
+ /**
+- * Document the given constants.
++ * Adds the given package name.
++ *
++ * @param pkg the {@link PackageDoc} to index.
++ * @param parsedPackageName the parsed package name. We only Write the
++ * first 2 directory levels of the package
++ * name. For example, java.lang.ref would be
++ * indexed as java.lang.*.
++ * @param summariesTree the documentation tree to which the package name will
++ * be written
++ */
++ public abstract void addPackageName(PackageDoc pkg,
++ String parsedPackageName, Content summariesTree);
++
++ /**
++ * Get the class summary header for the constants summary.
++ *
++ * @return the header content for the class constants summary
++ */
++ public abstract Content getClassConstantHeader();
++
++ /**
++ * Adds the constant member table to the documentation tree.
++ *
+ * @param cd the class whose constants are being documented.
+ * @param fields the constants being documented.
++ * @param classConstantTree the documentation tree to which theconstant member
++ * table content will be added
+ */
+- public abstract void writeConstantMembers(ClassDoc cd, List fields);
++ public abstract void addConstantMembers(ClassDoc cd, List<FieldDoc> fields,
++ Content classConstantTree);
+
+ /**
+- * Document the given constants.
+- * @param cd the class whose constants are being documented.
++ * Adds the footer for the summary documentation.
++ *
++ * @param contentTree content tree to which the footer will be added
+ */
+- public abstract void writeConstantMembersFooter(ClassDoc cd);
++ public abstract void addFooter(Content contentTree);
++
++ /**
++ * Print the constants summary document.
++ *
++ * @param contentTree content tree which should be printed
++ */
++ public abstract void printDocument(Content contentTree);
+
+ }
+diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/ConstructorWriter.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/ConstructorWriter.java
+--- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/ConstructorWriter.java
++++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/ConstructorWriter.java
+@@ -36,67 +36,80 @@
+ * Do not use it as an API
+ *
+ * @author Jamie Ho
++ * @author Bhavesh Patel (Modified)
+ * @since 1.5
+ */
+
+ public interface ConstructorWriter {
+
+ /**
+- * Write the header for the constructor documentation.
++ * Get the constructor details tree header.
+ *
+- * @param classDoc the class that the constructors belong to.
+- * @param header the header to write.
++ * @param classDoc the class being documented
++ * @param memberDetailsTree the content tree representing member details
++ * @return content tree for the constructor details header
+ */
+- public void writeHeader(ClassDoc classDoc, String header);
++ public Content getConstructorDetailsTreeHeader(ClassDoc classDoc,
++ Content memberDetailsTree);
+
+ /**
+- * Write the constructor header for the given constructor.
++ * Get the constructor documentation tree header.
+ *
+- * @param constructor the constructor being documented.
+- * @param isFirst the flag to indicate whether or not the constructor is the
+- * first to be documented.
++ * @param constructor the constructor being documented
++ * @param constructorDetailsTree the content tree representing constructor details
++ * @return content tree for the constructor documentation header
+ */
+- public void writeConstructorHeader(ConstructorDoc constructor, boolean isFirst);
++ public Content getConstructorDocTreeHeader(ConstructorDoc constructor,
++ Content constructorDetailsTree);
+
+ /**
+- * Write the signature for the given constructor.
++ * Get the signature for the given constructor.
+ *
+- * @param constructor the constructor being documented.
++ * @param constructor the constructor being documented
++ * @return content tree for the constructor signature
+ */
+- public void writeSignature(ConstructorDoc constructor);
++ public Content getSignature(ConstructorDoc constructor);
+
+ /**
+- * Write the deprecated output for the given constructor.
++ * Add the deprecated output for the given constructor.
+ *
+- * @param constructor the constructor being documented.
++ * @param constructor the constructor being documented
++ * @param constructorDocTree content tree to which the deprecated information will be added
+ */
+- public void writeDeprecated(ConstructorDoc constructor);
++ public void addDeprecated(ConstructorDoc constructor, Content constructorDocTree);
+
+ /**
+- * Write the comments for the given constructor.
++ * Add the comments for the given constructor.
+ *
+- * @param constructor the constructor being documented.
++ * @param constructor the constructor being documented
++ * @param constructorDocTree the content tree to which the comments will be added
+ */
+- public void writeComments(ConstructorDoc constructor);
++ public void addComments(ConstructorDoc constructor, Content constructorDocTree);
+
+ /**
+- * Write the tag output for the given constructor.
++ * Add the tags for the given constructor.
+ *
+- * @param constructor the constructor being documented.
++ * @param constructor the constructor being documented
++ * @param constructorDocTree the content tree to which the tags will be added
+ */
+- public void writeTags(ConstructorDoc constructor);
++ public void addTags(ConstructorDoc constructor, Content constructorDocTree);
+
+ /**
+- * Write the constructor footer.
++ * Get the constructor details tree.
++ *
++ * @param memberDetailsTree the content tree representing member details
++ * @return content tree for the constructor details
+ */
+- public void writeConstructorFooter();
++ public Content getConstructorDetails(Content memberDetailsTree);
+
+ /**
+- * Write the footer for the constructor documentation.
++ * Get the constructor documentation.
+ *
+- * @param classDoc the class that the constructors belong to.
++ * @param constructorDocTree the content tree representing constructor documentation
++ * @param isLastContent true if the content to be added is the last content
++ * @return content tree for the constructor documentation
+ */
+- public void writeFooter(ClassDoc classDoc);
++ public Content getConstructorDoc(Content constructorDocTree, boolean isLastContent);
+
+ /**
+ * Let the writer know whether a non public constructor was found.
+diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/Content.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/Content.java
+new file mode 100644
+--- /dev/null
++++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/Content.java
+@@ -0,0 +1,106 @@
++/*
++ * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
++ *
++ * This code is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License version 2 only, as
++ * published by the Free Software Foundation. Oracle designates this
++ * particular file as subject to the "Classpath" exception as provided
++ * by Oracle in the LICENSE file that accompanied this code.
++ *
++ * This code is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ * version 2 for more details (a copy is included in the LICENSE file that
++ * accompanied this code).
++ *
++ * You should have received a copy of the GNU General Public License version
++ * 2 along with this work; if not, write to the Free Software Foundation,
++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
++ *
++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
++ * or visit www.oracle.com if you need additional information or have any
++ * questions.
++ */
++
++package com.sun.tools.doclets.internal.toolkit;
++
++import com.sun.tools.doclets.internal.toolkit.util.*;
++
++/**
++ * A class to create content for javadoc output pages.
++ *
++ * @author Bhavesh Patel
++ */
++public abstract class Content {
++
++ /**
++ * Returns a string representation of the content.
++ *
++ * @return string representation of the content
++ */
++ public String toString() {
++ StringBuilder contentBuilder = new StringBuilder();
++ write(contentBuilder);
++ return contentBuilder.toString();
++ }
++
++ /**
++ * Adds content to the existing content.
++ *
++ * @param content content that needs to be added
++ */
++ public abstract void addContent(Content content);
++
++ /**
++ * Adds a string content to the existing content.
++ *
++ * @param stringContent the string content to be added
++ */
++ public abstract void addContent(String stringContent);
++
++ /**
++ * Writes content to a StringBuilder.
++ *
++ */
++ public abstract void write(StringBuilder contentBuilder);
++
++ /**
++ * Returns true if the content is empty.
++ *
++ * @return true if no content to be displayed else return false
++ */
++ public abstract boolean isEmpty();
++
++ /**
++ * Returns true if the content is valid.
++ *
++ * @return true if the content is valid else return false
++ */
++ public boolean isValid() {
++ return !isEmpty();
++ }
++
++ /**
++ * Checks for null values.
++ *
++ * @param t reference type to check for null values
++ * @return the reference type if not null or else throws a null pointer exception
++ */
++ protected static <T> T nullCheck(T t) {
++ t.getClass();
++ return t;
++ }
++
++ /**
++ * Returns true if the content ends with a newline character. Empty content
++ * is considered as ending with new line.
++ *
++ * @param contentBuilder content to test for newline character at the end
++ * @return true if the content ends with newline.
++ */
++ public boolean endsWithNewLine(StringBuilder contentBuilder) {
++ return ((contentBuilder.length() == 0) ||
++ (contentBuilder.substring(contentBuilder.length() - 1).equals("\n")));
++ }
++}
+diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/EnumConstantWriter.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/EnumConstantWriter.java
+--- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/EnumConstantWriter.java
++++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/EnumConstantWriter.java
+@@ -36,67 +36,80 @@
+ * Do not use it as an API
+ *
+ * @author Jamie Ho
++ * @author Bhavesh Patel (Modified)
+ * @since 1.5
+ */
+
+ public interface EnumConstantWriter {
+
+ /**
+- * Write the header for the enum constant documentation.
++ * Get the enum constants details tree header.
+ *
+- * @param classDoc the class that the enum constants belong to.
+- * @param header the header to write.
++ * @param classDoc the class being documented
++ * @param memberDetailsTree the content tree representing member details
++ * @return content tree for the enum constants details header
+ */
+- public void writeHeader(ClassDoc classDoc, String header);
++ public Content getEnumConstantsDetailsTreeHeader(ClassDoc classDoc,
++ Content memberDetailsTree);
+
+ /**
+- * Write the enum constant header for the given enum constant.
++ * Get the enum constants documentation tree header.
+ *
+- * @param enumConstant the enum constant being documented.
+- * @param isFirst the flag to indicate whether or not the enum constant is
+- * the first to be documented.
++ * @param enumConstant the enum constant being documented
++ * @param enumConstantDetailsTree the content tree representing enum constant details
++ * @return content tree for the enum constant documentation header
+ */
+- public void writeEnumConstantHeader(FieldDoc enumConstant, boolean isFirst);
++ public Content getEnumConstantsTreeHeader(FieldDoc enumConstant,
++ Content enumConstantsDetailsTree);
+
+ /**
+- * Write the signature for the given enum constant.
++ * Get the signature for the given enum constant.
+ *
+- * @param enumConstant the enum constant being documented.
++ * @param enumConstant the enum constant being documented
++ * @return content tree for the enum constant signature
+ */
+- public void writeSignature(FieldDoc enumConstant);
++ public Content getSignature(FieldDoc enumConstant);
+
+ /**
+- * Write the deprecated output for the given enum constant.
++ * Add the deprecated output for the given enum constant.
+ *
+- * @param enumConstant the enum constant being documented.
++ * @param enumConstant the enum constant being documented
++ * @param enumConstantsTree content tree to which the deprecated information will be added
+ */
+- public void writeDeprecated(FieldDoc enumConstant);
++ public void addDeprecated(FieldDoc enumConstant, Content enumConstantsTree);
+
+ /**
+- * Write the comments for the given enum constant.
++ * Add the comments for the given enum constant.
+ *
+- * @param enumConstant the enum constant being documented.
++ * @param enumConstant the enum constant being documented
++ * @param enumConstantsTree the content tree to which the comments will be added
+ */
+- public void writeComments(FieldDoc enumConstant);
++ public void addComments(FieldDoc enumConstant, Content enumConstantsTree);
+
+ /**
+- * Write the tag output for the given enum constant.
++ * Add the tags for the given enum constant.
+ *
+- * @param enumConstant the enum constant being documented.
++ * @param enumConstant the enum constant being documented
++ * @param enumConstantsTree the content tree to which the tags will be added
+ */
+- public void writeTags(FieldDoc enumConstant);
++ public void addTags(FieldDoc enumConstant, Content enumConstantsTree);
+
+ /**
+- * Write the enum constant footer.
++ * Get the enum constants details tree.
++ *
++ * @param memberDetailsTree the content tree representing member details
++ * @return content tree for the enum constant details
+ */
+- public void writeEnumConstantFooter();
++ public Content getEnumConstantsDetails(Content memberDetailsTree);
+
+ /**
+- * Write the footer for the enum constant documentation.
++ * Get the enum constants documentation.
+ *
+- * @param classDoc the class that the enum constant belong to.
++ * @param enumConstantsTree the content tree representing enum constants documentation
++ * @param isLastContent true if the content to be added is the last content
++ * @return content tree for the enum constants documentation
+ */
+- public void writeFooter(ClassDoc classDoc);
++ public Content getEnumConstants(Content enumConstantsTree, boolean isLastContent);
+
+ /**
+ * Close the writer.
+diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/FieldWriter.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/FieldWriter.java
+--- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/FieldWriter.java
++++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/FieldWriter.java
+@@ -36,67 +36,80 @@
+ * Do not use it as an API
+ *
+ * @author Jamie Ho
++ * @author Bhavesh Patel (Modified)
+ * @since 1.5
+ */
+
+ public interface FieldWriter {
+
+ /**
+- * Write the header for the field documentation.
++ * Get the field details tree header.
+ *
+- * @param classDoc the class that the fields belong to.
+- * @param header the header to write.
++ * @param classDoc the class being documented
++ * @param memberDetailsTree the content tree representing member details
++ * @return content tree for the field details header
+ */
+- public void writeHeader(ClassDoc classDoc, String header);
++ public Content getFieldDetailsTreeHeader(ClassDoc classDoc,
++ Content memberDetailsTree);
+
+ /**
+- * Write the field header for the given field.
++ * Get the field documentation tree header.
+ *
+- * @param field the field being documented.
+- * @param isFirst the flag to indicate whether or not the field is the
+- * first to be documented.
++ * @param field the constructor being documented
++ * @param fieldDetailsTree the content tree representing field details
++ * @return content tree for the field documentation header
+ */
+- public void writeFieldHeader(FieldDoc field, boolean isFirst);
++ public Content getFieldDocTreeHeader(FieldDoc field,
++ Content fieldDetailsTree);
+
+ /**
+- * Write the signature for the given field.
++ * Get the signature for the given field.
+ *
+- * @param field the field being documented.
++ * @param field the field being documented
++ * @return content tree for the field signature
+ */
+- public void writeSignature(FieldDoc field);
++ public Content getSignature(FieldDoc field);
+
+ /**
+- * Write the deprecated output for the given field.
++ * Add the deprecated output for the given field.
+ *
+- * @param field the field being documented.
++ * @param field the field being documented
++ * @param fieldDocTree content tree to which the deprecated information will be added
+ */
+- public void writeDeprecated(FieldDoc field);
++ public void addDeprecated(FieldDoc field, Content fieldDocTree);
+
+ /**
+- * Write the comments for the given field.
++ * Add the comments for the given field.
+ *
+- * @param field the field being documented.
++ * @param field the field being documented
++ * @param fieldDocTree the content tree to which the comments will be added
+ */
+- public void writeComments(FieldDoc field);
++ public void addComments(FieldDoc field, Content fieldDocTree);
+
+ /**
+- * Write the tag output for the given field.
++ * Add the tags for the given field.
+ *
+- * @param field the field being documented.
++ * @param field the field being documented
++ * @param fieldDocTree the content tree to which the tags will be added
+ */
+- public void writeTags(FieldDoc field);
++ public void addTags(FieldDoc field, Content fieldDocTree);
+
+ /**
+- * Write the field footer.
++ * Get the field details tree.
++ *
++ * @param memberDetailsTree the content tree representing member details
++ * @return content tree for the field details
+ */
+- public void writeFieldFooter();
++ public Content getFieldDetails(Content memberDetailsTree);
+
+ /**
+- * Write the footer for the field documentation.
++ * Get the field documentation.
+ *
+- * @param classDoc the class that the fields belong to.
++ * @param fieldDocTree the content tree representing field documentation
++ * @param isLastContent true if the content to be added is the last content
++ * @return content tree for the field documentation
+ */
+- public void writeFooter(ClassDoc classDoc);
++ public Content getFieldDoc(Content fieldDocTree, boolean isLastContent);
+
+ /**
+ * Close the writer.
+diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/MemberSummaryWriter.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/MemberSummaryWriter.java
+--- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/MemberSummaryWriter.java
++++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/MemberSummaryWriter.java
+@@ -26,6 +26,7 @@
+ package com.sun.tools.doclets.internal.toolkit;
+
+ import java.io.*;
++import java.util.*;
+ import com.sun.javadoc.*;
+
+ /**
+@@ -36,61 +37,77 @@
+ * Do not use it as an API
+ *
+ * @author Jamie Ho
++ * @author Bhavesh Patel (Modified)
+ * @since 1.5
+ */
+
+ public interface MemberSummaryWriter {
+
+ /**
+- * Write the member summary header for the given class.
++ * Get the member summary header for the given class.
+ *
+- * @param classDoc the class the summary belongs to.
++ * @param classDoc the class the summary belongs to
++ * @param memberSummaryTree the content tree to which the member summary will be added
++ * @return a content tree for the member summary header
+ */
+- public void writeMemberSummaryHeader(ClassDoc classDoc);
++ public Content getMemberSummaryHeader(ClassDoc classDoc,
++ Content memberSummaryTree);
+
+ /**
+- * Write the member summary for the given class and member.
++ * Get the summary table for the given class.
+ *
+- * @param classDoc the class the summary belongs to.
+- * @param member the member that I am summarizing.
+- * @param firstSentenceTags the tags for the sentence being documented.
+- * @param isFirst true if this is the first member in the list.
+- * @param isLast true if this the last member being documented.
++ * @param classDoc the class the summary table belongs to
++ * @return a content tree for the member summary table
+ */
+- public void writeMemberSummary(ClassDoc classDoc, ProgramElementDoc member,
+- Tag[] firstSentenceTags, boolean isFirst, boolean isLast);
++ public Content getSummaryTableTree(ClassDoc classDoc);
+
+ /**
+- * Write the member summary footer for the given class.
++ * Add the member summary for the given class and member.
+ *
+- * @param classDoc the class the summary belongs to.
++ * @param classDoc the class the summary belongs to
++ * @param member the member that is documented
++ * @param firstSentenceTags the tags for the sentence being documented
++ * @param tableTree the content treeto which the information will be added
++ * @param counter the counter for determing style for the table row
+ */
+- public void writeMemberSummaryFooter(ClassDoc classDoc);
++ public void addMemberSummary(ClassDoc classDoc, ProgramElementDoc member,
++ Tag[] firstSentenceTags, Content tableTree, int counter);
+
+ /**
+- * Write the inherited member summary header for the given class.
++ * Get the inherited member summary header for the given class.
+ *
+- * @param classDoc the class the summary belongs to.
++ * @param classDoc the class the summary belongs to
++ * @return a content tree containing the inherited summary header
+ */
+- public void writeInheritedMemberSummaryHeader(ClassDoc classDoc);
++ public Content getInheritedSummaryHeader(ClassDoc classDoc);
+
+ /**
+- * Write the inherited member summary for the given class and member.
++ * Add the inherited member summary for the given class and member.
+ *
+- * @param classDoc the class the inherited member belongs to.
+- * @param member the inherited member that I am summarizing.
+- * @param isFirst true if this is the first member in the list.
+- * @param isLast true if this is the last member in the list.
++ * @param classDoc the class the inherited member belongs to
++ * @param member the inherited member that is being documented
++ * @param isFirst true if this is the first member in the list
++ * @param isLast true if this is the last member in the list
++ * @param linksTree the content tree to which the links will be added
+ */
+- public void writeInheritedMemberSummary(ClassDoc classDoc,
+- ProgramElementDoc member, boolean isFirst, boolean isLast);
++ public void addInheritedMemberSummary(ClassDoc classDoc,
++ ProgramElementDoc member, boolean isFirst, boolean isLast,
++ Content linksTree);
+
+ /**
+- * Write the inherited member summary footer for the given class.
++ * Get inherited summary links.
+ *
+- * @param classDoc the class the summary belongs to.
++ * @return a content tree conatining the inherited summary links
+ */
+- public void writeInheritedMemberSummaryFooter(ClassDoc classDoc);
++ public Content getInheritedSummaryLinksTree();
++
++ /**
++ * Get the member tree.
++ *
++ * @param memberTree the content tree representating the member
++ * @return a content tree for the member
++ */
++ public Content getMemberTree(Content memberTree);
+
+ /**
+ * Close the writer.
+diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/MethodWriter.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/MethodWriter.java
+--- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/MethodWriter.java
++++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/MethodWriter.java
+@@ -36,68 +36,81 @@
+ * Do not use it as an API
+ *
+ * @author Jamie Ho
++ * @author Bhavesh Patel (Modified)
+ * @since 1.5
+ */
+
+ public interface MethodWriter {
+
+ /**
+- * Write the header for the method documentation.
++ * Get the method details tree header.
+ *
+- * @param classDoc the class that the methods belong to.
+- * @param header the header to write.
++ * @param classDoc the class being documented
++ * @param memberDetailsTree the content tree representing member details
++ * @return content tree for the method details header
+ */
+- public void writeHeader(ClassDoc classDoc, String header);
++ public Content getMethodDetailsTreeHeader(ClassDoc classDoc,
++ Content memberDetailsTree);
+
+ /**
+- * Write the method header for the given method.
++ * Get the method documentation tree header.
+ *
+- * @param method the method being documented.
+- * @param isFirst the flag to indicate whether or not the method is the
+- * first to be documented.
++ * @param method the method being documented
++ * @param methodDetailsTree the content tree representing method details
++ * @return content tree for the method documentation header
+ */
+- public void writeMethodHeader(MethodDoc method, boolean isFirst);
++ public Content getMethodDocTreeHeader(MethodDoc method,
++ Content methodDetailsTree);
+
+ /**
+- * Write the signature for the given method.
++ * Get the signature for the given method.
+ *
+- * @param method the method being documented.
++ * @param method the method being documented
++ * @return content tree for the method signature
+ */
+- public void writeSignature(MethodDoc method);
++ public Content getSignature(MethodDoc method);
+
+ /**
+- * Write the deprecated output for the given method.
++ * Add the deprecated output for the given method.
+ *
+- * @param method the method being documented.
++ * @param method the method being documented
++ * @param methodDocTree content tree to which the deprecated information will be added
+ */
+- public void writeDeprecated(MethodDoc method);
++ public void addDeprecated(MethodDoc method, Content methodDocTree);
+
+ /**
+- * Write the comments for the given method.
++ * Add the comments for the given method.
+ *
+- * @param holder the holder type (not erasure) of the method.
+- * @param method the method being documented.
++ * @param holder the holder type (not erasure) of the method
++ * @param method the method being documented
++ * @param methodDocTree the content tree to which the comments will be added
+ */
+- public void writeComments(Type holder, MethodDoc method);
++ public void addComments(Type holder, MethodDoc method, Content methodDocTree);
+
+ /**
+- * Write the tag output for the given method.
++ * Add the tags for the given method.
+ *
+- * @param method the method being documented.
++ * @param method the method being documented
++ * @param methodDocTree the content tree to which the tags will be added
+ */
+- public void writeTags(MethodDoc method);
++ public void addTags(MethodDoc method, Content methodDocTree);
+
+ /**
+- * Write the method footer.
++ * Get the method details tree.
++ *
++ * @param methodDetailsTree the content tree representing method details
++ * @return content tree for the method details
+ */
+- public void writeMethodFooter();
++ public Content getMethodDetails(Content methodDetailsTree);
+
+ /**
+- * Write the footer for the method documentation.
++ * Get the method documentation.
+ *
+- * @param classDoc the class that the methods belong to.
++ * @param methodDocTree the content tree representing method documentation
++ * @param isLastContent true if the content to be added is the last content
++ * @return content tree for the method documentation
+ */
+- public void writeFooter(ClassDoc classDoc);
++ public Content getMethodDoc(Content methodDocTree, boolean isLastContent);
+
+ /**
+ * Close the writer.
+diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/NestedClassWriter.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/NestedClassWriter.java
+--- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/NestedClassWriter.java
++++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/NestedClassWriter.java
+@@ -26,7 +26,6 @@
+ package com.sun.tools.doclets.internal.toolkit;
+
+ import java.io.*;
+-import com.sun.javadoc.*;
+
+ /**
+ * The interface for writing class output.
+@@ -36,59 +35,13 @@
+ * Do not use it as an API
+ *
+ * @author Jamie Ho
++ * @author Bhavesh Patel (Modified)
+ * @since 1.5
+ */
+
+ public interface NestedClassWriter {
+
+ /**
+- * Write the classes summary header for the given class.
+- *
+- * @param nestedClass the class the summary belongs to.
+- */
+- public void writeNestedClassSummaryHeader(ClassDoc nestedClass);
+-
+- /**
+- * Write the class summary for the given class and class.
+- *
+- * @param classDoc the class the summary belongs to.
+- * @param nestedClass the nested class that I am summarizing.
+- */
+- public void writeNestedClassSummary(ClassDoc classDoc, ClassDoc nestedClass);
+-
+- /**
+- * Write the classes summary footer for the given class.
+- *
+- * @param nestedClass the class the summary belongs to.
+- */
+- public void writeNestedClassSummaryFooter(ClassDoc nestedClass);
+-
+- /**
+- * Write the inherited classes summary header for the given class.
+- *
+- * @param nestedClass the class the summary belongs to.
+- */
+- public void writeInheritedNestedClassSummaryHeader(ClassDoc nestedClass);
+-
+- /**
+- * Write the inherited nested class summary for the given class and nested
+- * class.
+- *
+- * @param classDoc the class the inherited nested class belongs to.
+- * @param nestedClass the inherited nested class that I am summarizing.
+- * @param isFirst true if this is the first member in the list.
+- */
+- public void writeInheritedNestedClassSummary(ClassDoc classDoc,
+- ClassDoc nestedClass, boolean isFirst);
+-
+- /**
+- * Write the inherited classes summary footer for the given class.
+- *
+- * @param nestedClass the class the summary belongs to.
+- */
+- public void writeInheritedNestedClassSummaryFooter(ClassDoc nestedClass);
+-
+- /**
+ * Close the writer.
+ */
+ public void close() throws IOException;
+diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/PackageSummaryWriter.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/PackageSummaryWriter.java
+--- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/PackageSummaryWriter.java
++++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/PackageSummaryWriter.java
+@@ -36,6 +36,7 @@
+ * Do not use it as an API
+ *
+ * @author Jamie Ho
++ * @author Bhavesh Patel (Modified)
+ * @since 1.5
+ */
+
+@@ -49,45 +50,70 @@
+ public abstract String getOutputFileName();
+
+ /**
+- * Write the header for the package summary.
++ * Get the header for the summary.
++ *
++ * @param heading Package name.
++ * @return the header to be added to the content tree
+ */
+- public abstract void writeSummaryHeader();
++ public abstract Content getPackageHeader(String heading);
+
+ /**
+- * Write the footer for the package summary.
++ * Get the header for the package content.
++ *
++ * @return a content tree for the package content header
+ */
+- public abstract void writeSummaryFooter();
++ public abstract Content getContentHeader();
+
+ /**
+- * Write the table of classes in this package.
++ * Get the header for the package summary.
++ *
++ * @return a content tree with the package summary header
++ */
++ public abstract Content getSummaryHeader();
++
++ /**
++ * Adds the table of classes to the documentation tree.
+ *
+ * @param classes the array of classes to document.
+ * @param label the label for this table.
++ * @param tableSummary the summary string for the table
++ * @param tableHeader array of table headers
++ * @param summaryContentTree the content tree to which the summaries will be added
+ */
+- public abstract void writeClassesSummary(ClassDoc[] classes, String label, String tableSummary, String[] tableHeader);
++ public abstract void addClassesSummary(ClassDoc[] classes, String label,
++ String tableSummary, String[] tableHeader, Content summaryContentTree);
+
+ /**
+- * Write the header for the summary.
++ * Adds the package description from the "packages.html" file to the documentation
++ * tree.
+ *
+- * @param heading Package name.
++ * @param packageContentTree the content tree to which the package description
++ * will be added
+ */
+- public abstract void writePackageHeader(String heading);
++ public abstract void addPackageDescription(Content packageContentTree);
+
+ /**
+- * Print the package description from the "packages.html" file.
++ * Adds the tag information from the "packages.html" file to the documentation
++ * tree.
++ *
++ * @param packageContentTree the content tree to which the package tags will
++ * be added
+ */
+- public abstract void writePackageDescription();
++ public abstract void addPackageTags(Content packageContentTree);
+
+ /**
+- * Print the tag information from the "packages.html" file.
++ * Adds the footer to the documentation tree.
++ *
++ * @param contentTree the tree to which the footer will be added
+ */
+- public abstract void writePackageTags();
++ public abstract void addPackageFooter(Content contentTree);
+
+ /**
+- * Write the footer for the summary.
++ * Print the package summary document.
+ *
++ * @param contentTree the content tree that will be printed
+ */
+- public abstract void writePackageFooter();
++ public abstract void printDocument(Content contentTree);
+
+ /**
+ * Close the writer.
+diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/SerializedFormWriter.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/SerializedFormWriter.java
+--- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/SerializedFormWriter.java
++++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/SerializedFormWriter.java
+@@ -43,33 +43,73 @@
+ public interface SerializedFormWriter {
+
+ /**
+- * Write the given header.
++ * Get the header.
+ *
+ * @param header the header to write.
++ * @return the header content tree
+ */
+- public void writeHeader(String header);
++ public Content getHeader(String header);
+
+ /**
+- * Write the given package header.
++ * Get the serialized form summaries header.
+ *
+- * @param packageName the package header to write.
++ * @return the serialized form summary header tree
+ */
+- public void writePackageHeader(String packageName);
++ public Content getSerializedSummariesHeader();
+
+ /**
+- * Write the heading for the serializable class.
++ * Get the package serialized form header.
+ *
+- * @param classDoc the class being processed.
++ * @return the package serialized form header tree
+ */
+- public void writeClassHeader(ClassDoc classDoc);
++ public Content getPackageSerializedHeader();
+
+ /**
+- * Write the serial UID info.
++ * Get the given package header.
++ *
++ * @param packageName the package header to write
++ * @return a content tree for the package header
++ */
++ public Content getPackageHeader(String packageName);
++
++ /**
++ * Get the serialized class header.
++ *
++ * @return a content tree for the serialized class header
++ */
++ public Content getClassSerializedHeader();
++
++ /**
++ * Get the heading for the serializable class.
++ *
++ * @param classDoc the class being processed
++ * @return a content tree for the class heading
++ */
++ public Content getClassHeader(ClassDoc classDoc);
++
++ /**
++ * Get the serial UID info header.
++ *
++ * @return a content tree for the serial uid info header
++ */
++ public Content getSerialUIDInfoHeader();
++
++ /**
++ * Adds the serial UID info.
+ *
+ * @param header the header that will show up before the UID.
+ * @param serialUID the serial UID to print.
++ * @param serialUidTree the serial UID tree to which the content will be added.
+ */
+- public void writeSerialUIDInfo(String header, String serialUID);
++ public void addSerialUIDInfo(String header, String serialUID,
++ Content serialUidTree);
++
++ /**
++ * Get the class serialize content header.
++ *
++ * @return a content tree for the class serialize content header
++ */
++ public Content getClassContentHeader();
+
+ /**
+ * Return an instance of a SerialFieldWriter.
+@@ -91,9 +131,26 @@
+ public abstract void close() throws IOException;
+
+ /**
+- * Write the footer.
++ * Get the serialized content.
++ *
++ * @param serializedTreeContent content for serialized data
++ * @return a content tree for serialized information
+ */
+- public void writeFooter();
++ public Content getSerializedContent(Content serializedTreeContent);
++
++ /**
++ * Add the footer.
++ *
++ * @param serializedTree the serialized tree to be added
++ */
++ public void addFooter(Content serializedTree);
++
++ /**
++ * Print the serialized form document.
++ *
++ * @param serializedTree the content tree that will be printed
++ */
++ public abstract void printDocument(Content serializedTree);
+
+ /**
+ * Write the serialized form for a given field.
+@@ -101,56 +158,73 @@
+ public interface SerialFieldWriter {
+
+ /**
+- * Write the given heading.
++ * Get the serializable field header.
++ *
++ * @return serialized fields header content tree
++ */
++ public Content getSerializableFieldsHeader();
++
++ /**
++ * Get the field content header.
++ *
++ * @param isLastContent true if this is the last content to be documented
++ * @return fields header content tree
++ */
++ public Content getFieldsContentHeader(boolean isLastContent);
++
++ /**
++ * Get the fields content.
+ *
+ * @param heading the heading to write.
++ * @param contentTree content tree to which the heading will be added
++ * @return serializable fields content tree
+ */
+- public void writeHeader(String heading);
++ public Content getSerializableFields(String heading, Content contentTree);
+
+ /**
+- * Write the deprecated information for this member.
++ * Adds the deprecated information for this member.
+ *
+ * @param field the field to document.
++ * @param contentTree content tree to which the deprecated information will be added
+ */
+- public void writeMemberDeprecatedInfo(FieldDoc field);
++ public void addMemberDeprecatedInfo(FieldDoc field, Content contentTree);
+
+ /**
+- * Write the description text for this member.
++ * Adds the description text for this member.
+ *
+ * @param field the field to document.
++ * @param contentTree content tree to which the member description will be added
+ */
+- public void writeMemberDescription(FieldDoc field);
++ public void addMemberDescription(FieldDoc field, Content contentTree);
+
+ /**
+- * Write the description text for this member represented by the tag.
++ * Adds the description text for this member represented by the tag.
+ *
+ * @param serialFieldTag the field to document (represented by tag).
++ * @param contentTree content tree to which the member description will be added
+ */
+- public void writeMemberDescription(SerialFieldTag serialFieldTag);
++ public void addMemberDescription(SerialFieldTag serialFieldTag, Content contentTree);
+
+ /**
+- * Write the tag information for this member.
++ * Adds the tag information for this member.
+ *
+ * @param field the field to document.
++ * @param contentTree content tree to which the member tags will be added
+ */
+- public void writeMemberTags(FieldDoc field);
++ public void addMemberTags(FieldDoc field, Content contentTree);
+
+ /**
+- * Write the member header.
++ * Adds the member header.
+ *
+ * @param fieldType the type of the field.
+ * @param fieldTypeStr the type of the field in string format. We will
+ * print this out if we can't link to the type.
+ * @param fieldDimensions the dimensions of the field.
+ * @param fieldName the name of the field.
++ * @param contentTree content tree to which the member header will be added
+ */
+- public void writeMemberHeader(ClassDoc fieldType, String fieldTypeStr,
+- String fieldDimensions, String fieldName);
+-
+- /**
+- * Write the member footer.
+- */
+- public void writeMemberFooter();
++ public void addMemberHeader(ClassDoc fieldType, String fieldTypeStr,
++ String fieldDimensions, String fieldName, Content contentTree);
+
+ /**
+ * Check to see if overview details should be printed. If
+@@ -162,13 +236,6 @@
+ * @return true if overview details need to be printed
+ */
+ public boolean shouldPrintOverview(FieldDoc field);
+-
+- /**
+- * Write the footer.
+- *
+- * @param heading the heading that was written.
+- */
+- public void writeFooter (String heading);
+ }
+
+ /**
+@@ -177,44 +244,70 @@
+ public interface SerialMethodWriter {
+
+ /**
++ * Get the serializable method header.
++ *
++ * @return serializable methods content tree
++ */
++ public Content getSerializableMethodsHeader();
++
++ /**
++ * Get the method content header.
++ *
++ * @param isLastContent true if this is the last content to be documented
++ * @return methods content tree
++ */
++ public Content getMethodsContentHeader(boolean isLastContent);
++
++ /**
+ * Write the given heading.
+ *
+- * @param heading the heading to write.
++ * @param heading the heading to write
++ * @param serializableMethodTree content tree which will be added
++ * @return serializable methods content tree
+ */
+- public void writeHeader(String heading);
++ public Content getSerializableMethods(String heading, Content serializableMethodTree);
+
+ /**
+ * Write a warning that no serializable methods exist.
+ *
+- * @param msg the warning to print.
++ * @param msg the warning to print
++ * @return no customization message tree
+ */
+- public void writeNoCustomizationMsg(String msg);
++ public Content getNoCustomizationMsg(String msg);
+
+ /**
+- * Write the header.
++ * Adds the header.
+ *
+- * @param member the member to write the header for.
++ * @param member the member to write the header for
++ * @param methodsContentTree content tree to which the header will be added
+ */
+- public void writeMemberHeader(MethodDoc member);
++ public void addMemberHeader(MethodDoc member, Content methodsContentTree);
+
+ /**
+- * Write the footer.
++ * Adds the deprecated information for this member.
++ *
++ * @param member the member to write the deprecated information for
++ * @param methodsContentTree content tree to which the deprecated
++ * information will be added
+ */
+- public void writeMemberFooter();
++ public void addDeprecatedMemberInfo(MethodDoc member, Content methodsContentTree);
+
+ /**
+- * Write the deprecated information for this member.
++ * Adds the description for this member.
++ *
++ * @param member the member to write the information for
++ * @param methodsContentTree content tree to which the member
++ * information will be added
+ */
+- public void writeDeprecatedMemberInfo(MethodDoc member);
++ public void addMemberDescription(MethodDoc member, Content methodsContentTree);
+
+ /**
+- * Write the description for this member.
++ * Adds the tag information for this member.
++ *
++ * @param member the member to write the tags information for
++ * @param methodsContentTree content tree to which the tags
++ * information will be added
+ */
+- public void writeMemberDescription(MethodDoc member);
+-
+- /**
+- * Write the tag information for this member.
+- */
+- public void writeMemberTags(MethodDoc member);
++ public void addMemberTags(MethodDoc member, Content methodsContentTree);
+ }
+ }
+diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AbstractBuilder.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AbstractBuilder.java
+--- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AbstractBuilder.java
++++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AbstractBuilder.java
+@@ -95,13 +95,14 @@
+ * Build the documentation, as specified by the given XML element.
+ *
+ * @param node the XML element that specifies which component to document.
++ * @param contentTree content tree to which the documentation will be added
+ */
+ protected void build(XMLNode node) {
+ String component = node.name;
+ try {
+ invokeMethod("build" + component,
+- new Class<?>[] { XMLNode.class },
+- new Object[] { node });
++ new Class<?>[]{XMLNode.class, Content.class},
++ new Object[]{node, contentTree});
+ } catch (NoSuchMethodException e) {
+ e.printStackTrace();
+ configuration.root.printError("Unknown element: " + component);
+@@ -111,8 +112,8 @@
+ } catch (Exception e) {
+ e.printStackTrace();
+ configuration.root.printError("Exception " +
+- e.getClass().getName() +
+- " thrown while processing element: " + component);
++ e.getClass().getName() +
++ " thrown while processing element: " + component);
+ throw new DocletAbortException();
+ }
+ }
+@@ -121,10 +122,11 @@
+ * Build the documentation, as specified by the children of the given XML element.
+ *
+ * @param node the XML element that specifies which components to document.
++ * @param contentTree content tree to which the documentation will be added
+ */
+- protected void buildChildren(XMLNode node) {
+- for (XMLNode child: node.children)
+- build(child);
++ protected void buildChildren(XMLNode node, Content contentTree) {
++ for (XMLNode child : node.children)
++ build(child, contentTree);
+ }
+
+ /**
+@@ -140,8 +142,7 @@
+ Object[] params)
+ throws Exception {
+ if (DEBUG) {
+- configuration.root.printError("DEBUG: " + this.getClass().getName()
+- + "." + methodName);
++ configuration.root.printError("DEBUG: " + this.getClass().getName() + "." + methodName);
+ }
+ Method method = this.getClass().getMethod(methodName, paramClasses);
+ method.invoke(this, params);
+diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AbstractMemberBuilder.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AbstractMemberBuilder.java
+--- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AbstractMemberBuilder.java
++++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AbstractMemberBuilder.java
+@@ -27,6 +27,7 @@
+
+ import com.sun.tools.doclets.internal.toolkit.*;
+ import com.sun.tools.doclets.internal.toolkit.util.*;
++import java.util.*;
+
+ /**
+ * The superclass for all member builders. Member builders are only executed
+@@ -66,12 +67,13 @@
+ /**
+ * Build the sub component if there is anything to document.
+ *
+- * @param elements {@inheritDoc}
++ * @param node the XML element that specifies which components to document.
++ * @param contentTree content tree to which the documentation will be added
+ */
+ @Override
+- public void build(XMLNode node) {
++ public void build(XMLNode node, Content contentTree) {
+ if (hasMembersToDocument()) {
+- super.build(node);
++ super.build(node, contentTree);
+ }
+ }
+
+diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeBuilder.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeBuilder.java
+--- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeBuilder.java
++++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeBuilder.java
+@@ -1,5 +1,5 @@
+ /*
+- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
++ * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+@@ -25,11 +25,11 @@
+
+ package com.sun.tools.doclets.internal.toolkit.builders;
+
++import java.io.*;
++import java.util.*;
+ import com.sun.tools.doclets.internal.toolkit.util.*;
+ import com.sun.tools.doclets.internal.toolkit.*;
+ import com.sun.javadoc.*;
+-import java.io.*;
+-import java.util.*;
+
+ /**
+ * Builds the summary for a given annotation type.
+@@ -39,6 +39,7 @@
+ * Do not use it as an API
+ *
+ * @author Jamie Ho
++ * @author Bhavesh Patel (Modified)
+ * @since 1.5
+ */
+ public class AnnotationTypeBuilder extends AbstractBuilder {
+@@ -59,6 +60,11 @@
+ private AnnotationTypeWriter writer;
+
+ /**
++ * The content tree for the annotation documentation.
++ */
++ private Content contentTree;
++
++ /**
+ * Construct a new ClassBuilder.
+ *
+ * @param configuration the current configuration of the
+@@ -83,7 +89,7 @@
+ builder.annotationTypeDoc = annotationTypeDoc;
+ builder.writer = writer;
+ if(containingPackagesSeen == null) {
+- containingPackagesSeen = new HashSet();
++ containingPackagesSeen = new HashSet<String>();
+ }
+ return builder;
+ }
+@@ -92,7 +98,7 @@
+ * {@inheritDoc}
+ */
+ public void build() throws IOException {
+- build(LayoutParser.getInstance(configuration).parseXML(ROOT));
++ build(LayoutParser.getInstance(configuration).parseXML(ROOT), contentTree);
+ }
+
+ /**
+@@ -102,18 +108,24 @@
+ return ROOT;
+ }
+
+- /**
+- * Handles the &lt;AnnotationTypeDoc> tag.
++ /**
++ * Build the annotation type documentation.
+ *
+- * @param elements the XML elements that specify how to document a class.
++ * @param node the XML element that specifies which components to document
++ * @param contentTree the content tree to which the documentation will be added
+ */
+- public void buildAnnotationTypeDoc(XMLNode node) throws Exception {
+- buildChildren(node);
+- writer.close();
+- copyDocFiles();
++ public void buildAnnotationTypeDoc(XMLNode node, Content contentTree) throws Exception {
++ contentTree = writer.getHeader(configuration.getText("doclet.AnnotationType") +
++ " " + annotationTypeDoc.name());
++ Content annotationContentTree = writer.getAnnotationContentHeader();
++ buildChildren(node, annotationContentTree);
++ contentTree.addContent(annotationContentTree);
++ writer.addFooter(contentTree);
++ writer.printDocument(contentTree);
++ writer.close();
++ copyDocFiles();
+ }
+
+-
+ /**
+ * Copy the doc files for the current ClassDoc if necessary.
+ */
+@@ -137,86 +149,112 @@
+ }
+
+ /**
+- * Build the header of the page.
++ * Build the annotation information tree documentation.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param annotationContentTree the content tree to which the documentation will be added
+ */
+- public void buildAnnotationTypeHeader(XMLNode node) {
+- writer.writeHeader(configuration.getText("doclet.AnnotationType") +
+- " " + annotationTypeDoc.name());
++ public void buildAnnotationTypeInfo(XMLNode node, Content annotationContentTree) {
++ Content annotationInfoTree = writer.getAnnotationInfoTreeHeader();
++ buildChildren(node, annotationInfoTree);
++ annotationContentTree.addContent(writer.getAnnotationInfo(annotationInfoTree));
+ }
+
+ /**
+- * If this class is deprecated, print the appropriate information.
++ * If this annotation is deprecated, build the appropriate information.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param annotationInfoTree the content tree to which the documentation will be added
+ */
+- public void buildDeprecationInfo (XMLNode node) {
+- writer.writeAnnotationTypeDeprecationInfo();
++ public void buildDeprecationInfo (XMLNode node, Content annotationInfoTree) {
++ writer.addAnnotationTypeDeprecationInfo(annotationInfoTree);
+ }
+
+ /**
+ * Build the signature of the current annotation type.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param annotationInfoTree the content tree to which the documentation will be added
+ */
+- public void buildAnnotationTypeSignature(XMLNode node) {
++ public void buildAnnotationTypeSignature(XMLNode node, Content annotationInfoTree) {
+ StringBuffer modifiers = new StringBuffer(
+- annotationTypeDoc.modifiers() + " ");
+- writer.writeAnnotationTypeSignature(
+- Util.replaceText(
+- modifiers.toString(), "interface", "@interface"));
++ annotationTypeDoc.modifiers() + " ");
++ writer.addAnnotationTypeSignature(Util.replaceText(
++ modifiers.toString(), "interface", "@interface"), annotationInfoTree);
+ }
+
+ /**
+- * Build the class description.
++ * Build the annotation type description.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param annotationInfoTree the content tree to which the documentation will be added
+ */
+- public void buildAnnotationTypeDescription(XMLNode node) {
+- writer.writeAnnotationTypeDescription();
++ public void buildAnnotationTypeDescription(XMLNode node, Content annotationInfoTree) {
++ writer.addAnnotationTypeDescription(annotationInfoTree);
+ }
+
+ /**
+- * Build the tag information for the current class.
++ * Build the tag information for the current annotation type.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param annotationInfoTree the content tree to which the documentation will be added
+ */
+- public void buildAnnotationTypeTagInfo(XMLNode node) {
+- writer.writeAnnotationTypeTagInfo();
++ public void buildAnnotationTypeTagInfo(XMLNode node, Content annotationInfoTree) {
++ writer.addAnnotationTypeTagInfo(annotationInfoTree);
+ }
+
+ /**
+- * Build the contents of the page.
++ * Build the member summary contents of the page.
+ *
+- * @param elements the XML elements that specify how a member summary is
+- * documented.
++ * @param node the XML element that specifies which components to document
++ * @param annotationContentTree the content tree to which the documentation will be added
+ */
+- public void buildMemberSummary(XMLNode node) throws Exception {
++ public void buildMemberSummary(XMLNode node, Content annotationContentTree)
++ throws Exception {
++ Content memberSummaryTree = writer.getMemberTreeHeader();
+ configuration.getBuilderFactory().
+- getMemberSummaryBuilder(writer).buildChildren(node);
+- writer.completeMemberSummaryBuild();
++ getMemberSummaryBuilder(writer).buildChildren(node, memberSummaryTree);
++ annotationContentTree.addContent(writer.getMemberSummaryTree(memberSummaryTree));
++ }
++
++ /**
++ * Build the member details contents of the page.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param annotationContentTree the content tree to which the documentation will be added
++ */
++ public void buildAnnotationTypeMemberDetails(XMLNode node, Content annotationContentTree) {
++ Content memberDetailsTree = writer.getMemberTreeHeader();
++ buildChildren(node, memberDetailsTree);
++ if (memberDetailsTree.isValid()) {
++ Content memberDetails = writer.getMemberTreeHeader();
++ writer.addAnnotationDetailsMarker(memberDetails);
++ memberDetails.addContent(writer.getMemberTree(memberDetailsTree));
++ annotationContentTree.addContent(writer.getMemberDetailsTree(memberDetails));
++ }
+ }
+
+ /**
+ * Build the annotation type optional member documentation.
+ *
+- * @param elements the XML elements that specify how a annotation type
+- * members are documented.
++ * @param node the XML element that specifies which components to document
++ * @param memberDetailsTree the content tree to which the documentation will be added
+ */
+- public void buildAnnotationTypeOptionalMemberDetails(XMLNode node)
+- throws Exception {
++ public void buildAnnotationTypeOptionalMemberDetails(XMLNode node, Content memberDetailsTree)
++ throws Exception {
+ configuration.getBuilderFactory().
+- getAnnotationTypeOptionalMemberBuilder(writer).buildChildren(node);
++ getAnnotationTypeOptionalMemberBuilder(writer).buildChildren(node, memberDetailsTree);
+ }
+
+ /**
+ * Build the annotation type required member documentation.
+ *
+- * @param elements the XML elements that specify how a annotation type
+- * members are documented.
++ * @param node the XML element that specifies which components to document
++ * @param memberDetailsTree the content tree to which the documentation will be added
+ */
+- public void buildAnnotationTypeRequiredMemberDetails(XMLNode node)
+- throws Exception {
++ public void buildAnnotationTypeRequiredMemberDetails(XMLNode node, Content memberDetailsTree)
++ throws Exception {
+ configuration.getBuilderFactory().
+- getAnnotationTypeRequiredMemberBuilder(writer).buildChildren(node);
+- }
+-
+-
+- /**
+- * Build the footer of the page.
+- */
+- public void buildAnnotationTypeFooter(XMLNode node) {
+- writer.writeFooter();
++ getAnnotationTypeRequiredMemberBuilder(writer).buildChildren(node, memberDetailsTree);
+ }
+ }
+diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeOptionalMemberBuilder.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeOptionalMemberBuilder.java
+--- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeOptionalMemberBuilder.java
++++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeOptionalMemberBuilder.java
+@@ -25,11 +25,10 @@
+
+ package com.sun.tools.doclets.internal.toolkit.builders;
+
+-
++import java.util.*;
+ import com.sun.tools.doclets.internal.toolkit.util.*;
+ import com.sun.tools.doclets.internal.toolkit.*;
+ import com.sun.javadoc.*;
+-import java.util.*;
+
+ /**
+ * Builds documentation for optional annotation type members.
+@@ -39,6 +38,7 @@
+ * Do not use it as an API
+ *
+ * @author Jamie Ho
++ * @author Bhavesh Patel (Modified)
+ * @since 1.5
+ */
+ public class AnnotationTypeOptionalMemberBuilder extends
+@@ -90,27 +90,25 @@
+ }
+
+ /**
+- * Build the member documentation.
++ * Build the annotation type optional member documentation.
+ *
+- * @param elements the XML elements that specify how to construct this
+- * documentation.
++ * @param node the XML element that specifies which components to document
++ * @param memberDetailsTree the content tree to which the documentation will be added
+ */
+- public void buildAnnotationTypeOptionalMember(XMLNode node) {
+- if (writer == null) {
+- return;
+- }
+- for (currentMemberIndex = 0; currentMemberIndex < members.size();
+- currentMemberIndex++) {
+- buildChildren(node);
+- }
++ public void buildAnnotationTypeOptionalMember(XMLNode node, Content memberDetailsTree) {
++ buildAnnotationTypeMember(node, memberDetailsTree);
+ }
+
+ /**
+- * Document the default value for this optional member.
++ * Build the default value for this optional member.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param annotationDocTree the content tree to which the documentation will be added
+ */
+- public void buildDefaultValueInfo(XMLNode node) {
+- ((AnnotationTypeOptionalMemberWriter) writer).writeDefaultValueInfo(
+- (MemberDoc) members.get(currentMemberIndex));
++ public void buildDefaultValueInfo(XMLNode node, Content annotationDocTree) {
++ ((AnnotationTypeOptionalMemberWriter) writer).addDefaultValueInfo(
++ (MemberDoc) members.get(currentMemberIndex),
++ annotationDocTree);
+ }
+
+ /**
+diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeRequiredMemberBuilder.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeRequiredMemberBuilder.java
+--- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeRequiredMemberBuilder.java
++++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AnnotationTypeRequiredMemberBuilder.java
+@@ -25,11 +25,10 @@
+
+ package com.sun.tools.doclets.internal.toolkit.builders;
+
+-
++import java.util.*;
+ import com.sun.tools.doclets.internal.toolkit.util.*;
+ import com.sun.tools.doclets.internal.toolkit.*;
+ import com.sun.javadoc.*;
+-import java.util.*;
+
+ /**
+ * Builds documentation for required annotation type members.
+@@ -39,6 +38,7 @@
+ * Do not use it as an API
+ *
+ * @author Jamie Ho
++ * @author Bhavesh Patel (Modified)
+ * @since 1.5
+ */
+ public class AnnotationTypeRequiredMemberBuilder extends AbstractMemberBuilder {
+@@ -141,81 +141,86 @@
+ }
+
+ /**
++ * Build the annotation type required member documentation.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param memberDetailsTree the content tree to which the documentation will be added
++ */
++ public void buildAnnotationTypeRequiredMember(XMLNode node, Content memberDetailsTree) {
++ buildAnnotationTypeMember(node, memberDetailsTree);
++ }
++
++ /**
+ * Build the member documentation.
+ *
+- * @param elements the XML elements that specify how to construct this
+- * documentation.
++ * @param node the XML element that specifies which components to document
++ * @param memberDetailsTree the content tree to which the documentation will be added
+ */
+- public void buildAnnotationTypeRequiredMember(XMLNode node) {
++ public void buildAnnotationTypeMember(XMLNode node, Content memberDetailsTree) {
+ if (writer == null) {
+ return;
+ }
+- for (currentMemberIndex = 0; currentMemberIndex < members.size();
++ int size = members.size();
++ if (size > 0) {
++ writer.addAnnotationDetailsTreeHeader(
++ classDoc, memberDetailsTree);
++ for (currentMemberIndex = 0; currentMemberIndex < size;
+ currentMemberIndex++) {
+- buildChildren(node);
+- }
+- }
+-
+- /**
+- * Build the overall header.
+- */
+- public void buildHeader(XMLNode node) {
+- writer.writeHeader(classDoc,
+- configuration.getText("doclet.Annotation_Type_Member_Detail"));
+- }
+-
+- /**
+- * Build the header for the individual members.
+- */
+- public void buildMemberHeader(XMLNode node) {
+- writer.writeMemberHeader((MemberDoc) members.get(
+- currentMemberIndex),
+- currentMemberIndex == 0);
++ Content annotationDocTree = writer.getAnnotationDocTreeHeader(
++ (MemberDoc) members.get(currentMemberIndex),
++ memberDetailsTree);
++ buildChildren(node, annotationDocTree);
++ memberDetailsTree.addContent(writer.getAnnotationDoc(
++ annotationDocTree, (currentMemberIndex == size - 1)));
++ }
++ }
+ }
+
+ /**
+ * Build the signature.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param annotationDocTree the content tree to which the documentation will be added
+ */
+- public void buildSignature(XMLNode node) {
+- writer.writeSignature((MemberDoc) members.get(currentMemberIndex));
++ public void buildSignature(XMLNode node, Content annotationDocTree) {
++ annotationDocTree.addContent(
++ writer.getSignature((MemberDoc) members.get(currentMemberIndex)));
+ }
+
+ /**
+ * Build the deprecation information.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param annotationDocTree the content tree to which the documentation will be added
+ */
+- public void buildDeprecationInfo(XMLNode node) {
+- writer.writeDeprecated((MemberDoc) members.get(currentMemberIndex));
++ public void buildDeprecationInfo(XMLNode node, Content annotationDocTree) {
++ writer.addDeprecated((MemberDoc) members.get(currentMemberIndex),
++ annotationDocTree);
+ }
+
+ /**
+ * Build the comments for the member. Do nothing if
+ * {@link Configuration#nocomment} is set to true.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param annotationDocTree the content tree to which the documentation will be added
+ */
+- public void buildMemberComments(XMLNode node) {
++ public void buildMemberComments(XMLNode node, Content annotationDocTree) {
+ if(! configuration.nocomment){
+- writer.writeComments((MemberDoc) members.get(currentMemberIndex));
++ writer.addComments((MemberDoc) members.get(currentMemberIndex),
++ annotationDocTree);
+ }
+ }
+
+ /**
+ * Build the tag information.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param annotationDocTree the content tree to which the documentation will be added
+ */
+- public void buildTagInfo(XMLNode node) {
+- writer.writeTags((MemberDoc) members.get(currentMemberIndex));
+- }
+-
+- /**
+- * Build the footer for the individual member.
+- */
+- public void buildMemberFooter(XMLNode node) {
+- writer.writeMemberFooter();
+- }
+-
+- /**
+- * Build the overall footer.
+- */
+- public void buildFooter(XMLNode node) {
+- writer.writeFooter(classDoc);
++ public void buildTagInfo(XMLNode node, Content annotationDocTree) {
++ writer.addTags((MemberDoc) members.get(currentMemberIndex),
++ annotationDocTree);
+ }
+
+ /**
+diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/ClassBuilder.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/ClassBuilder.java
+--- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/ClassBuilder.java
++++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/ClassBuilder.java
+@@ -25,11 +25,11 @@
+
+ package com.sun.tools.doclets.internal.toolkit.builders;
+
++import java.io.*;
++import java.util.*;
+ import com.sun.tools.doclets.internal.toolkit.util.*;
+ import com.sun.tools.doclets.internal.toolkit.*;
+ import com.sun.javadoc.*;
+-import java.io.*;
+-import java.util.*;
+
+ /**
+ * Builds the summary for a given class.
+@@ -39,6 +39,7 @@
+ * Do not use it as an API
+ *
+ * @author Jamie Ho
++ * @author Bhavesh Patel (Modified)
+ * @since 1.5
+ */
+ public class ClassBuilder extends AbstractBuilder {
+@@ -69,6 +70,11 @@
+ private boolean isEnum = false;
+
+ /**
++ * The content tree for the class documentation.
++ */
++ private Content contentTree;
++
++ /**
+ * Construct a new ClassBuilder.
+ *
+ * @param configuration the current configuration of the
+@@ -108,7 +114,7 @@
+ * {@inheritDoc}
+ */
+ public void build() throws IOException {
+- build(LayoutParser.getInstance(configuration).parseXML(ROOT));
++ build(LayoutParser.getInstance(configuration).parseXML(ROOT), contentTree);
+ }
+
+ /**
+@@ -121,121 +127,159 @@
+ /**
+ * Handles the &lt;ClassDoc> tag.
+ *
+- * @param elements the XML elements that specify how to document a class.
++ * @param node the XML element that specifies which components to document
++ * @param contentTree the content tree to which the documentation will be added
+ */
+- public void buildClassDoc(XMLNode node) throws Exception {
+- buildChildren(node);
+- writer.close();
+- copyDocFiles();
++ public void buildClassDoc(XMLNode node, Content contentTree) throws Exception {
++ String key;
++ if (isInterface) {
++ key = "doclet.Interface";
++ } else if (isEnum) {
++ key = "doclet.Enum";
++ } else {
++ key = "doclet.Class";
++ }
++ contentTree = writer.getHeader(configuration.getText(key) + " " +
++ classDoc.name());
++ Content classContentTree = writer.getClassContentHeader();
++ buildChildren(node, classContentTree);
++ contentTree.addContent(classContentTree);
++ writer.addFooter(contentTree);
++ writer.printDocument(contentTree);
++ writer.close();
++ copyDocFiles();
+ }
+
++ /**
++ * Build the class tree documentation.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param classContentTree the content tree to which the documentation will be added
++ */
++ public void buildClassTree(XMLNode node, Content classContentTree) {
++ writer.addClassTree(classContentTree);
++ }
+
+- /**
+- * Copy the doc files for the current ClassDoc if necessary.
+- */
++ /**
++ * Build the class information tree documentation.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param classContentTree the content tree to which the documentation will be added
++ */
++ public void buildClassInfo(XMLNode node, Content classContentTree) {
++ Content classInfoTree = writer.getClassInfoTreeHeader();
++ buildChildren(node, classInfoTree);
++ classContentTree.addContent(writer.getClassInfo(classInfoTree));
++ }
++
++ /**
++ * Build the typeparameters of this class.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param classInfoTree the content tree to which the documentation will be added
++ */
++ public void buildTypeParamInfo(XMLNode node, Content classInfoTree) {
++ writer.addTypeParamInfo(classInfoTree);
++ }
++
++ /**
++ * If this is an interface, list all super interfaces.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param classInfoTree the content tree to which the documentation will be added
++ */
++ public void buildSuperInterfacesInfo(XMLNode node, Content classInfoTree) {
++ writer.addSuperInterfacesInfo(classInfoTree);
++ }
++
++ /**
++ * If this is a class, list all interfaces implemented by this class.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param classInfoTree the content tree to which the documentation will be added
++ */
++ public void buildImplementedInterfacesInfo(XMLNode node, Content classInfoTree) {
++ writer.addImplementedInterfacesInfo(classInfoTree);
++ }
++
++ /**
++ * List all the classes extend this one.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param classInfoTree the content tree to which the documentation will be added
++ */
++ public void buildSubClassInfo(XMLNode node, Content classInfoTree) {
++ writer.addSubClassInfo(classInfoTree);
++ }
++
++ /**
++ * List all the interfaces that extend this one.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param classInfoTree the content tree to which the documentation will be added
++ */
++ public void buildSubInterfacesInfo(XMLNode node, Content classInfoTree) {
++ writer.addSubInterfacesInfo(classInfoTree);
++ }
++
++ /**
++ * If this is an interface, list all classes that implement this interface.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param classInfoTree the content tree to which the documentation will be added
++ */
++ public void buildInterfaceUsageInfo(XMLNode node, Content classInfoTree) {
++ writer.addInterfaceUsageInfo(classInfoTree);
++ }
++
++ /**
++ * If this class is deprecated, build the appropriate information.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param classInfoTree the content tree to which the documentation will be added
++ */
++ public void buildDeprecationInfo (XMLNode node, Content classInfoTree) {
++ writer.addClassDeprecationInfo(classInfoTree);
++ }
++
++ /**
++ * If this is an inner class or interface, list the enclosing class or interface.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param classInfoTree the content tree to which the documentation will be added
++ */
++ public void buildNestedClassInfo (XMLNode node, Content classInfoTree) {
++ writer.addNestedClassInfo(classInfoTree);
++ }
++
++ /**
++ * Copy the doc files for the current ClassDoc if necessary.
++ */
+ private void copyDocFiles() {
+ PackageDoc containingPackage = classDoc.containingPackage();
+ if((configuration.packages == null ||
+ Arrays.binarySearch(configuration.packages,
+- containingPackage) < 0) &&
+- ! containingPackagesSeen.contains(containingPackage.name())){
++ containingPackage) < 0) &&
++ ! containingPackagesSeen.contains(containingPackage.name())){
+ //Only copy doc files dir if the containing package is not
+ //documented AND if we have not documented a class from the same
+ //package already. Otherwise, we are making duplicate copies.
+ Util.copyDocFiles(configuration,
+- Util.getPackageSourcePath(configuration,
++ Util.getPackageSourcePath(configuration,
+ classDoc.containingPackage()) +
+- DirectoryManager.getDirectoryPath(classDoc.containingPackage())
++ DirectoryManager.getDirectoryPath(classDoc.containingPackage())
+ + File.separator, DocletConstants.DOC_FILES_DIR_NAME, true);
+ containingPackagesSeen.add(containingPackage.name());
+ }
+ }
+
+ /**
+- * Build the header of the page.
++ * Build the signature of the current class.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param classInfoTree the content tree to which the documentation will be added
+ */
+- public void buildClassHeader(XMLNode node) {
+- String key;
+- if (isInterface) {
+- key = "doclet.Interface";
+- } else if (isEnum) {
+- key = "doclet.Enum";
+- } else {
+- key = "doclet.Class";
+- }
+-
+- writer.writeHeader(configuration.getText(key) + " " + classDoc.name());
+- }
+-
+- /**
+- * Build the class tree documentation.
+- */
+- public void buildClassTree(XMLNode node) {
+- writer.writeClassTree();
+- }
+-
+- /**
+- * If this is a class, list all interfaces
+- * implemented by this class.
+- */
+- public void buildImplementedInterfacesInfo(XMLNode node) {
+- writer.writeImplementedInterfacesInfo();
+- }
+-
+- /**
+- * If this is an interface, list all super interfaces.
+- */
+- public void buildSuperInterfacesInfo(XMLNode node) {
+- writer.writeSuperInterfacesInfo();
+- }
+-
+- /**
+- * List the parameters of this class.
+- */
+- public void buildTypeParamInfo(XMLNode node) {
+- writer.writeTypeParamInfo();
+- }
+-
+- /**
+- * List all the classes extend this one.
+- */
+- public void buildSubClassInfo(XMLNode node) {
+- writer.writeSubClassInfo();
+- }
+-
+- /**
+- * List all the interfaces that extend this one.
+- */
+- public void buildSubInterfacesInfo(XMLNode node) {
+- writer.writeSubInterfacesInfo();
+- }
+-
+- /**
+- * If this is an interface, list all classes that implement this interface.
+- */
+- public void buildInterfaceUsageInfo (XMLNode node) {
+- writer.writeInterfaceUsageInfo();
+- }
+-
+- /**
+- * If this is an inner class or interface, list the enclosing class or
+- * interface.
+- */
+- public void buildNestedClassInfo (XMLNode node) {
+- writer.writeNestedClassInfo();
+- }
+-
+- /**
+- * If this class is deprecated, print the appropriate information.
+- */
+- public void buildDeprecationInfo (XMLNode node) {
+- writer.writeClassDeprecationInfo();
+- }
+-
+- /**
+- * Build the signature of the current class.
+- */
+- public void buildClassSignature(XMLNode node) {
++ public void buildClassSignature(XMLNode node, Content classInfoTree) {
+ StringBuffer modifiers = new StringBuffer(classDoc.modifiers() + " ");
+ if (isEnum) {
+ modifiers.append("enum ");
+@@ -243,93 +287,111 @@
+ if ((index = modifiers.indexOf("abstract")) >= 0) {
+ modifiers.delete(index, index + (new String("abstract")).length());
+ modifiers = new StringBuffer(
+- Util.replaceText(modifiers.toString(), " ", " "));
++ Util.replaceText(modifiers.toString(), " ", " "));
+ }
+ if ((index = modifiers.indexOf("final")) >= 0) {
+ modifiers.delete(index, index + (new String("final")).length());
+ modifiers = new StringBuffer(
+- Util.replaceText(modifiers.toString(), " ", " "));
++ Util.replaceText(modifiers.toString(), " ", " "));
+ }
+ //} else if (classDoc.isAnnotationType()) {
+ //modifiers.append("@interface ");
+ } else if (! isInterface) {
+ modifiers.append("class ");
+ }
+- writer.writeClassSignature(modifiers.toString());
++ writer.addClassSignature(modifiers.toString(), classInfoTree);
+ }
+
+ /**
+ * Build the class description.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param classInfoTree the content tree to which the documentation will be added
+ */
+- public void buildClassDescription(XMLNode node) {
+- writer.writeClassDescription();
++ public void buildClassDescription(XMLNode node, Content classInfoTree) {
++ writer.addClassDescription(classInfoTree);
+ }
+
+ /**
+ * Build the tag information for the current class.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param classInfoTree the content tree to which the documentation will be added
+ */
+- public void buildClassTagInfo(XMLNode node) {
+- writer.writeClassTagInfo();
++ public void buildClassTagInfo(XMLNode node, Content classInfoTree) {
++ writer.addClassTagInfo(classInfoTree);
+ }
+
+ /**
+- * Build the contents of the page.
++ * Build the member summary contents of the page.
+ *
+- * @param elements the XML elements that specify how a member summary is
+- * documented.
++ * @param node the XML element that specifies which components to document
++ * @param classContentTree the content tree to which the documentation will be added
+ */
+- public void buildMemberSummary(List elements) throws Exception {
++ public void buildMemberSummary(XMLNode node, Content classContentTree) throws Exception {
++ Content memberSummaryTree = writer.getMemberTreeHeader();
+ configuration.getBuilderFactory().
+- getMemberSummaryBuilder(writer).buildChildren(node);
+- writer.completeMemberSummaryBuild();
++ getMemberSummaryBuilder(writer).buildChildren(node, memberSummaryTree);
++ classContentTree.addContent(writer.getMemberSummaryTree(memberSummaryTree));
++ }
++
++ /**
++ * Build the member details contents of the page.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param classContentTree the content tree to which the documentation will be added
++ */
++ public void buildMemberDetails(XMLNode node, Content classContentTree) {
++ Content memberDetailsTree = writer.getMemberTreeHeader();
++ buildChildren(node, memberDetailsTree);
++ classContentTree.addContent(writer.getMemberDetailsTree(memberDetailsTree));
+ }
+
+ /**
+ * Build the enum constants documentation.
+ *
+- * @param elements the XML elements that specify how a enum constants are
+- * documented.
++ * @param node the XML element that specifies which components to document
++ * @param memberDetailsTree the content tree to which the documentation will be added
+ */
+- public void buildEnumConstantsDetails(XMLNode node) throws Exception {
++ public void buildEnumConstantsDetails(XMLNode node,
++ Content memberDetailsTree) throws Exception {
+ configuration.getBuilderFactory().
+- getEnumConstantsBuilder(writer).buildChildren(node);
++ getEnumConstantsBuilder(writer).buildChildren(node, memberDetailsTree);
+ }
+
+ /**
+ * Build the field documentation.
+ *
+- * @param elements the XML elements that specify how a field is documented.
++ * @param node the XML element that specifies which components to document
++ * @param memberDetailsTree the content tree to which the documentation will be added
+ */
+- public void buildFieldDetails(XMLNode node) throws Exception {
++ public void buildFieldDetails(XMLNode node,
++ Content memberDetailsTree) throws Exception {
+ configuration.getBuilderFactory().
+- getFieldBuilder(writer).buildChildren(node);
++ getFieldBuilder(writer).buildChildren(node, memberDetailsTree);
+ }
+
+ /**
+ * Build the constructor documentation.
+ *
+- * @param elements the XML elements that specify how to document a
+- * constructor.
++ * @param node the XML element that specifies which components to document
++ * @param memberDetailsTree the content tree to which the documentation will be added
+ */
+- public void buildConstructorDetails(XMLNode node) throws Exception {
++ public void buildConstructorDetails(XMLNode node,
++ Content memberDetailsTree) throws Exception {
+ configuration.getBuilderFactory().
+- getConstructorBuilder(writer).buildChildren(node);
++ getConstructorBuilder(writer).buildChildren(node, memberDetailsTree);
+ }
+
+ /**
+ * Build the method documentation.
+ *
+- * @param elements the XML elements that specify how a method is documented.
++ * @param node the XML element that specifies which components to document
++ * @param memberDetailsTree the content tree to which the documentation will be added
+ */
+- public void buildMethodDetails(XMLNode node) throws Exception {
++ public void buildMethodDetails(XMLNode node,
++ Content memberDetailsTree) throws Exception {
+ configuration.getBuilderFactory().
+- getMethodBuilder(writer).buildChildren(node);
+- }
+-
+- /**
+- * Build the footer of the page.
+- */
+- public void buildClassFooter(XMLNode node) {
+- writer.writeFooter();
++ getMethodBuilder(writer).buildChildren(node, memberDetailsTree);
+ }
+ }
+diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/ConstantsSummaryBuilder.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/ConstantsSummaryBuilder.java
+--- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/ConstantsSummaryBuilder.java
++++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/ConstantsSummaryBuilder.java
+@@ -25,11 +25,11 @@
+
+ package com.sun.tools.doclets.internal.toolkit.builders;
+
++import java.io.*;
++import java.util.*;
++import com.sun.javadoc.*;
+ import com.sun.tools.doclets.internal.toolkit.util.*;
+ import com.sun.tools.doclets.internal.toolkit.*;
+-import com.sun.javadoc.*;
+-import java.io.*;
+-import java.util.*;
+
+ /**
+ * Builds the Constants Summary Page.
+@@ -39,6 +39,7 @@
+ * Do not use it as an API
+ *
+ * @author Jamie Ho
++ * @author Bhavesh Patel (Modified)
+ * @since 1.5
+ */
+ public class ConstantsSummaryBuilder extends AbstractBuilder {
+@@ -80,6 +81,11 @@
+ private ClassDoc currentClass;
+
+ /**
++ * The content tree for the constant summary documentation.
++ */
++ private Content contentTree;
++
++ /**
+ * Construct a new ConstantsSummaryBuilder.
+ *
+ * @param configuration the current configuration of the
+@@ -113,7 +119,7 @@
+ //Doclet does not support this output.
+ return;
+ }
+- build(LayoutParser.getInstance(configuration).parseXML(ROOT));
++ build(LayoutParser.getInstance(configuration).parseXML(ROOT), contentTree);
+ }
+
+ /**
+@@ -126,85 +132,85 @@
+ /**
+ * Build the constant summary.
+ *
+- * @param elements the list of elements describing constant summary
+- * documentation.
++ * @param node the XML element that specifies which components to document
++ * @param contentTree the content tree to which the documentation will be added
+ */
+- public void buildConstantSummary(XMLNode node) throws Exception {
+- buildChildren(node);
++ public void buildConstantSummary(XMLNode node, Content contentTree) throws Exception {
++ contentTree = writer.getHeader();
++ buildChildren(node, contentTree);
++ writer.addFooter(contentTree);
++ writer.printDocument(contentTree);
+ writer.close();
+ }
+
+ /**
+- * Build the header.
++ * Build the list of packages.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param contentTree the content tree to which the content list will be added
+ */
+- public void buildHeader(XMLNode node) {
+- writer.writeHeader();
+- }
+-
+- /**
+- * Build the footer.
+- */
+- public void buildFooter(XMLNode node) {
+- writer.writeFooter();
+- }
+-
+- /**
+- * Build the table of contents.
+- */
+- public void buildContents(XMLNode node) {
+- writer.writeContentsHeader();
++ public void buildContents(XMLNode node, Content contentTree) {
++ Content contentListTree = writer.getContentsHeader();
+ PackageDoc[] packages = configuration.packages;
+ printedPackageHeaders = new HashSet();
+ for (int i = 0; i < packages.length; i++) {
+ if (hasConstantField(packages[i]) && ! hasPrintedPackageIndex(packages[i].name())) {
+- writer.writeLinkToPackageContent(packages[i],
++ writer.addLinkToPackageContent(packages[i],
+ parsePackageName(packages[i].name()),
+- printedPackageHeaders);
++ printedPackageHeaders, contentListTree);
+ }
+ }
+- writer.writeContentsFooter();
++ contentTree.addContent(writer.getContentsList(contentListTree));
+ }
+
+ /**
+ * Build the summary for each documented package.
+ *
+- * @param elements the XML elements that represent the components
+- * of documentation for each package.
++ * @param node the XML element that specifies which components to document
++ * @param contentTree the tree to which the summaries will be added
+ */
+- public void buildConstantSummaries(XMLNode node) {
++ public void buildConstantSummaries(XMLNode node, Content contentTree) {
+ PackageDoc[] packages = configuration.packages;
+ printedPackageHeaders = new HashSet();
++ Content summariesTree = writer.getConstantSummaries();
+ for (int i = 0; i < packages.length; i++) {
+ if (hasConstantField(packages[i])) {
+ currentPackage = packages[i];
+ //Build the documentation for the current package.
+- buildChildren(node);
++ buildChildren(node, summariesTree);
+ }
+ }
++ contentTree.addContent(summariesTree);
+ }
+
+ /**
+- * Build the summary for the current package.
++ * Build the header for the given package.
+ *
+- * @param elements the list of XML elements that make up package
+- * documentation.
++ * @param node the XML element that specifies which components to document
++ * @param summariesTree the tree to which the package header will be added
+ */
+- public void buildPackageConstantSummary(XMLNode node) {
+- buildChildren(node);
++ public void buildPackageHeader(XMLNode node, Content summariesTree) {
++ String parsedPackageName = parsePackageName(currentPackage.name());
++ if (! printedPackageHeaders.contains(parsedPackageName)) {
++ writer.addPackageName(currentPackage,
++ parsePackageName(currentPackage.name()), summariesTree);
++ printedPackageHeaders.add(parsedPackageName);
++ }
+ }
+
+ /**
+ * Build the summary for the current class.
+ *
+- * @param elements the list of XML elements that make up the class
+- * constant summary.
++ * @param node the XML element that specifies which components to document
++ * @param summariesTree the tree to which the class constant summary will be added
+ */
+- public void buildClassConstantSummary(XMLNode node) {
++ public void buildClassConstantSummary(XMLNode node, Content summariesTree) {
+ ClassDoc[] classes = currentPackage.name().length() > 0 ?
+ currentPackage.allClasses() :
+ configuration.classDocCatalog.allClasses(
+ DocletConstants.DEFAULT_PACKAGE_NAME);
+ Arrays.sort(classes);
++ Content classConstantTree = writer.getClassConstantHeader();
+ for (int i = 0; i < classes.length; i++) {
+ if (! classDocsWithConstFields.contains(classes[i]) ||
+ ! classes[i].isIncluded()) {
+@@ -212,42 +218,20 @@
+ }
+ currentClass = classes[i];
+ //Build the documentation for the current class.
+- buildChildren(node);
++ buildChildren(node, classConstantTree);
+ }
++ summariesTree.addContent(classConstantTree);
+ }
+
+ /**
+- * Build the header for the given class.
++ * Build the summary of constant members in the class.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param classConstantTree the tree to which the constant members table
++ * will be added
+ */
+- public void buildPackageHeader(XMLNode node) {
+- String parsedPackageName = parsePackageName(currentPackage.name());
+- if (! printedPackageHeaders.contains(parsedPackageName)) {
+- writer.writePackageName(currentPackage,
+- parsePackageName(currentPackage.name()));
+- printedPackageHeaders.add(parsedPackageName);
+- }
+- }
+-
+- /**
+- * Build the header for the given class.
+- */
+- public void buildClassHeader(XMLNode node) {
+- writer.writeConstantMembersHeader(currentClass);
+- }
+-
+- /**
+- * Print summary of constant members in the
+- * class.
+- */
+- public void buildConstantMembers(XMLNode node) {
+- new ConstantFieldBuilder(currentClass).buildMembersSummary(node);
+- }
+-
+- /**
+- * Build the footer for the given class.
+- */
+- public void buildClassFooter(XMLNode node) {
+- writer.writeConstantMembersFooter(currentClass);
++ public void buildConstantMembers(XMLNode node, Content classConstantTree) {
++ new ConstantFieldBuilder(currentClass).buildMembersSummary(node, classConstantTree);
+ }
+
+ /**
+@@ -346,12 +330,16 @@
+
+ /**
+ * Builds the table of constants for a given class.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param classConstantTree the tree to which the class constants table
++ * will be added
+ */
+- protected void buildMembersSummary(XMLNode node) {
++ protected void buildMembersSummary(XMLNode node, Content classConstantTree) {
+ List members = new ArrayList(members());
+ if (members.size() > 0) {
+ Collections.sort(members);
+- writer.writeConstantMembers(classdoc, members);
++ writer.addConstantMembers(classdoc, members, classConstantTree);
+ }
+ }
+
+diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/ConstructorBuilder.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/ConstructorBuilder.java
+--- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/ConstructorBuilder.java
++++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/ConstructorBuilder.java
+@@ -25,10 +25,10 @@
+
+ package com.sun.tools.doclets.internal.toolkit.builders;
+
++import java.util.*;
+ import com.sun.tools.doclets.internal.toolkit.util.*;
+ import com.sun.tools.doclets.internal.toolkit.*;
+ import com.sun.javadoc.*;
+-import java.util.*;
+
+ /**
+ * Builds documentation for a constructor.
+@@ -38,202 +38,195 @@
+ * Do not use it as an API
+ *
+ * @author Jamie Ho
++ * @author Bhavesh Patel (Modified)
+ * @since 1.5
+ */
+ public class ConstructorBuilder extends AbstractMemberBuilder {
+
+- /**
+- * The name of this builder.
+- */
+- public static final String NAME = "ConstructorDetails";
++ /**
++ * The name of this builder.
++ */
++ public static final String NAME = "ConstructorDetails";
+
+- /**
+- * The index of the current field that is being documented at this point
+- * in time.
+- */
+- private int currentMethodIndex;
++ /**
++ * The index of the current field that is being documented at this point
++ * in time.
++ */
++ private int currentConstructorIndex;
+
+- /**
+- * The class whose constructors are being documented.
+- */
+- private ClassDoc classDoc;
++ /**
++ * The class whose constructors are being documented.
++ */
++ private ClassDoc classDoc;
+
+- /**
+- * The visible constructors for the given class.
+- */
+- private VisibleMemberMap visibleMemberMap;
++ /**
++ * The visible constructors for the given class.
++ */
++ private VisibleMemberMap visibleMemberMap;
+
+- /**
+- * The writer to output the constructor documentation.
+- */
+- private ConstructorWriter writer;
++ /**
++ * The writer to output the constructor documentation.
++ */
++ private ConstructorWriter writer;
+
+- /**
+- * The constructors being documented.
+- */
+- private List constructors;
++ /**
++ * The constructors being documented.
++ */
++ private List<ProgramElementDoc> constructors;
+
+- /**
+- * Construct a new ConstructorBuilder.
+- *
+- * @param configuration the current configuration of the
+- * doclet.
+- */
+- private ConstructorBuilder(Configuration configuration) {
+- super(configuration);
++ /**
++ * Construct a new ConstructorBuilder.
++ *
++ * @param configuration the current configuration of the
++ * doclet.
++ */
++ private ConstructorBuilder(Configuration configuration) {
++ super(configuration);
++ }
++
++ /**
++ * Construct a new ConstructorBuilder.
++ *
++ * @param configuration the current configuration of the doclet.
++ * @param classDoc the class whoses members are being documented.
++ * @param writer the doclet specific writer.
++ */
++ public static ConstructorBuilder getInstance(
++ Configuration configuration,
++ ClassDoc classDoc,
++ ConstructorWriter writer) {
++ ConstructorBuilder builder = new ConstructorBuilder(configuration);
++ builder.classDoc = classDoc;
++ builder.writer = writer;
++ builder.visibleMemberMap =
++ new VisibleMemberMap(
++ classDoc,
++ VisibleMemberMap.CONSTRUCTORS,
++ configuration.nodeprecated);
++ builder.constructors =
++ new ArrayList<ProgramElementDoc>(builder.visibleMemberMap.getMembersFor(classDoc));
++ for (int i = 0; i < builder.constructors.size(); i++) {
++ if (builder.constructors.get(i).isProtected()
++ || builder.constructors.get(i).isPrivate()) {
++ writer.setFoundNonPubConstructor(true);
++ }
++ }
++ if (configuration.getMemberComparator() != null) {
++ Collections.sort(
++ builder.constructors,
++ configuration.getMemberComparator());
+ }
++ return builder;
++ }
+
+- /**
+- * Construct a new ConstructorBuilder.
+- *
+- * @param configuration the current configuration of the doclet.
+- * @param classDoc the class whoses members are being documented.
+- * @param writer the doclet specific writer.
+- */
+- public static ConstructorBuilder getInstance(
+- Configuration configuration,
+- ClassDoc classDoc,
+- ConstructorWriter writer) {
+- ConstructorBuilder builder = new ConstructorBuilder(configuration);
+- builder.classDoc = classDoc;
+- builder.writer = writer;
+- builder.visibleMemberMap =
+- new VisibleMemberMap(
+- classDoc,
+- VisibleMemberMap.CONSTRUCTORS,
+- configuration.nodeprecated);
+- builder.constructors =
+- new ArrayList(builder.visibleMemberMap.getMembersFor(classDoc));
+- for (int i = 0; i < builder.constructors.size(); i++) {
+- if (((ProgramElementDoc) (builder.constructors.get(i)))
+- .isProtected()
+- || ((ProgramElementDoc) (builder.constructors.get(i)))
+- .isPrivate()) {
+- writer.setFoundNonPubConstructor(true);
+- }
+- }
+- if (configuration.getMemberComparator() != null) {
+- Collections.sort(
+- builder.constructors,
+- configuration.getMemberComparator());
+- }
+- return builder;
++ /**
++ * {@inheritDoc}
++ */
++ public String getName() {
++ return NAME;
++ }
++
++ /**
++ * {@inheritDoc}
++ */
++ public boolean hasMembersToDocument() {
++ return constructors.size() > 0;
++ }
++
++ /**
++ * Returns a list of constructors that will be documented for the given class.
++ * This information can be used for doclet specific documentation
++ * generation.
++ *
++ * @return a list of constructors that will be documented.
++ */
++ public List<ProgramElementDoc> members(ClassDoc classDoc) {
++ return visibleMemberMap.getMembersFor(classDoc);
++ }
++
++ /**
++ * Return the constructor writer for this builder.
++ *
++ * @return the constructor writer for this builder.
++ */
++ public ConstructorWriter getWriter() {
++ return writer;
++ }
++
++ /**
++ * Build the constructor documentation.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param memberDetailsTree the content tree to which the documentation will be added
++ */
++ public void buildConstructorDoc(XMLNode node, Content memberDetailsTree) {
++ if (writer == null) {
++ return;
+ }
++ int size = constructors.size();
++ if (size > 0) {
++ Content constructorDetailsTree = writer.getConstructorDetailsTreeHeader(
++ classDoc, memberDetailsTree);
++ for (currentConstructorIndex = 0; currentConstructorIndex < size;
++ currentConstructorIndex++) {
++ Content constructorDocTree = writer.getConstructorDocTreeHeader(
++ (ConstructorDoc) constructors.get(currentConstructorIndex),
++ constructorDetailsTree);
++ buildChildren(node, constructorDocTree);
++ constructorDetailsTree.addContent(writer.getConstructorDoc(
++ constructorDocTree, (currentConstructorIndex == size - 1)));
++ }
++ memberDetailsTree.addContent(
++ writer.getConstructorDetails(constructorDetailsTree));
++ }
++ }
+
+- /**
+- * {@inheritDoc}
+- */
+- public String getName() {
+- return NAME;
++ /**
++ * Build the signature.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param constructorDocTree the content tree to which the documentation will be added
++ */
++ public void buildSignature(XMLNode node, Content constructorDocTree) {
++ constructorDocTree.addContent(
++ writer.getSignature(
++ (ConstructorDoc) constructors.get(currentConstructorIndex)));
++ }
++
++ /**
++ * Build the deprecation information.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param constructorDocTree the content tree to which the documentation will be added
++ */
++ public void buildDeprecationInfo(XMLNode node, Content constructorDocTree) {
++ writer.addDeprecated(
++ (ConstructorDoc) constructors.get(currentConstructorIndex), constructorDocTree);
++ }
++
++ /**
++ * Build the comments for the constructor. Do nothing if
++ * {@link Configuration#nocomment} is set to true.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param constructorDocTree the content tree to which the documentation will be added
++ */
++ public void buildConstructorComments(XMLNode node, Content constructorDocTree) {
++ if (!configuration.nocomment) {
++ writer.addComments(
++ (ConstructorDoc) constructors.get(currentConstructorIndex),
++ constructorDocTree);
+ }
++ }
+
+- /**
+- * {@inheritDoc}
+- */
+- public boolean hasMembersToDocument() {
+- return constructors.size() > 0;
+- }
+-
+- /**
+- * Returns a list of constructors that will be documented for the given class.
+- * This information can be used for doclet specific documentation
+- * generation.
+- *
+- * @return a list of constructors that will be documented.
+- */
+- public List members(ClassDoc classDoc) {
+- return visibleMemberMap.getMembersFor(classDoc);
+- }
+-
+- /**
+- * Return the constructor writer for this builder.
+- *
+- * @return the constructor writer for this builder.
+- */
+- public ConstructorWriter getWriter() {
+- return writer;
+- }
+-
+- /**
+- * Build the constructor documentation.
+- *
+- * @param elements the XML elements that specify how to construct this
+- * documentation.
+- */
+- public void buildConstructorDoc(XMLNode node) {
+- if (writer == null) {
+- return;
+- }
+- for (currentMethodIndex = 0;
+- currentMethodIndex < constructors.size();
+- currentMethodIndex++) {
+- buildChildren(node);
+- }
+- }
+-
+- /**
+- * Build the overall header.
+- */
+- public void buildHeader(XMLNode node) {
+- writer.writeHeader(
+- classDoc,
+- configuration.getText("doclet.Constructor_Detail"));
+- }
+-
+- /**
+- * Build the header for the individual constructor.
+- */
+- public void buildConstructorHeader(XMLNode node) {
+- writer.writeConstructorHeader(
+- (ConstructorDoc) constructors.get(currentMethodIndex),
+- currentMethodIndex == 0);
+- }
+-
+- /**
+- * Build the signature.
+- */
+- public void buildSignature(XMLNode node) {
+- writer.writeSignature(
+- (ConstructorDoc) constructors.get(currentMethodIndex));
+- }
+-
+- /**
+- * Build the deprecation information.
+- */
+- public void buildDeprecationInfo(XMLNode node) {
+- writer.writeDeprecated(
+- (ConstructorDoc) constructors.get(currentMethodIndex));
+- }
+-
+- /**
+- * Build the comments for the constructor. Do nothing if
+- * {@link Configuration#nocomment} is set to true.
+- */
+- public void buildConstructorComments(XMLNode node) {
+- if (!configuration.nocomment) {
+- writer.writeComments(
+- (ConstructorDoc) constructors.get(currentMethodIndex));
+- }
+- }
+-
+- /**
+- * Build the tag information.
+- */
+- public void buildTagInfo(XMLNode node) {
+- writer.writeTags((ConstructorDoc) constructors.get(currentMethodIndex));
+- }
+-
+- /**
+- * Build the footer for the individual constructor.
+- */
+- public void buildConstructorFooter(XMLNode node) {
+- writer.writeConstructorFooter();
+- }
+-
+- /**
+- * Build the overall footer.
+- */
+- public void buildFooter(XMLNode node) {
+- writer.writeFooter(classDoc);
+- }
++ /**
++ * Build the tag information.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param constructorDocTree the content tree to which the documentation will be added
++ */
++ public void buildTagInfo(XMLNode node, Content constructorDocTree) {
++ writer.addTags((ConstructorDoc) constructors.get(currentConstructorIndex),
++ constructorDocTree);
++ }
+ }
+diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/EnumConstantBuilder.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/EnumConstantBuilder.java
+--- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/EnumConstantBuilder.java
++++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/EnumConstantBuilder.java
+@@ -25,10 +25,10 @@
+
+ package com.sun.tools.doclets.internal.toolkit.builders;
+
++import java.util.*;
+ import com.sun.tools.doclets.internal.toolkit.util.*;
+ import com.sun.tools.doclets.internal.toolkit.*;
+ import com.sun.javadoc.*;
+-import java.util.*;
+
+ /**
+ * Builds documentation for a enum constants.
+@@ -38,200 +38,195 @@
+ * Do not use it as an API
+ *
+ * @author Jamie Ho
++ * @author Bhavesh Patel (Modified)
+ * @since 1.5
+ */
+ public class EnumConstantBuilder extends AbstractMemberBuilder {
+
+- /**
+- * The class whose enum constants are being documented.
+- */
+- private ClassDoc classDoc;
++ /**
++ * The class whose enum constants are being documented.
++ */
++ private ClassDoc classDoc;
+
+- /**
+- * The visible enum constantss for the given class.
+- */
+- private VisibleMemberMap visibleMemberMap;
++ /**
++ * The visible enum constantss for the given class.
++ */
++ private VisibleMemberMap visibleMemberMap;
+
+- /**
+- * The writer to output the enum constants documentation.
+- */
+- private EnumConstantWriter writer;
++ /**
++ * The writer to output the enum constants documentation.
++ */
++ private EnumConstantWriter writer;
+
+- /**
+- * The list of enum constants being documented.
+- */
+- private List enumConstants;
++ /**
++ * The list of enum constants being documented.
++ */
++ private List<ProgramElementDoc> enumConstants;
+
+- /**
+- * The index of the current enum constant that is being documented at this point
+- * in time.
+- */
+- private int currentEnumConstantsIndex;
++ /**
++ * The index of the current enum constant that is being documented at this point
++ * in time.
++ */
++ private int currentEnumConstantsIndex;
+
+- /**
+- * Construct a new EnumConstantsBuilder.
+- *
+- * @param configuration the current configuration of the
+- * doclet.
+- */
+- private EnumConstantBuilder(Configuration configuration) {
+- super(configuration);
++ /**
++ * Construct a new EnumConstantsBuilder.
++ *
++ * @param configuration the current configuration of the
++ * doclet.
++ */
++ private EnumConstantBuilder(Configuration configuration) {
++ super(configuration);
++ }
++
++ /**
++ * Construct a new EnumConstantsBuilder.
++ *
++ * @param configuration the current configuration of the doclet.
++ * @param classDoc the class whoses members are being documented.
++ * @param writer the doclet specific writer.
++ */
++ public static EnumConstantBuilder getInstance(
++ Configuration configuration,
++ ClassDoc classDoc,
++ EnumConstantWriter writer) {
++ EnumConstantBuilder builder = new EnumConstantBuilder(configuration);
++ builder.classDoc = classDoc;
++ builder.writer = writer;
++ builder.visibleMemberMap =
++ new VisibleMemberMap(
++ classDoc,
++ VisibleMemberMap.ENUM_CONSTANTS,
++ configuration.nodeprecated);
++ builder.enumConstants =
++ new ArrayList<ProgramElementDoc>(builder.visibleMemberMap.getMembersFor(classDoc));
++ if (configuration.getMemberComparator() != null) {
++ Collections.sort(
++ builder.enumConstants,
++ configuration.getMemberComparator());
++ }
++ return builder;
++ }
++
++ /**
++ * {@inheritDoc}
++ */
++ public String getName() {
++ return "EnumConstantDetails";
++ }
++
++ /**
++ * Returns a list of enum constants that will be documented for the given class.
++ * This information can be used for doclet specific documentation
++ * generation.
++ *
++ * @param classDoc the {@link ClassDoc} we want to check.
++ * @return a list of enum constants that will be documented.
++ */
++ public List<ProgramElementDoc> members(ClassDoc classDoc) {
++ return visibleMemberMap.getMembersFor(classDoc);
++ }
++
++ /**
++ * Returns the visible member map for the enum constants of this class.
++ *
++ * @return the visible member map for the enum constants of this class.
++ */
++ public VisibleMemberMap getVisibleMemberMap() {
++ return visibleMemberMap;
++ }
++
++ /**
++ * summaryOrder.size()
++ */
++ public boolean hasMembersToDocument() {
++ return enumConstants.size() > 0;
++ }
++
++ /**
++ * Build the enum constant documentation.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param memberDetailsTree the content tree to which the documentation will be added
++ */
++ public void buildEnumConstant(XMLNode node, Content memberDetailsTree) {
++ if (writer == null) {
++ return;
+ }
++ int size = enumConstants.size();
++ if (size > 0) {
++ Content enumConstantsDetailsTree = writer.getEnumConstantsDetailsTreeHeader(
++ classDoc, memberDetailsTree);
++ for (currentEnumConstantsIndex = 0; currentEnumConstantsIndex < size;
++ currentEnumConstantsIndex++) {
++ Content enumConstantsTree = writer.getEnumConstantsTreeHeader(
++ (FieldDoc) enumConstants.get(currentEnumConstantsIndex),
++ enumConstantsDetailsTree);
++ buildChildren(node, enumConstantsTree);
++ enumConstantsDetailsTree.addContent(writer.getEnumConstants(
++ enumConstantsTree, (currentEnumConstantsIndex == size - 1)));
++ }
++ memberDetailsTree.addContent(
++ writer.getEnumConstantsDetails(enumConstantsDetailsTree));
++ }
++ }
+
+- /**
+- * Construct a new EnumConstantsBuilder.
+- *
+- * @param configuration the current configuration of the doclet.
+- * @param classDoc the class whoses members are being documented.
+- * @param writer the doclet specific writer.
+- */
+- public static EnumConstantBuilder getInstance(
+- Configuration configuration,
+- ClassDoc classDoc,
+- EnumConstantWriter writer) {
+- EnumConstantBuilder builder = new EnumConstantBuilder(configuration);
+- builder.classDoc = classDoc;
+- builder.writer = writer;
+- builder.visibleMemberMap =
+- new VisibleMemberMap(
+- classDoc,
+- VisibleMemberMap.ENUM_CONSTANTS,
+- configuration.nodeprecated);
+- builder.enumConstants =
+- new ArrayList(builder.visibleMemberMap.getMembersFor(classDoc));
+- if (configuration.getMemberComparator() != null) {
+- Collections.sort(
+- builder.enumConstants,
+- configuration.getMemberComparator());
+- }
+- return builder;
++ /**
++ * Build the signature.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param enumConstantsTree the content tree to which the documentation will be added
++ */
++ public void buildSignature(XMLNode node, Content enumConstantsTree) {
++ enumConstantsTree.addContent(writer.getSignature(
++ (FieldDoc) enumConstants.get(currentEnumConstantsIndex)));
++ }
++
++ /**
++ * Build the deprecation information.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param enumConstantsTree the content tree to which the documentation will be added
++ */
++ public void buildDeprecationInfo(XMLNode node, Content enumConstantsTree) {
++ writer.addDeprecated(
++ (FieldDoc) enumConstants.get(currentEnumConstantsIndex),
++ enumConstantsTree);
++ }
++
++ /**
++ * Build the comments for the enum constant. Do nothing if
++ * {@link Configuration#nocomment} is set to true.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param enumConstantsTree the content tree to which the documentation will be added
++ */
++ public void buildEnumConstantComments(XMLNode node, Content enumConstantsTree) {
++ if (!configuration.nocomment) {
++ writer.addComments(
++ (FieldDoc) enumConstants.get(currentEnumConstantsIndex),
++ enumConstantsTree);
+ }
++ }
+
+- /**
+- * {@inheritDoc}
+- */
+- public String getName() {
+- return "EnumConstantDetails";
+- }
++ /**
++ * Build the tag information.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param enumConstantsTree the content tree to which the documentation will be added
++ */
++ public void buildTagInfo(XMLNode node, Content enumConstantsTree) {
++ writer.addTags(
++ (FieldDoc) enumConstants.get(currentEnumConstantsIndex),
++ enumConstantsTree);
++ }
+
+- /**
+- * Returns a list of enum constants that will be documented for the given class.
+- * This information can be used for doclet specific documentation
+- * generation.
+- *
+- * @param classDoc the {@link ClassDoc} we want to check.
+- * @return a list of enum constants that will be documented.
+- */
+- public List members(ClassDoc classDoc) {
+- return visibleMemberMap.getMembersFor(classDoc);
+- }
+-
+- /**
+- * Returns the visible member map for the enum constants of this class.
+- *
+- * @return the visible member map for the enum constants of this class.
+- */
+- public VisibleMemberMap getVisibleMemberMap() {
+- return visibleMemberMap;
+- }
+-
+- /**
+- * summaryOrder.size()
+- */
+- public boolean hasMembersToDocument() {
+- return enumConstants.size() > 0;
+- }
+-
+- /**
+- * Build the enum constant documentation.
+- *
+- * @param elements the XML elements that specify how to construct this
+- * documentation.
+- */
+- public void buildEnumConstant(XMLNode node) {
+- if (writer == null) {
+- return;
+- }
+- for (currentEnumConstantsIndex = 0;
+- currentEnumConstantsIndex < enumConstants.size();
+- currentEnumConstantsIndex++) {
+- buildChildren(node);
+- }
+- }
+-
+- /**
+- * Build the overall header.
+- */
+- public void buildHeader(XMLNode node) {
+- writer.writeHeader(
+- classDoc,
+- configuration.getText("doclet.Enum_Constant_Detail"));
+- }
+-
+- /**
+- * Build the header for the individual enum constants.
+- */
+- public void buildEnumConstantHeader(XMLNode node) {
+- writer.writeEnumConstantHeader(
+- (FieldDoc) enumConstants.get(currentEnumConstantsIndex),
+- currentEnumConstantsIndex == 0);
+- }
+-
+- /**
+- * Build the signature.
+- */
+- public void buildSignature(XMLNode node) {
+- writer.writeSignature(
+- (FieldDoc) enumConstants.get(currentEnumConstantsIndex));
+- }
+-
+- /**
+- * Build the deprecation information.
+- */
+- public void buildDeprecationInfo(XMLNode node) {
+- writer.writeDeprecated(
+- (FieldDoc) enumConstants.get(currentEnumConstantsIndex));
+- }
+-
+- /**
+- * Build the comments for the enum constant. Do nothing if
+- * {@link Configuration#nocomment} is set to true.
+- */
+- public void buildEnumConstantComments(XMLNode node) {
+- if (!configuration.nocomment) {
+- writer.writeComments(
+- (FieldDoc) enumConstants.get(currentEnumConstantsIndex));
+- }
+- }
+-
+- /**
+- * Build the tag information.
+- */
+- public void buildTagInfo(XMLNode node) {
+- writer.writeTags(
+- (FieldDoc) enumConstants.get(currentEnumConstantsIndex));
+- }
+-
+- /**
+- * Build the footer for the individual enum constants.
+- */
+- public void buildEnumConstantFooter(XMLNode node) {
+- writer.writeEnumConstantFooter();
+- }
+-
+- /**
+- * Build the overall footer.
+- */
+- public void buildFooter(XMLNode node) {
+- writer.writeFooter(classDoc);
+- }
+-
+- /**
+- * Return the enum constant writer for this builder.
+- *
+- * @return the enum constant writer for this builder.
+- */
+- public EnumConstantWriter getWriter() {
+- return writer;
+- }
++ /**
++ * Return the enum constant writer for this builder.
++ *
++ * @return the enum constant writer for this builder.
++ */
++ public EnumConstantWriter getWriter() {
++ return writer;
++ }
+ }
+diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/FieldBuilder.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/FieldBuilder.java
+--- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/FieldBuilder.java
++++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/FieldBuilder.java
+@@ -25,10 +25,10 @@
+
+ package com.sun.tools.doclets.internal.toolkit.builders;
+
++import java.util.*;
+ import com.sun.tools.doclets.internal.toolkit.util.*;
+ import com.sun.tools.doclets.internal.toolkit.*;
+ import com.sun.javadoc.*;
+-import java.util.*;
+
+ /**
+ * Builds documentation for a field.
+@@ -38,197 +38,191 @@
+ * Do not use it as an API
+ *
+ * @author Jamie Ho
++ * @author Bhavesh Patel (Modified)
+ * @since 1.5
+ */
+ public class FieldBuilder extends AbstractMemberBuilder {
+
+- /**
+- * The class whose fields are being documented.
+- */
+- private ClassDoc classDoc;
++ /**
++ * The class whose fields are being documented.
++ */
++ private ClassDoc classDoc;
+
+- /**
+- * The visible fields for the given class.
+- */
+- private VisibleMemberMap visibleMemberMap;
++ /**
++ * The visible fields for the given class.
++ */
++ private VisibleMemberMap visibleMemberMap;
+
+- /**
+- * The writer to output the field documentation.
+- */
+- private FieldWriter writer;
++ /**
++ * The writer to output the field documentation.
++ */
++ private FieldWriter writer;
+
+- /**
+- * The list of fields being documented.
+- */
+- private List fields;
++ /**
++ * The list of fields being documented.
++ */
++ private List<ProgramElementDoc> fields;
+
+- /**
+- * The index of the current field that is being documented at this point
+- * in time.
+- */
+- private int currentFieldIndex;
++ /**
++ * The index of the current field that is being documented at this point
++ * in time.
++ */
++ private int currentFieldIndex;
+
+- /**
+- * Construct a new FieldBuilder.
+- *
+- * @param configuration the current configuration of the
+- * doclet.
+- */
+- private FieldBuilder(Configuration configuration) {
+- super(configuration);
++ /**
++ * Construct a new FieldBuilder.
++ *
++ * @param configuration the current configuration of the
++ * doclet.
++ */
++ private FieldBuilder(Configuration configuration) {
++ super(configuration);
++ }
++
++ /**
++ * Construct a new FieldBuilder.
++ *
++ * @param configuration the current configuration of the doclet.
++ * @param classDoc the class whoses members are being documented.
++ * @param writer the doclet specific writer.
++ */
++ public static FieldBuilder getInstance(
++ Configuration configuration,
++ ClassDoc classDoc,
++ FieldWriter writer) {
++ FieldBuilder builder = new FieldBuilder(configuration);
++ builder.classDoc = classDoc;
++ builder.writer = writer;
++ builder.visibleMemberMap =
++ new VisibleMemberMap(
++ classDoc,
++ VisibleMemberMap.FIELDS,
++ configuration.nodeprecated);
++ builder.fields =
++ new ArrayList<ProgramElementDoc>(builder.visibleMemberMap.getLeafClassMembers(
++ configuration));
++ if (configuration.getMemberComparator() != null) {
++ Collections.sort(
++ builder.fields,
++ configuration.getMemberComparator());
+ }
++ return builder;
++ }
+
+- /**
+- * Construct a new FieldBuilder.
+- *
+- * @param configuration the current configuration of the doclet.
+- * @param classDoc the class whoses members are being documented.
+- * @param writer the doclet specific writer.
+- */
+- public static FieldBuilder getInstance(
+- Configuration configuration,
+- ClassDoc classDoc,
+- FieldWriter writer) {
+- FieldBuilder builder = new FieldBuilder(configuration);
+- builder.classDoc = classDoc;
+- builder.writer = writer;
+- builder.visibleMemberMap =
+- new VisibleMemberMap(
+- classDoc,
+- VisibleMemberMap.FIELDS,
+- configuration.nodeprecated);
+- builder.fields =
+- new ArrayList(builder.visibleMemberMap.getLeafClassMembers(
+- configuration));
+- if (configuration.getMemberComparator() != null) {
+- Collections.sort(
+- builder.fields,
+- configuration.getMemberComparator());
+- }
+- return builder;
++ /**
++ * {@inheritDoc}
++ */
++ public String getName() {
++ return "FieldDetails";
++ }
++
++ /**
++ * Returns a list of fields that will be documented for the given class.
++ * This information can be used for doclet specific documentation
++ * generation.
++ *
++ * @param classDoc the {@link ClassDoc} we want to check.
++ * @return a list of fields that will be documented.
++ */
++ public List<ProgramElementDoc> members(ClassDoc classDoc) {
++ return visibleMemberMap.getMembersFor(classDoc);
++ }
++
++ /**
++ * Returns the visible member map for the fields of this class.
++ *
++ * @return the visible member map for the fields of this class.
++ */
++ public VisibleMemberMap getVisibleMemberMap() {
++ return visibleMemberMap;
++ }
++
++ /**
++ * summaryOrder.size()
++ */
++ public boolean hasMembersToDocument() {
++ return fields.size() > 0;
++ }
++
++ /**
++ * Build the field documentation.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param memberDetailsTree the content tree to which the documentation will be added
++ */
++ public void buildFieldDoc(XMLNode node, Content memberDetailsTree) {
++ if (writer == null) {
++ return;
++ }
++ int size = fields.size();
++ if (size > 0) {
++ Content fieldDetailsTree = writer.getFieldDetailsTreeHeader(
++ classDoc, memberDetailsTree);
++ for (currentFieldIndex = 0; currentFieldIndex < size;
++ currentFieldIndex++) {
++ Content fieldDocTree = writer.getFieldDocTreeHeader(
++ (FieldDoc) fields.get(currentFieldIndex),
++ fieldDetailsTree);
++ buildChildren(node, fieldDocTree);
++ fieldDetailsTree.addContent(writer.getFieldDoc(
++ fieldDocTree, (currentFieldIndex == size - 1)));
++ }
++ memberDetailsTree.addContent(
++ writer.getFieldDetails(fieldDetailsTree));
+ }
++ }
+
+- /**
+- * {@inheritDoc}
+- */
+- public String getName() {
+- return "FieldDetails";
++ /**
++ * Build the signature.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param fieldDocTree the content tree to which the documentation will be added
++ */
++ public void buildSignature(XMLNode node, Content fieldDocTree) {
++ fieldDocTree.addContent(
++ writer.getSignature((FieldDoc) fields.get(currentFieldIndex)));
++ }
++
++ /**
++ * Build the deprecation information.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param fieldDocTree the content tree to which the documentation will be added
++ */
++ public void buildDeprecationInfo(XMLNode node, Content fieldDocTree) {
++ writer.addDeprecated(
++ (FieldDoc) fields.get(currentFieldIndex), fieldDocTree);
++ }
++
++ /**
++ * Build the comments for the field. Do nothing if
++ * {@link Configuration#nocomment} is set to true.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param fieldDocTree the content tree to which the documentation will be added
++ */
++ public void buildFieldComments(XMLNode node, Content fieldDocTree) {
++ if (!configuration.nocomment) {
++ writer.addComments((FieldDoc) fields.get(currentFieldIndex), fieldDocTree);
+ }
++ }
+
+- /**
+- * Returns a list of fields that will be documented for the given class.
+- * This information can be used for doclet specific documentation
+- * generation.
+- *
+- * @param classDoc the {@link ClassDoc} we want to check.
+- * @return a list of fields that will be documented.
+- */
+- public List members(ClassDoc classDoc) {
+- return visibleMemberMap.getMembersFor(classDoc);
+- }
++ /**
++ * Build the tag information.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param fieldDocTree the content tree to which the documentation will be added
++ */
++ public void buildTagInfo(XMLNode node, Content fieldDocTree) {
++ writer.addTags((FieldDoc) fields.get(currentFieldIndex), fieldDocTree);
++ }
+
+- /**
+- * Returns the visible member map for the fields of this class.
+- *
+- * @return the visible member map for the fields of this class.
+- */
+- public VisibleMemberMap getVisibleMemberMap() {
+- return visibleMemberMap;
+- }
+-
+- /**
+- * summaryOrder.size()
+- */
+- public boolean hasMembersToDocument() {
+- return fields.size() > 0;
+- }
+-
+- /**
+- * Build the field documentation.
+- *
+- * @param elements the XML elements that specify how to construct this
+- * documentation.
+- */
+- public void buildFieldDoc(XMLNode node) {
+- if (writer == null) {
+- return;
+- }
+- for (currentFieldIndex = 0;
+- currentFieldIndex < fields.size();
+- currentFieldIndex++) {
+- buildChildren(node);
+- }
+- }
+-
+- /**
+- * Build the overall header.
+- */
+- public void buildHeader(XMLNode node) {
+- writer.writeHeader(
+- classDoc,
+- configuration.getText("doclet.Field_Detail"));
+- }
+-
+- /**
+- * Build the header for the individual field.
+- */
+- public void buildFieldHeader(XMLNode node) {
+- writer.writeFieldHeader(
+- (FieldDoc) fields.get(currentFieldIndex),
+- currentFieldIndex == 0);
+- }
+-
+- /**
+- * Build the signature.
+- */
+- public void buildSignature(XMLNode node) {
+- writer.writeSignature((FieldDoc) fields.get(currentFieldIndex));
+- }
+-
+- /**
+- * Build the deprecation information.
+- */
+- public void buildDeprecationInfo(XMLNode node) {
+- writer.writeDeprecated((FieldDoc) fields.get(currentFieldIndex));
+- }
+-
+- /**
+- * Build the comments for the field. Do nothing if
+- * {@link Configuration#nocomment} is set to true.
+- */
+- public void buildFieldComments(XMLNode node) {
+- if (!configuration.nocomment) {
+- writer.writeComments((FieldDoc) fields.get(currentFieldIndex));
+- }
+- }
+-
+- /**
+- * Build the tag information.
+- */
+- public void buildTagInfo(XMLNode node) {
+- writer.writeTags((FieldDoc) fields.get(currentFieldIndex));
+- }
+-
+- /**
+- * Build the footer for the individual field.
+- */
+- public void buildFieldFooter(XMLNode node) {
+- writer.writeFieldFooter();
+- }
+-
+- /**
+- * Build the overall footer.
+- */
+- public void buildFooter(XMLNode node) {
+- writer.writeFooter(classDoc);
+- }
+-
+- /**
+- * Return the field writer for this builder.
+- *
+- * @return the field writer for this builder.
+- */
+- public FieldWriter getWriter() {
+- return writer;
+- }
++ /**
++ * Return the field writer for this builder.
++ *
++ * @return the field writer for this builder.
++ */
++ public FieldWriter getWriter() {
++ return writer;
++ }
+ }
+diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/LayoutParser.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/LayoutParser.java
+--- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/LayoutParser.java
++++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/LayoutParser.java
+@@ -76,7 +76,7 @@
+ /**
+ * Parse the XML specifying the layout of the documentation.
+ *
+- * @return List the list of XML elements parsed.
++ * @return the list of XML elements parsed.
+ */
+ public XMLNode parseXML(String root) {
+ if (xmlElementsMap.containsKey(root)) {
+diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/MemberSummaryBuilder.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/MemberSummaryBuilder.java
+--- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/MemberSummaryBuilder.java
++++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/MemberSummaryBuilder.java
+@@ -25,10 +25,10 @@
+
+ package com.sun.tools.doclets.internal.toolkit.builders;
+
++import java.util.*;
+ import com.sun.tools.doclets.internal.toolkit.util.*;
+ import com.sun.tools.doclets.internal.toolkit.*;
+ import com.sun.javadoc.*;
+-import java.util.*;
+
+ /**
+ * Builds the member summary.
+@@ -38,49 +38,50 @@
+ * Do not use it as an API
+ *
+ * @author Jamie Ho
++ * @author Bhavesh Patel (Modified)
+ * @since 1.5
+ */
+ public class MemberSummaryBuilder extends AbstractMemberBuilder {
+
+- /**
+- * The XML root for this builder.
+- */
+- public static final String NAME = "MemberSummary";
++ /**
++ * The XML root for this builder.
++ */
++ public static final String NAME = "MemberSummary";
+
+- /**
+- * The visible members for the given class.
+- */
+- private VisibleMemberMap[] visibleMemberMaps;
++ /**
++ * The visible members for the given class.
++ */
++ private VisibleMemberMap[] visibleMemberMaps;
+
+- /**
+- * The member summary writers for the given class.
+- */
+- private MemberSummaryWriter[] memberSummaryWriters;
++ /**
++ * The member summary writers for the given class.
++ */
++ private MemberSummaryWriter[] memberSummaryWriters;
+
+- /**
+- * The type being documented.
+- */
+- private ClassDoc classDoc;
++ /**
++ * The type being documented.
++ */
++ private ClassDoc classDoc;
+
+- private MemberSummaryBuilder(Configuration configuration) {
+- super(configuration);
+- }
++ private MemberSummaryBuilder(Configuration configuration) {
++ super(configuration);
++ }
+
+- /**
+- * Construct a new MemberSummaryBuilder.
+- *
+- * @param classWriter the writer for the class whose members are being
+- * summarized.
+- * @param configuration the current configuration of the doclet.
+- */
+- public static MemberSummaryBuilder getInstance(
+- ClassWriter classWriter, Configuration configuration)
+- throws Exception {
+- MemberSummaryBuilder builder = new MemberSummaryBuilder(configuration);
+- builder.classDoc = classWriter.getClassDoc();
+- builder.init(classWriter);
+- return builder;
+- }
++ /**
++ * Construct a new MemberSummaryBuilder.
++ *
++ * @param classWriter the writer for the class whose members are being
++ * summarized.
++ * @param configuration the current configuration of the doclet.
++ */
++ public static MemberSummaryBuilder getInstance(
++ ClassWriter classWriter, Configuration configuration)
++ throws Exception {
++ MemberSummaryBuilder builder = new MemberSummaryBuilder(configuration);
++ builder.classDoc = classWriter.getClassDoc();
++ builder.init(classWriter);
++ return builder;
++ }
+
+ /**
+ * Construct a new MemberSummaryBuilder.
+@@ -90,8 +91,8 @@
+ * @param configuration the current configuration of the doclet.
+ */
+ public static MemberSummaryBuilder getInstance(
+- AnnotationTypeWriter annotationTypeWriter, Configuration configuration)
+- throws Exception {
++ AnnotationTypeWriter annotationTypeWriter, Configuration configuration)
++ throws Exception {
+ MemberSummaryBuilder builder = new MemberSummaryBuilder(configuration);
+ builder.classDoc = annotationTypeWriter.getAnnotationTypeDoc();
+ builder.init(annotationTypeWriter);
+@@ -100,200 +101,210 @@
+
+ private void init(Object writer) throws Exception {
+ visibleMemberMaps =
+- new VisibleMemberMap[VisibleMemberMap.NUM_MEMBER_TYPES];
++ new VisibleMemberMap[VisibleMemberMap.NUM_MEMBER_TYPES];
+ for (int i = 0; i < VisibleMemberMap.NUM_MEMBER_TYPES; i++) {
+ visibleMemberMaps[i] =
+- new VisibleMemberMap(
++ new VisibleMemberMap(
+ classDoc,
+ i,
+ configuration.nodeprecated);
+ }
+ memberSummaryWriters =
+- new MemberSummaryWriter[VisibleMemberMap.NUM_MEMBER_TYPES];
++ new MemberSummaryWriter[VisibleMemberMap.NUM_MEMBER_TYPES];
+ for (int i = 0; i < VisibleMemberMap.NUM_MEMBER_TYPES; i++) {
+ if (classDoc.isAnnotationType()) {
+ memberSummaryWriters[i] =
+ visibleMemberMaps[i].noVisibleMembers()?
+ null :
+ configuration.getWriterFactory().getMemberSummaryWriter(
+- (AnnotationTypeWriter) writer, i);
++ (AnnotationTypeWriter) writer, i);
+ } else {
+ memberSummaryWriters[i] =
+ visibleMemberMaps[i].noVisibleMembers()?
+ null :
+ configuration.getWriterFactory().getMemberSummaryWriter(
+- (ClassWriter) writer, i);
++ (ClassWriter) writer, i);
+ }
+ }
+
+ }
+
+- /**
+- * {@inheritDoc}
+- */
+- public String getName() {
+- return NAME;
+- }
++ /**
++ * {@inheritDoc}
++ */
++ public String getName() {
++ return NAME;
++ }
+
+- /**
+- * Return the specified visible member map.
+- *
+- * @param type the type of visible member map to return.
+- * @return the specified visible member map.
+- * @throws ArrayIndexOutOfBoundsException when the type is invalid.
+- * @see VisibleMemberMap
+- */
+- public VisibleMemberMap getVisibleMemberMap(int type) {
+- return visibleMemberMaps[type];
+- }
++ /**
++ * Return the specified visible member map.
++ *
++ * @param type the type of visible member map to return.
++ * @return the specified visible member map.
++ * @throws ArrayIndexOutOfBoundsException when the type is invalid.
++ * @see VisibleMemberMap
++ */
++ public VisibleMemberMap getVisibleMemberMap(int type) {
++ return visibleMemberMaps[type];
++ }
+
+- /**
+- * Return the specified member summary writer.
+- *
+- * @param type the type of member summary writer to return.
+- * @return the specified member summary writer.
+- * @throws ArrayIndexOutOfBoundsException when the type is invalid.
+- * @see VisibleMemberMap
+- */
+- public MemberSummaryWriter getMemberSummaryWriter(int type) {
+- return memberSummaryWriters[type];
+- }
++ /**
++ * Return the specified member summary writer.
++ *
++ * @param type the type of member summary writer to return.
++ * @return the specified member summary writer.
++ * @throws ArrayIndexOutOfBoundsException when the type is invalid.
++ * @see VisibleMemberMap
++ */
++ public MemberSummaryWriter getMemberSummaryWriter(int type) {
++ return memberSummaryWriters[type];
++ }
+
+- /**
+- * Returns a list of methods that will be documented for the given class.
+- * This information can be used for doclet specific documentation
+- * generation.
+- *
+- * @param classDoc the {@link ClassDoc} we want to check.
+- * @param type the type of members to return.
+- * @return a list of methods that will be documented.
+- * @see VisibleMemberMap
+- */
+- public List members(int type) {
+- return visibleMemberMaps[type].getLeafClassMembers(configuration);
+- }
++ /**
++ * Returns a list of methods that will be documented for the given class.
++ * This information can be used for doclet specific documentation
++ * generation.
++ *
++ * @param classDoc the {@link ClassDoc} we want to check.
++ * @param type the type of members to return.
++ * @return a list of methods that will be documented.
++ * @see VisibleMemberMap
++ */
++ public List<ProgramElementDoc> members(int type) {
++ return visibleMemberMaps[type].getLeafClassMembers(configuration);
++ }
+
+- /**
+- * Return true it there are any members to summarize.
+- *
+- * @return true if there are any members to summarize.
+- */
+- public boolean hasMembersToDocument() {
++ /**
++ * Return true it there are any members to summarize.
++ *
++ * @return true if there are any members to summarize.
++ */
++ public boolean hasMembersToDocument() {
+ if (classDoc instanceof AnnotationTypeDoc) {
+ return ((AnnotationTypeDoc) classDoc).elements().length > 0;
+ }
+- for (int i = 0; i < VisibleMemberMap.NUM_MEMBER_TYPES; i++) {
+- VisibleMemberMap members = visibleMemberMaps[i];
+- if (!members.noVisibleMembers()) {
+- return true;
+- }
+- }
+- return false;
++ for (int i = 0; i < VisibleMemberMap.NUM_MEMBER_TYPES; i++) {
++ VisibleMemberMap members = visibleMemberMaps[i];
++ if (!members.noVisibleMembers()) {
++ return true;
++ }
+ }
+
+- /**
+- * Build the summary for the enum constants.
+- */
+- public void buildEnumConstantsSummary(XMLNode node) {
+- buildSummary(
+- memberSummaryWriters[VisibleMemberMap.ENUM_CONSTANTS],
+- visibleMemberMaps[VisibleMemberMap.ENUM_CONSTANTS]);
+- }
++ return false;
++ }
+
+ /**
+- * Build the summary for the optional members.
++ * Build the summary for the enum constants.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param memberSummaryTree the content tree to which the documentation will be added
+ */
+- public void buildAnnotationTypeOptionalMemberSummary(XMLNode node) {
+- buildSummary(
+- memberSummaryWriters[VisibleMemberMap.ANNOTATION_TYPE_MEMBER_OPTIONAL],
+- visibleMemberMaps[VisibleMemberMap.ANNOTATION_TYPE_MEMBER_OPTIONAL]);
++ public void buildEnumConstantsSummary(XMLNode node, Content memberSummaryTree) {
++ MemberSummaryWriter writer =
++ memberSummaryWriters[VisibleMemberMap.ENUM_CONSTANTS];
++ VisibleMemberMap visibleMemberMap =
++ visibleMemberMaps[VisibleMemberMap.ENUM_CONSTANTS];
++ addSummary(writer, visibleMemberMap, false, memberSummaryTree);
+ }
+
+ /**
+ * Build the summary for the optional members.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param memberSummaryTree the content tree to which the documentation will be added
+ */
+- public void buildAnnotationTypeRequiredMemberSummary(XMLNode node) {
+- buildSummary(
+- memberSummaryWriters[VisibleMemberMap.ANNOTATION_TYPE_MEMBER_REQUIRED],
+- visibleMemberMaps[VisibleMemberMap.ANNOTATION_TYPE_MEMBER_REQUIRED]);
++ public void buildAnnotationTypeOptionalMemberSummary(XMLNode node, Content memberSummaryTree) {
++ MemberSummaryWriter writer =
++ memberSummaryWriters[VisibleMemberMap.ANNOTATION_TYPE_MEMBER_OPTIONAL];
++ VisibleMemberMap visibleMemberMap =
++ visibleMemberMaps[VisibleMemberMap.ANNOTATION_TYPE_MEMBER_OPTIONAL];
++ addSummary(writer, visibleMemberMap, false, memberSummaryTree);
+ }
+
+- /**
+- * Build the summary for the fields.
+- */
+- public void buildFieldsSummary(XMLNode node) {
+- buildSummary(
+- memberSummaryWriters[VisibleMemberMap.FIELDS],
+- visibleMemberMaps[VisibleMemberMap.FIELDS]);
+- }
++ /**
++ * Build the summary for the optional members.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param memberSummaryTree the content tree to which the documentation will be added
++ */
++ public void buildAnnotationTypeRequiredMemberSummary(XMLNode node, Content memberSummaryTree) {
++ MemberSummaryWriter writer =
++ memberSummaryWriters[VisibleMemberMap.ANNOTATION_TYPE_MEMBER_REQUIRED];
++ VisibleMemberMap visibleMemberMap =
++ visibleMemberMaps[VisibleMemberMap.ANNOTATION_TYPE_MEMBER_REQUIRED];
++ addSummary(writer, visibleMemberMap, false, memberSummaryTree);
++ }
+
+- /**
+- * Build the inherited summary for the fields.
+- */
+- public void buildFieldsInheritedSummary(XMLNode node) {
+- buildInheritedSummary(
+- memberSummaryWriters[VisibleMemberMap.FIELDS],
+- visibleMemberMaps[VisibleMemberMap.FIELDS]);
+- }
++ /**
++ * Build the summary for the fields.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param memberSummaryTree the content tree to which the documentation will be added
++ */
++ public void buildFieldsSummary(XMLNode node, Content memberSummaryTree) {
++ MemberSummaryWriter writer =
++ memberSummaryWriters[VisibleMemberMap.FIELDS];
++ VisibleMemberMap visibleMemberMap =
++ visibleMemberMaps[VisibleMemberMap.FIELDS];
++ addSummary(writer, visibleMemberMap, true, memberSummaryTree);
++ }
+
+- /**
+- * Build the summary for the nested classes.
+- */
+- public void buildNestedClassesSummary(XMLNode node) {
+- buildSummary(
+- memberSummaryWriters[VisibleMemberMap.INNERCLASSES],
+- visibleMemberMaps[VisibleMemberMap.INNERCLASSES]);
+- }
++ /**
++ * Build the summary for the nested classes.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param memberSummaryTree the content tree to which the documentation will be added
++ */
++ public void buildNestedClassesSummary(XMLNode node, Content memberSummaryTree) {
++ MemberSummaryWriter writer =
++ memberSummaryWriters[VisibleMemberMap.INNERCLASSES];
++ VisibleMemberMap visibleMemberMap =
++ visibleMemberMaps[VisibleMemberMap.INNERCLASSES];
++ addSummary(writer, visibleMemberMap, true, memberSummaryTree);
++ }
+
+- /**
+- * Build the inherited summary for the nested classes.
+- */
+- public void buildNestedClassesInheritedSummary(XMLNode node) {
+- buildInheritedSummary(
+- memberSummaryWriters[VisibleMemberMap.INNERCLASSES],
+- visibleMemberMaps[VisibleMemberMap.INNERCLASSES]);
+- }
++ /**
++ * Build the method summary.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param memberSummaryTree the content tree to which the documentation will be added
++ */
++ public void buildMethodsSummary(XMLNode node, Content memberSummaryTree) {
++ MemberSummaryWriter writer =
++ memberSummaryWriters[VisibleMemberMap.METHODS];
++ VisibleMemberMap visibleMemberMap =
++ visibleMemberMaps[VisibleMemberMap.METHODS];
++ addSummary(writer, visibleMemberMap, true, memberSummaryTree);
++ }
+
+- /**
+- * Build the method summary.
+- */
+- public void buildMethodsSummary(XMLNode node) {
+- buildSummary(
+- memberSummaryWriters[VisibleMemberMap.METHODS],
+- visibleMemberMaps[VisibleMemberMap.METHODS]);
+- }
++ /**
++ * Build the constructor summary.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param memberSummaryTree the content tree to which the documentation will be added
++ */
++ public void buildConstructorsSummary(XMLNode node, Content memberSummaryTree) {
++ MemberSummaryWriter writer =
++ memberSummaryWriters[VisibleMemberMap.CONSTRUCTORS];
++ VisibleMemberMap visibleMemberMap =
++ visibleMemberMaps[VisibleMemberMap.CONSTRUCTORS];
++ addSummary(writer, visibleMemberMap, false, memberSummaryTree);
++ }
+
+- /**
+- * Build the inherited method summary.
+- */
+- public void buildMethodsInheritedSummary(XMLNode node) {
+- buildInheritedSummary(
+- memberSummaryWriters[VisibleMemberMap.METHODS],
+- visibleMemberMaps[VisibleMemberMap.METHODS]);
+- }
+-
+- /**
+- * Build the constructor summary.
+- */
+- public void buildConstructorsSummary(XMLNode node) {
+- buildSummary(
+- memberSummaryWriters[VisibleMemberMap.CONSTRUCTORS],
+- visibleMemberMaps[VisibleMemberMap.CONSTRUCTORS]);
+- }
+-
+- /**
+- * Build the member summary for the given members.
+- *
+- * @param writer the summary writer to write the output.
+- * @param visibleMemberMap the given members to summarize.
+- */
+- private void buildSummary(MemberSummaryWriter writer,
+- VisibleMemberMap visibleMemberMap) {
+- List members = new ArrayList(visibleMemberMap.getLeafClassMembers(
+- configuration));
++ /**
++ * Build the member summary for the given members.
++ *
++ * @param writer the summary writer to write the output.
++ * @param visibleMemberMap the given members to summarize.
++ * @param summaryTreeList list of content trees to which the documentation will be added
++ */
++ private void buildSummary(MemberSummaryWriter writer,
++ VisibleMemberMap visibleMemberMap, LinkedList<Content> summaryTreeList) {
++ List<ProgramElementDoc> members = new ArrayList(visibleMemberMap.getLeafClassMembers(
++ configuration));
+ if (members.size() > 0) {
+ Collections.sort(members);
+- writer.writeMemberSummaryHeader(classDoc);
++ Content tableTree = writer.getSummaryTableTree(classDoc);
+ for (int i = 0; i < members.size(); i++) {
+ ProgramElementDoc member = (ProgramElementDoc) members.get(i);
+ Tag[] firstSentenceTags = member.firstSentenceTags();
+@@ -301,32 +312,32 @@
+ //Inherit comments from overriden or implemented method if
+ //necessary.
+ DocFinder.Output inheritedDoc =
+- DocFinder.search(new DocFinder.Input((MethodDoc) member));
++ DocFinder.search(new DocFinder.Input((MethodDoc) member));
+ if (inheritedDoc.holder != null &&
+ inheritedDoc.holder.firstSentenceTags().length > 0) {
+ firstSentenceTags = inheritedDoc.holder.firstSentenceTags();
+ }
+ }
+- writer.writeMemberSummary(classDoc, member, firstSentenceTags,
+- i == 0, i == members.size() - 1);
++ writer.addMemberSummary(classDoc, member, firstSentenceTags, tableTree, i);
+ }
+- writer.writeMemberSummaryFooter(classDoc);
++ summaryTreeList.add(tableTree);
+ }
+- }
++ }
+
+ /**
+ * Build the inherited member summary for the given methods.
+ *
+- * @param writer the writer for this member summary.
++ * @param writer the writer for this member summary.
+ * @param visibleMemberMap the map for the members to document.
++ * @param summaryTreeList list of content trees to which the documentation will be added
+ */
+- private void buildInheritedSummary(MemberSummaryWriter writer,
+- VisibleMemberMap visibleMemberMap) {
++ private void buildInheritedSummary(MemberSummaryWriter writer,
++ VisibleMemberMap visibleMemberMap, LinkedList<Content> summaryTreeList) {
+ for (Iterator iter = visibleMemberMap.getVisibleClassesList().iterator();
+ iter.hasNext();) {
+ ClassDoc inhclass = (ClassDoc) (iter.next());
+ if (! (inhclass.isPublic() ||
+- Util.isLinkable(inhclass, configuration))) {
++ Util.isLinkable(inhclass, configuration))) {
+ continue;
+ }
+ if (inhclass == classDoc) {
+@@ -335,18 +346,45 @@
+ List inhmembers = visibleMemberMap.getMembersFor(inhclass);
+ if (inhmembers.size() > 0) {
+ Collections.sort(inhmembers);
+- writer.writeInheritedMemberSummaryHeader(inhclass);
++ Content inheritedTree = writer.getInheritedSummaryHeader(inhclass);
++ Content linksTree = writer.getInheritedSummaryLinksTree();
+ for (int j = 0; j < inhmembers.size(); ++j) {
+- writer.writeInheritedMemberSummary(
+- inhclass.isPackagePrivate() &&
++ writer.addInheritedMemberSummary(
++ inhclass.isPackagePrivate() &&
+ ! Util.isLinkable(inhclass, configuration) ?
+ classDoc : inhclass,
+- (ProgramElementDoc) inhmembers.get(j),
+- j == 0,
+- j == inhmembers.size() - 1);
++ (ProgramElementDoc) inhmembers.get(j),
++ j == 0,
++ j == inhmembers.size() - 1, linksTree);
+ }
+- writer.writeInheritedMemberSummaryFooter(inhclass);
++ inheritedTree.addContent(linksTree);
++ summaryTreeList.add(writer.getMemberTree(inheritedTree));
+ }
+ }
+ }
++
++ /**
++ * Add the summary for the documentation.
++ *
++ * @param writer the writer for this member summary.
++ * @param visibleMemberMap the map for the members to document.
++ * @param showInheritedSummary true if inherited summary should be documented
++ * @param memberSummaryTree the content tree to which the documentation will be added
++ */
++ private void addSummary(MemberSummaryWriter writer,
++ VisibleMemberMap visibleMemberMap, boolean showInheritedSummary,
++ Content memberSummaryTree) {
++ LinkedList<Content> summaryTreeList = new LinkedList<Content>();
++ buildSummary(writer, visibleMemberMap, summaryTreeList);
++ if (showInheritedSummary)
++ buildInheritedSummary(writer, visibleMemberMap, summaryTreeList);
++ if (!summaryTreeList.isEmpty()) {
++ Content memberTree = writer.getMemberSummaryHeader(
++ classDoc, memberSummaryTree);
++ for (int i = 0; i < summaryTreeList.size(); i++) {
++ memberTree.addContent(summaryTreeList.get(i));
++ }
++ memberSummaryTree.addContent(writer.getMemberTree(memberTree));
++ }
++ }
+ }
+diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/MethodBuilder.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/MethodBuilder.java
+--- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/MethodBuilder.java
++++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/MethodBuilder.java
+@@ -25,10 +25,10 @@
+
+ package com.sun.tools.doclets.internal.toolkit.builders;
+
++import java.util.*;
+ import com.sun.tools.doclets.internal.toolkit.util.*;
+ import com.sun.tools.doclets.internal.toolkit.*;
+ import com.sun.javadoc.*;
+-import java.util.*;
+
+ /**
+ * Builds documentation for a method.
+@@ -38,164 +38,170 @@
+ * Do not use it as an API
+ *
+ * @author Jamie Ho
++ * @author Bhavesh Patel (Modified)
+ * @since 1.5
+ */
+ public class MethodBuilder extends AbstractMemberBuilder {
+
+- /**
+- * The index of the current field that is being documented at this point
+- * in time.
+- */
+- private int currentMethodIndex;
++ /**
++ * The index of the current field that is being documented at this point
++ * in time.
++ */
++ private int currentMethodIndex;
+
+- /**
+- * The class whose methods are being documented.
+- */
+- private ClassDoc classDoc;
++ /**
++ * The class whose methods are being documented.
++ */
++ private ClassDoc classDoc;
+
+- /**
+- * The visible methods for the given class.
+- */
+- private VisibleMemberMap visibleMemberMap;
++ /**
++ * The visible methods for the given class.
++ */
++ private VisibleMemberMap visibleMemberMap;
+
+- /**
+- * The writer to output the method documentation.
+- */
+- private MethodWriter writer;
++ /**
++ * The writer to output the method documentation.
++ */
++ private MethodWriter writer;
+
+- /**
+- * The methods being documented.
+- */
+- private List methods;
++ /**
++ * The methods being documented.
++ */
++ private List<ProgramElementDoc> methods;
+
+- private MethodBuilder(Configuration configuration) {
+- super(configuration);
++ private MethodBuilder(Configuration configuration) {
++ super(configuration);
++ }
++
++ /**
++ * Construct a new MethodBuilder.
++ *
++ * @param configuration the current configuration of the doclet.
++ * @param classDoc the class whoses members are being documented.
++ * @param writer the doclet specific writer.
++ *
++ * @return an instance of a MethodBuilder.
++ */
++ public static MethodBuilder getInstance(
++ Configuration configuration,
++ ClassDoc classDoc,
++ MethodWriter writer) {
++ MethodBuilder builder = new MethodBuilder(configuration);
++ builder.classDoc = classDoc;
++ builder.writer = writer;
++ builder.visibleMemberMap =
++ new VisibleMemberMap(
++ classDoc,
++ VisibleMemberMap.METHODS,
++ configuration.nodeprecated);
++ builder.methods =
++ new ArrayList<ProgramElementDoc>(builder.visibleMemberMap.getLeafClassMembers(
++ configuration));
++ if (configuration.getMemberComparator() != null) {
++ Collections.sort(
++ builder.methods,
++ configuration.getMemberComparator());
+ }
+
+- /**
+- * Construct a new MethodBuilder.
+- *
+- * @param configuration the current configuration of the doclet.
+- * @param classDoc the class whoses members are being documented.
+- * @param writer the doclet specific writer.
+- *
+- * @return an instance of a MethodBuilder.
+- */
+- public static MethodBuilder getInstance(
+- Configuration configuration,
+- ClassDoc classDoc,
+- MethodWriter writer) {
+- MethodBuilder builder = new MethodBuilder(configuration);
+- builder.classDoc = classDoc;
+- builder.writer = writer;
+- builder.visibleMemberMap =
+- new VisibleMemberMap(
+- classDoc,
+- VisibleMemberMap.METHODS,
+- configuration.nodeprecated);
+- builder.methods =
+- new ArrayList(builder.visibleMemberMap.getLeafClassMembers(
+- configuration));
+- if (configuration.getMemberComparator() != null) {
+- Collections.sort(
+- builder.methods,
+- configuration.getMemberComparator());
+- }
+- return builder;
++ /**
++ * {@inheritDoc}
++ */
++ public String getName() {
++ return "MethodDetails";
++ }
++
++ /**
++ * Returns a list of methods that will be documented for the given class.
++ * This information can be used for doclet specific documentation
++ * generation.
++ *
++ * @param classDoc the {@link ClassDoc} we want to check.
++ * @return a list of methods that will be documented.
++ */
++ public List<ProgramElementDoc> members(ClassDoc classDoc) {
++ return visibleMemberMap.getMembersFor(classDoc);
++ }
++
++ /**
++ * Returns the visible member map for the methods of this class.
++ *
++ * @return the visible member map for the methods of this class.
++ */
++ public VisibleMemberMap getVisibleMemberMap() {
++ return visibleMemberMap;
++ }
++
++ /**
++ * {@inheritDoc}
++ */
++ public boolean hasMembersToDocument() {
++ return methods.size() > 0;
++ }
++
++ /**
++ * Build the method documentation.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param memberDetailsTree the content tree to which the documentation will be added
++ */
++ public void buildMethodDoc(XMLNode node, Content memberDetailsTree) {
++ if (writer == null) {
++ return;
+ }
++ int size = methods.size();
++ if (size > 0) {
++ Content methodDetailsTree = writer.getMethodDetailsTreeHeader(
++ classDoc, memberDetailsTree);
++ for (currentMethodIndex = 0; currentMethodIndex < size;
++ currentMethodIndex++) {
++ Content methodDocTree = writer.getMethodDocTreeHeader(
++ (MethodDoc) methods.get(currentMethodIndex),
++ methodDetailsTree);
++ buildChildren(node, methodDocTree);
++ methodDetailsTree.addContent(writer.getMethodDoc(
++ methodDocTree, (currentMethodIndex == size - 1)));
++ }
++ memberDetailsTree.addContent(
++ writer.getMethodDetails(methodDetailsTree));
++ }
++ }
+
+- /**
+- * {@inheritDoc}
+- */
+- public String getName() {
+- return "MethodDetails";
+- }
++ /**
++ * Build the signature.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param methodDocTree the content tree to which the documentation will be added
++ */
++ public void buildSignature(XMLNode node, Content methodDocTree) {
++ methodDocTree.addContent(
++ writer.getSignature((MethodDoc) methods.get(currentMethodIndex)));
++ }
+
+- /**
+- * Returns a list of methods that will be documented for the given class.
+- * This information can be used for doclet specific documentation
+- * generation.
+- *
+- * @param classDoc the {@link ClassDoc} we want to check.
+- * @return a list of methods that will be documented.
+- */
+- public List members(ClassDoc classDoc) {
+- return visibleMemberMap.getMembersFor(classDoc);
+- }
++ /**
++ * Build the deprecation information.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param methodDocTree the content tree to which the documentation will be added
++ */
++ public void buildDeprecationInfo(XMLNode node, Content methodDocTree) {
++ writer.addDeprecated(
++ (MethodDoc) methods.get(currentMethodIndex), methodDocTree);
++ }
+
+- /**
+- * Returns the visible member map for the methods of this class.
+- *
+- * @return the visible member map for the methods of this class.
+- */
+- public VisibleMemberMap getVisibleMemberMap() {
+- return visibleMemberMap;
+- }
+-
+- /**
+- * {@inheritDoc}
+- */
+- public boolean hasMembersToDocument() {
+- return methods.size() > 0;
+- }
+-
+- /**
+- * Build the method documentation.
+- */
+- public void buildMethodDoc(XMLNode node) {
+- if (writer == null) {
+- return;
+- }
+- for (currentMethodIndex = 0;
+- currentMethodIndex < methods.size();
+- currentMethodIndex++) {
+- buildChildren(node);
+- }
+- }
+-
+- /**
+- * Build the overall header.
+- */
+- public void buildHeader(XMLNode node) {
+- writer.writeHeader(
+- classDoc,
+- configuration.getText("doclet.Method_Detail"));
+- }
+-
+- /**
+- * Build the header for the individual method.
+- */
+- public void buildMethodHeader(XMLNode node) {
+- writer.writeMethodHeader(
+- (MethodDoc) methods.get(currentMethodIndex),
+- currentMethodIndex == 0);
+- }
+-
+- /**
+- * Build the signature.
+- */
+- public void buildSignature(XMLNode node) {
+- writer.writeSignature((MethodDoc) methods.get(currentMethodIndex));
+- }
+-
+- /**
+- * Build the deprecation information.
+- */
+- public void buildDeprecationInfo(XMLNode node) {
+- writer.writeDeprecated((MethodDoc) methods.get(currentMethodIndex));
+- }
+-
+- /**
+- * Build the comments for the method. Do nothing if
+- * {@link Configuration#nocomment} is set to true. If this method
+- */
+- public void buildMethodComments(XMLNode node) {
+- if (!configuration.nocomment) {
++ /**
++ * Build the comments for the method. Do nothing if
++ * {@link Configuration#nocomment} is set to true.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param methodDocTree the content tree to which the documentation will be added
++ */
++ public void buildMethodComments(XMLNode node, Content methodDocTree) {
++ if (!configuration.nocomment) {
+ MethodDoc method = (MethodDoc) methods.get(currentMethodIndex);
+
+ if (method.inlineTags().length == 0) {
+ DocFinder.Output docs = DocFinder.search(
+- new DocFinder.Input(method));
++ new DocFinder.Input(method));
+ method = docs.inlineTags != null && docs.inlineTags.length > 0 ?
+ (MethodDoc) docs.holder : method;
+
+@@ -203,39 +209,27 @@
+ //NOTE: When we fix the bug where ClassDoc.interfaceTypes() does
+ // not pass all implemented interfaces, holder will be the
+ // interface type. For now, it is really the erasure.
+- writer.writeComments(method.containingClass(), method);
+- }
++ writer.addComments(method.containingClass(), method, methodDocTree);
+ }
++ }
+
++ /**
++ * Build the tag information.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param methodDocTree the content tree to which the documentation will be added
++ */
++ public void buildTagInfo(XMLNode node, Content methodDocTree) {
++ writer.addTags((MethodDoc) methods.get(currentMethodIndex),
++ methodDocTree);
++ }
+
+-
+- /**
+- * Build the tag information.
+- */
+- public void buildTagInfo(XMLNode node) {
+- writer.writeTags((MethodDoc) methods.get(currentMethodIndex));
+- }
+-
+- /**
+- * Build the footer of the method.
+- */
+- public void buildMethodFooter(XMLNode node) {
+- writer.writeMethodFooter();
+- }
+-
+- /**
+- * Build the overall footer.
+- */
+- public void buildFooter(XMLNode node) {
+- writer.writeFooter(classDoc);
+- }
+-
+- /**
+- * Return the method writer for this builder.
+- *
+- * @return the method writer for this builder.
+- */
+- public MethodWriter getWriter() {
+- return writer;
+- }
++ /**
++ * Return the method writer for this builder.
++ *
++ * @return the method writer for this builder.
++ */
++ public MethodWriter getWriter() {
++ return writer;
++ }
+ }
+diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/PackageSummaryBuilder.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/PackageSummaryBuilder.java
+--- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/PackageSummaryBuilder.java
++++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/PackageSummaryBuilder.java
+@@ -25,10 +25,10 @@
+
+ package com.sun.tools.doclets.internal.toolkit.builders;
+
++import java.io.*;
++import com.sun.javadoc.*;
+ import com.sun.tools.doclets.internal.toolkit.util.*;
+ import com.sun.tools.doclets.internal.toolkit.*;
+-import com.sun.javadoc.*;
+-import java.io.*;
+
+ /**
+ * Builds the summary for a given package.
+@@ -42,281 +42,315 @@
+ * @since 1.5
+ */
+ public class PackageSummaryBuilder extends AbstractBuilder {
++ /**
++ * The root element of the package summary XML is {@value}.
++ */
++ public static final String ROOT = "PackageDoc";
+
+- /**
+- * The root element of the package summary XML is {@value}.
+- */
+- public static final String ROOT = "PackageDoc";
++ /**
++ * The package being documented.
++ */
++ private PackageDoc packageDoc;
+
+- /**
+- * The package being documented.
+- */
+- private PackageDoc packageDoc;
++ /**
++ * The doclet specific writer that will output the result.
++ */
++ private PackageSummaryWriter packageWriter;
+
+- /**
+- * The doclet specific writer that will output the result.
+- */
+- private PackageSummaryWriter packageWriter;
++ /**
++ * The content that will be added to the package summary documentation tree.
++ */
++ private Content contentTree;
+
+- private PackageSummaryBuilder(Configuration configuration) {
+- super(configuration);
++ private PackageSummaryBuilder(Configuration configuration) {
++ super(configuration);
++ }
++
++ /**
++ * Construct a new PackageSummaryBuilder.
++ * @param configuration the current configuration of the doclet.
++ * @param pkg the package being documented.
++ * @param packageWriter the doclet specific writer that will output the
++ * result.
++ *
++ * @return an instance of a PackageSummaryBuilder.
++ */
++ public static PackageSummaryBuilder getInstance(
++ Configuration configuration,
++ PackageDoc pkg,
++ PackageSummaryWriter packageWriter) {
++ PackageSummaryBuilder builder =
++ new PackageSummaryBuilder(configuration);
++ builder.packageDoc = pkg;
++ builder.packageWriter = packageWriter;
++ return builder;
++ }
++
++ /**
++ * Build the package summary.
++ */
++ public void build() throws IOException {
++ if (packageWriter == null) {
++ //Doclet does not support this output.
++ return;
++ }
++ build(LayoutParser.getInstance(configuration).parseXML(ROOT), contentTree);
++ }
++
++ /**
++ * {@inheritDoc}
++ */
++ public String getName() {
++ return ROOT;
++ }
++
++ /**
++ * Build the package documentation.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param contentTree the content tree to which the documentation will be added
++ */
++ public void buildPackageDoc(XMLNode node, Content contentTree) throws Exception {
++ contentTree = packageWriter.getPackageHeader(
++ Util.getPackageName(packageDoc));
++ buildChildren(node, contentTree);
++ packageWriter.addPackageFooter(contentTree);
++ packageWriter.printDocument(contentTree);
++ packageWriter.close();
++ Util.copyDocFiles(
++ configuration,
++ Util.getPackageSourcePath(configuration, packageDoc),
++ DirectoryManager.getDirectoryPath(packageDoc)
++ + File.separator
++ + DocletConstants.DOC_FILES_DIR_NAME,
++ true);
++ }
++
++ /**
++ * Build the content for the package doc.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param contentTree the content tree to which the package contents
++ * will be added
++ */
++ public void buildContent(XMLNode node, Content contentTree) {
++ Content packageContentTree = packageWriter.getContentHeader();
++ buildChildren(node, packageContentTree);
++ contentTree.addContent(packageContentTree);
++ }
++
++ /**
++ * Build the package summary.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param packageContentTree the package content tree to which the summaries will
++ * be added
++ */
++ public void buildSummary(XMLNode node, Content packageContentTree) {
++ Content summaryContentTree = packageWriter.getSummaryHeader();
++ buildChildren(node, summaryContentTree);
++ packageContentTree.addContent(summaryContentTree);
++ }
++
++ /**
++ * Build the summary for the interfaces in this package.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param summaryContentTree the summary tree to which the interface summary
++ * will be added
++ */
++ public void buildInterfaceSummary(XMLNode node, Content summaryContentTree) {
++ String interfaceTableSummary =
++ configuration.getText("doclet.Member_Table_Summary",
++ configuration.getText("doclet.Interface_Summary"),
++ configuration.getText("doclet.interfaces"));
++ String[] interfaceTableHeader = new String[] {
++ configuration.getText("doclet.Interface"),
++ configuration.getText("doclet.Description")
++ };
++ ClassDoc[] interfaces =
++ packageDoc.isIncluded()
++ ? packageDoc.interfaces()
++ : configuration.classDocCatalog.interfaces(
++ Util.getPackageName(packageDoc));
++ if (interfaces.length > 0) {
++ packageWriter.addClassesSummary(
++ interfaces,
++ configuration.getText("doclet.Interface_Summary"),
++ interfaceTableSummary, interfaceTableHeader, summaryContentTree);
+ }
+
+- /**
+- * Construct a new PackageSummaryBuilder.
+- * @param configuration the current configuration of the doclet.
+- * @param pkg the package being documented.
+- * @param packageWriter the doclet specific writer that will output the
+- * result.
+- *
+- * @return an instance of a PackageSummaryBuilder.
+- */
+- public static PackageSummaryBuilder getInstance(
+- Configuration configuration,
+- PackageDoc pkg,
+- PackageSummaryWriter packageWriter) {
+- PackageSummaryBuilder builder =
+- new PackageSummaryBuilder(configuration);
+- builder.packageDoc = pkg;
+- builder.packageWriter = packageWriter;
+- return builder;
++ /**
++ * Build the summary for the classes in this package.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param summaryContentTree the summary tree to which the class summary will
++ * be added
++ */
++ public void buildClassSummary(XMLNode node, Content summaryContentTree) {
++ String classTableSummary =
++ configuration.getText("doclet.Member_Table_Summary",
++ configuration.getText("doclet.Class_Summary"),
++ configuration.getText("doclet.classes"));
++ String[] classTableHeader = new String[] {
++ configuration.getText("doclet.Class"),
++ configuration.getText("doclet.Description")
++ };
++ ClassDoc[] classes =
++ packageDoc.isIncluded()
++ ? packageDoc.ordinaryClasses()
++ : configuration.classDocCatalog.ordinaryClasses(
++ Util.getPackageName(packageDoc));
++ if (classes.length > 0) {
++ packageWriter.addClassesSummary(
++ classes,
++ configuration.getText("doclet.Class_Summary"),
++ classTableSummary, classTableHeader, summaryContentTree);
++ }
++ }
++
++ /**
++ * Build the summary for the enums in this package.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param summaryContentTree the summary tree to which the enum summary will
++ * be added
++ */
++ public void buildEnumSummary(XMLNode node, Content summaryContentTree) {
++ String enumTableSummary =
++ configuration.getText("doclet.Member_Table_Summary",
++ configuration.getText("doclet.Enum_Summary"),
++ configuration.getText("doclet.enums"));
++ String[] enumTableHeader = new String[] {
++ configuration.getText("doclet.Enum"),
++ configuration.getText("doclet.Description")
++ };
++ ClassDoc[] enums =
++ packageDoc.isIncluded()
++ ? packageDoc.enums()
++ : configuration.classDocCatalog.enums(
++ Util.getPackageName(packageDoc));
++ if (enums.length > 0) {
++ packageWriter.addClassesSummary(
++ enums,
++ configuration.getText("doclet.Enum_Summary"),
++ enumTableSummary, enumTableHeader, summaryContentTree);
++ }
++ }
++
++ /**
++ * Build the summary for the exceptions in this package.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param summaryContentTree the summary tree to which the exception summary will
++ * be added
++ */
++ public void buildExceptionSummary(XMLNode node, Content summaryContentTree) {
++ String exceptionTableSummary =
++ configuration.getText("doclet.Member_Table_Summary",
++ configuration.getText("doclet.Exception_Summary"),
++ configuration.getText("doclet.exceptions"));
++ String[] exceptionTableHeader = new String[] {
++ configuration.getText("doclet.Exception"),
++ configuration.getText("doclet.Description")
++ };
++ ClassDoc[] exceptions =
++ packageDoc.isIncluded()
++ ? packageDoc.exceptions()
++ : configuration.classDocCatalog.exceptions(
++ Util.getPackageName(packageDoc));
++ if (exceptions.length > 0) {
++ packageWriter.addClassesSummary(
++ exceptions,
++ configuration.getText("doclet.Exception_Summary"),
++ exceptionTableSummary, exceptionTableHeader, summaryContentTree);
++ }
++ }
++
++ /**
++ * Build the summary for the errors in this package.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param summaryContentTree the summary tree to which the error summary will
++ * be added
++ */
++ public void buildErrorSummary(XMLNode node, Content summaryContentTree) {
++ String errorTableSummary =
++ configuration.getText("doclet.Member_Table_Summary",
++ configuration.getText("doclet.Error_Summary"),
++ configuration.getText("doclet.errors"));
++ String[] errorTableHeader = new String[] {
++ configuration.getText("doclet.Error"),
++ configuration.getText("doclet.Description")
++ };
++ ClassDoc[] errors =
++ packageDoc.isIncluded()
++ ? packageDoc.errors()
++ : configuration.classDocCatalog.errors(
++ Util.getPackageName(packageDoc));
++ if (errors.length > 0) {
++ packageWriter.addClassesSummary(
++ errors,
++ configuration.getText("doclet.Error_Summary"),
++ errorTableSummary, errorTableHeader, summaryContentTree);
++ }
++ }
++
++ /**
++ * Build the summary for the annotation type in this package.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param summaryContentTree the summary tree to which the annotation type
++ * summary will be added
++ */
++ public void buildAnnotationTypeSummary(XMLNode node, Content summaryContentTree) {
++ String annotationtypeTableSummary =
++ configuration.getText("doclet.Member_Table_Summary",
++ configuration.getText("doclet.Annotation_Types_Summary"),
++ configuration.getText("doclet.annotationtypes"));
++ String[] annotationtypeTableHeader = new String[] {
++ configuration.getText("doclet.AnnotationType"),
++ configuration.getText("doclet.Description")
++ };
++ ClassDoc[] annotationTypes =
++ packageDoc.isIncluded()
++ ? packageDoc.annotationTypes()
++ : configuration.classDocCatalog.annotationTypes(
++ Util.getPackageName(packageDoc));
++ if (annotationTypes.length > 0) {
++ packageWriter.addClassesSummary(
++ annotationTypes,
++ configuration.getText("doclet.Annotation_Types_Summary"),
++ annotationtypeTableSummary, annotationtypeTableHeader,
++ summaryContentTree);
++ }
++ }
++
++ /**
++ * Build the description of the summary.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param packageContentTree the tree to which the package description will
++ * be added
++ */
++ public void buildPackageDescription(XMLNode node, Content packageContentTree) {
++ if (configuration.nocomment) {
++ return;
++ }
++ packageWriter.addPackageDescription(packageContentTree);
++ }
++
++ /**
++ * Build the tags of the summary.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param packageContentTree the tree to which the package tags will be added
++ */
++ public void buildPackageTags(XMLNode node, Content packageContentTree) {
++ if (configuration.nocomment) {
++ return;
+ }
+
+- /**
+- * Build the package summary.
+- */
+- public void build() throws IOException {
+- if (packageWriter == null) {
+- //Doclet does not support this output.
+- return;
+- }
+- build(LayoutParser.getInstance(configuration).parseXML(ROOT));
+- }
+-
+- /**
+- * {@inheritDoc}
+- */
+- public String getName() {
+- return ROOT;
+- }
+-
+- /**
+- * Build the package documentation.
+- */
+- public void buildPackageDoc(XMLNode node) throws Exception {
+- buildChildren(node);
+- packageWriter.close();
+- Util.copyDocFiles(
+- configuration,
+- Util.getPackageSourcePath(configuration, packageDoc),
+- DirectoryManager.getDirectoryPath(packageDoc)
+- + File.separator
+- + DocletConstants.DOC_FILES_DIR_NAME,
+- true);
+- }
+-
+- /**
+- * Build the header of the summary.
+- */
+- public void buildPackageHeader(XMLNode node) {
+- packageWriter.writePackageHeader(Util.getPackageName(packageDoc));
+- }
+-
+- /**
+- * Build the description of the summary.
+- */
+- public void buildPackageDescription(XMLNode node) {
+- if (configuration.nocomment) {
+- return;
+- }
+- packageWriter.writePackageDescription();
+- }
+-
+- /**
+- * Build the tags of the summary.
+- */
+- public void buildPackageTags(XMLNode node) {
+- if (configuration.nocomment) {
+- return;
+- }
+- packageWriter.writePackageTags();
+- }
+-
+- /**
+- * Build the package summary.
+- */
+- public void buildSummary(XMLNode node) {
+- buildChildren(node);
+- }
+-
+- /**
+- * Build the overall header.
+- */
+- public void buildSummaryHeader(XMLNode node) {
+- packageWriter.writeSummaryHeader();
+- }
+-
+- /**
+- * Build the overall footer.
+- */
+- public void buildSummaryFooter(XMLNode node) {
+- packageWriter.writeSummaryFooter();
+- }
+-
+- /**
+- * Build the summary for the classes in this package.
+- */
+- public void buildClassSummary(XMLNode node) {
+- String classTableSummary =
+- configuration.getText("doclet.Member_Table_Summary",
+- configuration.getText("doclet.Class_Summary"),
+- configuration.getText("doclet.classes"));
+- String[] classTableHeader = new String[] {
+- configuration.getText("doclet.Class"),
+- configuration.getText("doclet.Description")
+- };
+- ClassDoc[] classes =
+- packageDoc.isIncluded()
+- ? packageDoc.ordinaryClasses()
+- : configuration.classDocCatalog.ordinaryClasses(
+- Util.getPackageName(packageDoc));
+- if (classes.length > 0) {
+- packageWriter.writeClassesSummary(
+- classes,
+- configuration.getText("doclet.Class_Summary"),
+- classTableSummary, classTableHeader);
+- }
+- }
+-
+- /**
+- * Build the summary for the interfaces in this package.
+- */
+- public void buildInterfaceSummary(XMLNode node) {
+- String interfaceTableSummary =
+- configuration.getText("doclet.Member_Table_Summary",
+- configuration.getText("doclet.Interface_Summary"),
+- configuration.getText("doclet.interfaces"));
+- String[] interfaceTableHeader = new String[] {
+- configuration.getText("doclet.Interface"),
+- configuration.getText("doclet.Description")
+- };
+- ClassDoc[] interfaces =
+- packageDoc.isIncluded()
+- ? packageDoc.interfaces()
+- : configuration.classDocCatalog.interfaces(
+- Util.getPackageName(packageDoc));
+- if (interfaces.length > 0) {
+- packageWriter.writeClassesSummary(
+- interfaces,
+- configuration.getText("doclet.Interface_Summary"),
+- interfaceTableSummary, interfaceTableHeader);
+- }
+- }
+-
+- /**
+- * Build the summary for the enums in this package.
+- */
+- public void buildAnnotationTypeSummary(XMLNode node) {
+- String annotationtypeTableSummary =
+- configuration.getText("doclet.Member_Table_Summary",
+- configuration.getText("doclet.Annotation_Types_Summary"),
+- configuration.getText("doclet.annotationtypes"));
+- String[] annotationtypeTableHeader = new String[] {
+- configuration.getText("doclet.AnnotationType"),
+- configuration.getText("doclet.Description")
+- };
+- ClassDoc[] annotationTypes =
+- packageDoc.isIncluded()
+- ? packageDoc.annotationTypes()
+- : configuration.classDocCatalog.annotationTypes(
+- Util.getPackageName(packageDoc));
+- if (annotationTypes.length > 0) {
+- packageWriter.writeClassesSummary(
+- annotationTypes,
+- configuration.getText("doclet.Annotation_Types_Summary"),
+- annotationtypeTableSummary, annotationtypeTableHeader);
+- }
+- }
+-
+- /**
+- * Build the summary for the enums in this package.
+- */
+- public void buildEnumSummary(XMLNode node) {
+- String enumTableSummary =
+- configuration.getText("doclet.Member_Table_Summary",
+- configuration.getText("doclet.Enum_Summary"),
+- configuration.getText("doclet.enums"));
+- String[] enumTableHeader = new String[] {
+- configuration.getText("doclet.Enum"),
+- configuration.getText("doclet.Description")
+- };
+- ClassDoc[] enums =
+- packageDoc.isIncluded()
+- ? packageDoc.enums()
+- : configuration.classDocCatalog.enums(
+- Util.getPackageName(packageDoc));
+- if (enums.length > 0) {
+- packageWriter.writeClassesSummary(
+- enums,
+- configuration.getText("doclet.Enum_Summary"),
+- enumTableSummary, enumTableHeader);
+- }
+- }
+-
+- /**
+- * Build the summary for the exceptions in this package.
+- */
+- public void buildExceptionSummary(XMLNode node) {
+- String exceptionTableSummary =
+- configuration.getText("doclet.Member_Table_Summary",
+- configuration.getText("doclet.Exception_Summary"),
+- configuration.getText("doclet.exceptions"));
+- String[] exceptionTableHeader = new String[] {
+- configuration.getText("doclet.Exception"),
+- configuration.getText("doclet.Description")
+- };
+- ClassDoc[] exceptions =
+- packageDoc.isIncluded()
+- ? packageDoc.exceptions()
+- : configuration.classDocCatalog.exceptions(
+- Util.getPackageName(packageDoc));
+- if (exceptions.length > 0) {
+- packageWriter.writeClassesSummary(
+- exceptions,
+- configuration.getText("doclet.Exception_Summary"),
+- exceptionTableSummary, exceptionTableHeader);
+- }
+- }
+-
+- /**
+- * Build the summary for the errors in this package.
+- */
+- public void buildErrorSummary(XMLNode node) {
+- String errorTableSummary =
+- configuration.getText("doclet.Member_Table_Summary",
+- configuration.getText("doclet.Error_Summary"),
+- configuration.getText("doclet.errors"));
+- String[] errorTableHeader = new String[] {
+- configuration.getText("doclet.Error"),
+- configuration.getText("doclet.Description")
+- };
+- ClassDoc[] errors =
+- packageDoc.isIncluded()
+- ? packageDoc.errors()
+- : configuration.classDocCatalog.errors(
+- Util.getPackageName(packageDoc));
+- if (errors.length > 0) {
+- packageWriter.writeClassesSummary(
+- errors,
+- configuration.getText("doclet.Error_Summary"),
+- errorTableSummary, errorTableHeader);
+- }
+- }
+-
+- /**
+- * Build the footer of the summary.
+- */
+- public void buildPackageFooter(XMLNode node) {
+- packageWriter.writePackageFooter();
+- }
++ packageWriter.addPackageTags(packageContentTree);
++ }
+ }
+diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/SerializedFormBuilder.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/SerializedFormBuilder.java
+--- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/SerializedFormBuilder.java
++++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/SerializedFormBuilder.java
+@@ -27,7 +27,6 @@
+
+ import java.io.*;
+ import java.util.*;
+-
+ import com.sun.javadoc.*;
+ import com.sun.tools.doclets.internal.toolkit.util.*;
+ import com.sun.tools.doclets.internal.toolkit.*;
+@@ -87,6 +86,11 @@
+ */
+ protected MemberDoc currentMember;
+
++ /**
++ * The content that will be added to the serialized form documentation tree.
++ */
++ private Content contentTree;
++
+ private SerializedFormBuilder(Configuration configuration) {
+ super(configuration);
+ }
+@@ -117,7 +121,7 @@
+ } catch (Exception e) {
+ throw new DocletAbortException();
+ }
+- build(LayoutParser.getInstance(configuration).parseXML(NAME));
++ build(LayoutParser.getInstance(configuration).parseXML(NAME), contentTree);
+ writer.close();
+ }
+
+@@ -130,34 +134,44 @@
+
+ /**
+ * Build the serialized form.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param serializedTree content tree to which the documentation will be added
+ */
+- public void buildSerializedForm(XMLNode node) throws Exception {
+- buildChildren(node);
++ public void buildSerializedForm(XMLNode node, Content serializedTree) throws Exception {
++ serializedTree = writer.getHeader(configuration.getText(
++ "doclet.Serialized_Form"));
++ buildChildren(node, serializedTree);
++ writer.addFooter(serializedTree);
++ writer.printDocument(serializedTree);
+ writer.close();
+ }
+
+ /**
+- * Build the header.
++ * Build the serialized form summaries.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param serializedTree content tree to which the documentation will be added
+ */
+- public void buildHeader(XMLNode node) {
+- writer.writeHeader(configuration.getText("doclet.Serialized_Form"));
++ public void buildSerializedFormSummaries(XMLNode node, Content serializedTree) {
++ Content serializedSummariesTree = writer.getSerializedSummariesHeader();
++ PackageDoc[] packages = configuration.packages;
++ for (int i = 0; i < packages.length; i++) {
++ currentPackage = packages[i];
++ buildChildren(node, serializedSummariesTree);
++ }
++ serializedTree.addContent(writer.getSerializedContent(
++ serializedSummariesTree));
+ }
+
+ /**
+- * Build the contents.
++ * Build the package serialized form for the current package being processed.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param serializedSummariesTree content tree to which the documentation will be added
+ */
+- public void buildSerializedFormSummaries(XMLNode node) {
+- PackageDoc[] packages = configuration.packages;
+- for (int i = 0; i < packages.length; i++) {
+- currentPackage = packages[i];
+- buildChildren(node);
+- }
+- }
+-
+- /**
+- * Build the package serialized for for the current package being processed.
+- */
+- public void buildPackageSerializedForm(XMLNode node) {
++ public void buildPackageSerializedForm(XMLNode node, Content serializedSummariesTree) {
++ Content packageSerializedTree = writer.getPackageSerializedHeader();
+ String foo = currentPackage.name();
+ ClassDoc[] classes = currentPackage.allClasses(false);
+ if (classes == null || classes.length == 0) {
+@@ -169,14 +183,29 @@
+ if (!serialClassFoundToDocument(classes)) {
+ return;
+ }
+- buildChildren(node);
++ buildChildren(node, packageSerializedTree);
++ serializedSummariesTree.addContent(packageSerializedTree);
+ }
+
+- public void buildPackageHeader(XMLNode node) {
+- writer.writePackageHeader(Util.getPackageName(currentPackage));
++ /**
++ * Build the package header.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param packageSerializedTree content tree to which the documentation will be added
++ */
++ public void buildPackageHeader(XMLNode node, Content packageSerializedTree) {
++ packageSerializedTree.addContent(writer.getPackageHeader(
++ Util.getPackageName(currentPackage)));
+ }
+
+- public void buildClassSerializedForm(XMLNode node) {
++ /**
++ * Build the class serialized form.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param packageSerializedTree content tree to which the documentation will be added
++ */
++ public void buildClassSerializedForm(XMLNode node, Content packageSerializedTree) {
++ Content classSerializedTree = writer.getClassSerializedHeader();
+ ClassDoc[] classes = currentPackage.allClasses(false);
+ Arrays.sort(classes);
+ for (int j = 0; j < classes.length; j++) {
+@@ -187,35 +216,293 @@
+ if(!serialClassInclude(currentClass)) {
+ continue;
+ }
+- buildChildren(node);
++ Content classTree = writer.getClassHeader(currentClass);
++ buildChildren(node, classTree);
++ classSerializedTree.addContent(classTree);
+ }
+ }
+- }
+-
+- public void buildClassHeader(XMLNode node) {
+- writer.writeClassHeader(currentClass);
++ packageSerializedTree.addContent(classSerializedTree);
+ }
+
+ /**
+ * Build the serial UID information for the given class.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param classTree content tree to which the serial UID information will be added
+ */
+- public void buildSerialUIDInfo(XMLNode node) {
++ public void buildSerialUIDInfo(XMLNode node, Content classTree) {
++ Content serialUidTree = writer.getSerialUIDInfoHeader();
+ FieldDoc[] fields = currentClass.fields(false);
+ for (int i = 0; i < fields.length; i++) {
+ if (fields[i].name().equals("serialVersionUID") &&
+ fields[i].constantValueExpression() != null) {
+- writer.writeSerialUIDInfo(SERIAL_VERSION_UID_HEADER,
+- fields[i].constantValueExpression());
+- return;
++ writer.addSerialUIDInfo(SERIAL_VERSION_UID_HEADER,
++ fields[i].constantValueExpression(), serialUidTree);
++ break;
++ }
++ }
++ classTree.addContent(serialUidTree);
++ }
++
++ /**
++ * Build the summaries for the methods and fields.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param classTree content tree to which the documentation will be added
++ */
++ public void buildClassContent(XMLNode node, Content classTree) {
++ Content classContentTree = writer.getClassContentHeader();
++ buildChildren(node, classContentTree);
++ classTree.addContent(classContentTree);
++ }
++
++ /**
++ * Build the summaries for the methods that belong to the given
++ * class.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param classContentTree content tree to which the documentation will be added
++ */
++ public void buildSerializableMethods(XMLNode node, Content classContentTree) {
++ Content serializableMethodTree = methodWriter.getSerializableMethodsHeader();
++ MemberDoc[] members = currentClass.serializationMethods();
++ int membersLength = members.length;
++ if (membersLength > 0) {
++ for (int i = 0; i < membersLength; i++) {
++ currentMember = members[i];
++ Content methodsContentTree = methodWriter.getMethodsContentHeader(
++ (i == membersLength - 1));
++ buildChildren(node, methodsContentTree);
++ serializableMethodTree.addContent(methodsContentTree);
++ }
++ }
++ if (currentClass.serializationMethods().length > 0) {
++ classContentTree.addContent(methodWriter.getSerializableMethods(
++ configuration.getText("doclet.Serialized_Form_methods"),
++ serializableMethodTree));
++ if (currentClass.isSerializable() && !currentClass.isExternalizable()) {
++ if (currentClass.serializationMethods().length == 0) {
++ Content noCustomizationMsg = methodWriter.getNoCustomizationMsg(
++ configuration.getText(
++ "doclet.Serializable_no_customization"));
++ classContentTree.addContent(methodWriter.getSerializableMethods(
++ configuration.getText("doclet.Serialized_Form_methods"),
++ noCustomizationMsg));
++ }
+ }
+ }
+ }
+
+ /**
+- * Build the footer.
++ * Build the method sub header.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param methodsContentTree content tree to which the documentation will be added
+ */
+- public void buildFooter(XMLNode node) {
+- writer.writeFooter();
++ public void buildMethodSubHeader(XMLNode node, Content methodsContentTree) {
++ methodWriter.addMemberHeader((MethodDoc)currentMember, methodsContentTree);
++ }
++
++ /**
++ * Build the deprecated method description.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param methodsContentTree content tree to which the documentation will be added
++ */
++ public void buildDeprecatedMethodInfo(XMLNode node, Content methodsContentTree) {
++ methodWriter.addDeprecatedMemberInfo((MethodDoc) currentMember, methodsContentTree);
++ }
++
++ /**
++ * Build the information for the method.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param methodsContentTree content tree to which the documentation will be added
++ */
++ public void buildMethodInfo(XMLNode node, Content methodsContentTree) {
++ if(configuration.nocomment){
++ return;
++ }
++ buildChildren(node, methodsContentTree);
++ }
++
++ /**
++ * Build method description.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param methodsContentTree content tree to which the documentation will be added
++ */
++ public void buildMethodDescription(XMLNode node, Content methodsContentTree) {
++ methodWriter.addMemberDescription((MethodDoc) currentMember, methodsContentTree);
++ }
++
++ /**
++ * Build the method tags.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param methodsContentTree content tree to which the documentation will be added
++ */
++ public void buildMethodTags(XMLNode node, Content methodsContentTree) {
++ methodWriter.addMemberTags((MethodDoc) currentMember, methodsContentTree);
++ MethodDoc method = (MethodDoc)currentMember;
++ if (method.name().compareTo("writeExternal") == 0
++ && method.tags("serialData").length == 0) {
++ if (configuration.serialwarn) {
++ configuration.getDocletSpecificMsg().warning(
++ currentMember.position(), "doclet.MissingSerialDataTag",
++ method.containingClass().qualifiedName(), method.name());
++ }
++ }
++ }
++
++ /**
++ * Build the field header.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param classContentTree content tree to which the documentation will be added
++ */
++ public void buildFieldHeader(XMLNode node, Content classContentTree) {
++ if (currentClass.serializableFields().length > 0) {
++ buildFieldSerializationOverview(currentClass, classContentTree);
++ }
++ }
++
++ /**
++ * Build the serialization overview for the given class.
++ *
++ * @param classDoc the class to print the overview for.
++ * @param classContentTree content tree to which the documentation will be added
++ */
++ public void buildFieldSerializationOverview(ClassDoc classDoc, Content classContentTree) {
++ if (classDoc.definesSerializableFields()) {
++ FieldDoc serialPersistentField =
++ Util.asList(classDoc.serializableFields()).get(0);
++ // Check to see if there are inline comments, tags or deprecation
++ // information to be printed.
++ if (fieldWriter.shouldPrintOverview(serialPersistentField)) {
++ Content serializableFieldsTree = fieldWriter.getSerializableFieldsHeader();
++ Content fieldsOverviewContentTree = fieldWriter.getFieldsContentHeader(true);
++ fieldWriter.addMemberDeprecatedInfo(serialPersistentField,
++ fieldsOverviewContentTree);
++ if (!configuration.nocomment) {
++ fieldWriter.addMemberDescription(serialPersistentField,
++ fieldsOverviewContentTree);
++ fieldWriter.addMemberTags(serialPersistentField,
++ fieldsOverviewContentTree);
++ }
++ serializableFieldsTree.addContent(fieldsOverviewContentTree);
++ classContentTree.addContent(fieldWriter.getSerializableFields(
++ configuration.getText("doclet.Serialized_Form_class"),
++ serializableFieldsTree));
++ }
++ }
++ }
++
++ /**
++ * Build the summaries for the fields that belong to the given class.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param classContentTree content tree to which the documentation will be added
++ */
++ public void buildSerializableFields(XMLNode node, Content classContentTree) {
++ MemberDoc[] members = currentClass.serializableFields();
++ int membersLength = members.length;
++ if (membersLength > 0) {
++ Content serializableFieldsTree = fieldWriter.getSerializableFieldsHeader();
++ for (int i = 0; i < membersLength; i++) {
++ currentMember = members[i];
++ if (!currentClass.definesSerializableFields()) {
++ Content fieldsContentTree = fieldWriter.getFieldsContentHeader(
++ (i == membersLength - 1));
++ buildChildren(node, fieldsContentTree);
++ serializableFieldsTree.addContent(fieldsContentTree);
++ }
++ else {
++ buildSerialFieldTagsInfo(serializableFieldsTree);
++ }
++ }
++ classContentTree.addContent(fieldWriter.getSerializableFields(
++ configuration.getText("doclet.Serialized_Form_fields"),
++ serializableFieldsTree));
++ }
++ }
++
++ /**
++ * Build the field sub header.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param fieldsContentTree content tree to which the documentation will be added
++ */
++ public void buildFieldSubHeader(XMLNode node, Content fieldsContentTree) {
++ if (!currentClass.definesSerializableFields()) {
++ FieldDoc field = (FieldDoc) currentMember;
++ fieldWriter.addMemberHeader(field.type().asClassDoc(),
++ field.type().typeName(), field.type().dimension(), field.name(),
++ fieldsContentTree);
++ }
++ }
++
++ /**
++ * Build the field deprecation information.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param fieldsContentTree content tree to which the documentation will be added
++ */
++ public void buildFieldDeprecationInfo(XMLNode node, Content fieldsContentTree) {
++ if (!currentClass.definesSerializableFields()) {
++ FieldDoc field = (FieldDoc)currentMember;
++ fieldWriter.addMemberDeprecatedInfo(field, fieldsContentTree);
++ }
++ }
++
++ /**
++ * Build the serial field tags information.
++ *
++ * @param serializableFieldsTree content tree to which the documentation will be added
++ */
++ public void buildSerialFieldTagsInfo(Content serializableFieldsTree) {
++ if(configuration.nocomment){
++ return;
++ }
++ FieldDoc field = (FieldDoc)currentMember;
++ // Process Serializable Fields specified as array of
++ // ObjectStreamFields. Print a member for each serialField tag.
++ // (There should be one serialField tag per ObjectStreamField
++ // element.)
++ SerialFieldTag[] tags = field.serialFieldTags();
++ Arrays.sort(tags);
++ int tagsLength = tags.length;
++ for (int i = 0; i < tagsLength; i++) {
++ Content fieldsContentTree = fieldWriter.getFieldsContentHeader(
++ (i == tagsLength - 1));
++ fieldWriter.addMemberHeader(tags[i].fieldTypeDoc(),
++ tags[i].fieldType(), "", tags[i].fieldName(), fieldsContentTree);
++ fieldWriter.addMemberDescription(tags[i], fieldsContentTree);
++ serializableFieldsTree.addContent(fieldsContentTree);
++ }
++ }
++
++ /**
++ * Build the field information.
++ *
++ * @param node the XML element that specifies which components to document
++ * @param fieldsContentTree content tree to which the documentation will be added
++ */
++ public void buildFieldInfo(XMLNode node, Content fieldsContentTree) {
++ if(configuration.nocomment){
++ return;
++ }
++ FieldDoc field = (FieldDoc)currentMember;
++ ClassDoc cd = field.containingClass();
++ // Process default Serializable field.
++ if ((field.tags("serial").length == 0) && ! field.isSynthetic()
++ && configuration.serialwarn) {
++ configuration.message.warning(field.position(),
++ "doclet.MissingSerialTag", cd.qualifiedName(),
++ field.name());
++ }
++ fieldWriter.addMemberDescription(field, fieldsContentTree);
++ fieldWriter.addMemberTags(field, fieldsContentTree);
+ }
+
+ /**
+@@ -298,208 +585,4 @@
+ return false;
+ }
+
+- /**
+- * Build the method header.
+- */
+- public void buildMethodHeader(XMLNode node) {
+- if (currentClass.serializationMethods().length > 0) {
+- methodWriter.writeHeader(
+- configuration.getText("doclet.Serialized_Form_methods"));
+- if (currentClass.isSerializable() && !currentClass.isExternalizable()) {
+- if (currentClass.serializationMethods().length == 0) {
+- methodWriter.writeNoCustomizationMsg(
+- configuration.getText(
+- "doclet.Serializable_no_customization"));
+- }
+- }
+- }
+- }
+-
+- /**
+- * Build the method sub header.
+- */
+- public void buildMethodSubHeader(XMLNode node) {
+- methodWriter.writeMemberHeader((MethodDoc) currentMember);
+- }
+-
+- /**
+- * Build the deprecated method description.
+- */
+- public void buildDeprecatedMethodInfo(XMLNode node) {
+- methodWriter.writeDeprecatedMemberInfo((MethodDoc) currentMember);
+- }
+-
+- /**
+- * Build method tags.
+- */
+- public void buildMethodDescription(XMLNode node) {
+- methodWriter.writeMemberDescription((MethodDoc) currentMember);
+- }
+-
+- /**
+- * Build the method tags.
+- */
+- public void buildMethodTags(XMLNode node) {
+- methodWriter.writeMemberTags((MethodDoc) currentMember);
+- MethodDoc method = (MethodDoc)currentMember;
+- if (method.name().compareTo("writeExternal") == 0
+- && method.tags("serialData").length == 0) {
+- if (configuration.serialwarn) {
+- configuration.getDocletSpecificMsg().warning(
+- currentMember.position(), "doclet.MissingSerialDataTag",
+- method.containingClass().qualifiedName(), method.name());
+- }
+- }
+- }
+-
+- /**
+- * build the information for the method.
+- */
+- public void buildMethodInfo(XMLNode node) {
+- if(configuration.nocomment){
+- return;
+- }
+- buildChildren(node);
+- }
+-
+- /**
+- * Build the method footer.
+- */
+- public void buildMethodFooter(XMLNode node) {
+- methodWriter.writeMemberFooter();
+- }
+-
+- /**
+- * Build the field header.
+- */
+- public void buildFieldHeader(XMLNode node) {
+- if (currentClass.serializableFields().length > 0) {
+- buildFieldSerializationOverview(currentClass);
+- fieldWriter.writeHeader(configuration.getText(
+- "doclet.Serialized_Form_fields"));
+- }
+- }
+-
+- /**
+- * If possible, build the serialization overview for the given
+- * class.
+- *
+- * @param classDoc the class to print the overview for.
+- */
+- public void buildFieldSerializationOverview(ClassDoc classDoc) {
+- if (classDoc.definesSerializableFields()) {
+- FieldDoc serialPersistentField =
+- (FieldDoc)((Util.asList(classDoc.serializableFields()).get(0)));
+- // Check to see if there are inline comments, tags or deprecation
+- // information to be printed.
+- if (fieldWriter.shouldPrintMemberDetails(serialPersistentField)) {
+- fieldWriter.writeHeader(
+- configuration.getText("doclet.Serialized_Form_class"));
+- fieldWriter.writeMemberDeprecatedInfo(serialPersistentField);
+- if (!configuration.nocomment) {
+- fieldWriter.writeMemberDescription(serialPersistentField);
+- fieldWriter.writeMemberTags(serialPersistentField);
+- }
+- fieldWriter.writeMemberFooter(serialPersistentField);
+- // Footer required to close the definition list tag
+- // for serialization overview.
+- fieldWriter.writeFooter(
+- configuration.getText("doclet.Serialized_Form_class"));
+- }
+- }
+- }
+-
+- /**
+- * Build the field sub header.
+- */
+- public void buildFieldSubHeader(XMLNode node) {
+- if (! currentClass.definesSerializableFields() ){
+- FieldDoc field = (FieldDoc) currentMember;
+- fieldWriter.writeMemberHeader(field.type().asClassDoc(),
+- field.type().typeName(), field.type().dimension(), field.name());
+- }
+- }
+-
+- /**
+- * Build the field deprecation information.
+- */
+- public void buildFieldDeprecationInfo(XMLNode node) {
+- if (!currentClass.definesSerializableFields()) {
+- FieldDoc field = (FieldDoc)currentMember;
+- fieldWriter.writeMemberDeprecatedInfo(field);
+- }
+- }
+-
+- /**
+- * Build the field information.
+- */
+- public void buildFieldInfo(XMLNode node) {
+- if(configuration.nocomment){
+- return;
+- }
+- FieldDoc field = (FieldDoc)currentMember;
+- ClassDoc cd = field.containingClass();
+- if (cd.definesSerializableFields()) {
+- // Process Serializable Fields specified as array of
+- // ObjectStreamFields. Print a member for each serialField tag.
+- // (There should be one serialField tag per ObjectStreamField
+- // element.)
+- SerialFieldTag[] tags = field.serialFieldTags();
+- Arrays.sort(tags);
+- for (int i = 0; i < tags.length; i++) {
+- fieldWriter.writeMemberHeader(tags[i].fieldTypeDoc(),
+- tags[i].fieldType(), "", tags[i].fieldName());
+- fieldWriter.writeMemberDescription(tags[i]);
+-
+- }
+- } else {
+-
+- // Process default Serializable field.
+- if ((field.tags("serial").length == 0) && ! field.isSynthetic()
+- && configuration.serialwarn) {
+- configuration.message.warning(field.position(),
+- "doclet.MissingSerialTag", cd.qualifiedName(),
+- field.name());
+- }
+- fieldWriter.writeMemberDescription(field);
+- fieldWriter.writeMemberTags(field);
+- }
+- }
+-
+- /**
+- * Build the field sub footer.
+- */
+- public void buildFieldSubFooter(XMLNode node) {
+- if (! currentClass.definesSerializableFields()) {
+- fieldWriter.writeMemberFooter();
+- }
+- }
+-
+- /**
+- * Build the summaries for the methods that belong to the given
+- * class.
+- */
+- public void buildSerializableMethods(XMLNode node) {
+- MemberDoc[] members = currentClass.serializationMethods();
+- if (members.length > 0) {
+- for (int i = 0; i < members.length; i++) {
+- currentMember = members[i];
+- buildChildren(node);
+- }
+- }
+- }
+-
+- /**
+- * Build the summaries for the fields that belong to the given
+- * class.
+- */
+- public void buildSerializableFields(XMLNode node) {
+- MemberDoc[] members = currentClass.serializableFields();
+- if (members.length > 0) {
+- for (int i = 0; i < members.length; i++) {
+- currentMember = members[i];
+- buildChildren(node);
+- }
+- }
+- }
+ }
+diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclet.xml b/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclet.xml
+--- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclet.xml
++++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclet.xml
+@@ -29,177 +29,145 @@
+ <Doclet>
+
+ <PackageDoc>
+- <PackageHeader/>
+- <Summary>
+- <SummaryHeader/>
+- <InterfaceSummary/>
+- <ClassSummary/>
+- <EnumSummary/>
+- <ExceptionSummary/>
+- <ErrorSummary/>
+- <AnnotationTypeSummary/>
+- <SummaryFooter/>
+- </Summary>
+- <PackageDescription/>
+- <PackageTags/>
+- <PackageFooter/>
++ <Content>
++ <Summary>
++ <InterfaceSummary/>
++ <ClassSummary/>
++ <EnumSummary/>
++ <ExceptionSummary/>
++ <ErrorSummary/>
++ <AnnotationTypeSummary/>
++ </Summary>
++ <PackageDescription/>
++ <PackageTags/>
++ </Content>
+ </PackageDoc>
+
+ <AnnotationTypeDoc>
+- <AnnotationTypeHeader/>
+- <DeprecationInfo/>
+- <AnnotationTypeSignature/>
+- <AnnotationTypeDescription/>
+- <AnnotationTypeTagInfo/>
++ <AnnotationTypeInfo>
++ <DeprecationInfo/>
++ <AnnotationTypeSignature/>
++ <AnnotationTypeDescription/>
++ <AnnotationTypeTagInfo/>
++ </AnnotationTypeInfo>
+ <MemberSummary>
+- <AnnotationTypeRequiredMemberSummary/>
++ <AnnotationTypeRequiredMemberSummary/>
+ <AnnotationTypeOptionalMemberSummary/>
+ </MemberSummary>
+- <AnnotationTypeRequiredMemberDetails>
+- <Header/>
+- <AnnotationTypeRequiredMember>
+- <MemberHeader/>
+- <Signature/>
+- <DeprecationInfo/>
+- <MemberComments/>
+- <TagInfo/>
+- <MemberFooter/>
+- </AnnotationTypeRequiredMember>
+- </AnnotationTypeRequiredMemberDetails>
+- <AnnotationTypeOptionalMemberDetails>
+- <AnnotationTypeOptionalMember>
+- <MemberHeader/>
+- <Signature/>
+- <DeprecationInfo/>
+- <MemberComments/>
+- <TagInfo/>
+- <DefaultValueInfo/>
+- <MemberFooter/>
+- </AnnotationTypeOptionalMember>
+- <Footer/>
+- </AnnotationTypeOptionalMemberDetails>
+- <AnnotationTypeFooter/>
++ <AnnotationTypeMemberDetails>
++ <AnnotationTypeRequiredMemberDetails>
++ <AnnotationTypeRequiredMember>
++ <Signature/>
++ <DeprecationInfo/>
++ <MemberComments/>
++ <TagInfo/>
++ </AnnotationTypeRequiredMember>
++ </AnnotationTypeRequiredMemberDetails>
++ <AnnotationTypeOptionalMemberDetails>
++ <AnnotationTypeOptionalMember>
++ <Signature/>
++ <DeprecationInfo/>
++ <MemberComments/>
++ <TagInfo/>
++ <DefaultValueInfo/>
++ </AnnotationTypeOptionalMember>
++ </AnnotationTypeOptionalMemberDetails>
++ </AnnotationTypeMemberDetails>
+ </AnnotationTypeDoc>
+
+ <ClassDoc>
+- <ClassHeader/>
+ <ClassTree/>
+- <TypeParamInfo/>
+- <SuperInterfacesInfo/>
+- <ImplementedInterfacesInfo/>
+- <SubClassInfo/>
+- <SubInterfacesInfo/>
+- <InterfaceUsageInfo/>
+- <NestedClassInfo/>
+- <DeprecationInfo/>
+- <ClassSignature/>
+- <ClassDescription/>
+- <ClassTagInfo/>
++ <ClassInfo>
++ <TypeParamInfo/>
++ <SuperInterfacesInfo/>
++ <ImplementedInterfacesInfo/>
++ <SubClassInfo/>
++ <SubInterfacesInfo/>
++ <InterfaceUsageInfo/>
++ <NestedClassInfo/>
++ <DeprecationInfo/>
++ <ClassSignature/>
++ <ClassDescription/>
++ <ClassTagInfo/>
++ </ClassInfo>
+ <MemberSummary>
+ <NestedClassesSummary/>
+- <NestedClassesInheritedSummary/>
+ <EnumConstantsSummary/>
+ <FieldsSummary/>
+- <FieldsInheritedSummary/>
+ <ConstructorsSummary/>
+ <MethodsSummary/>
+- <MethodsInheritedSummary/>
+ </MemberSummary>
+- <EnumConstantsDetails>
+- <Header/>
+- <EnumConstant>
+- <EnumConstantHeader/>
+- <Signature/>
+- <DeprecationInfo/>
+- <EnumConstantComments/>
+- <TagInfo/>
+- <EnumConstantFooter/>
+- </EnumConstant>
+- <Footer/>
+- </EnumConstantsDetails>
+- <FieldDetails>
+- <Header/>
+- <FieldDoc>
+- <FieldHeader/>
+- <Signature/>
+- <DeprecationInfo/>
+- <FieldComments/>
+- <TagInfo/>
+- <FieldFooter/>
+- </FieldDoc>
+- <Footer/>
+- </FieldDetails>
+- <ConstructorDetails>
+- <Header/>
+- <ConstructorDoc>
+- <ConstructorHeader/>
+- <Signature/>
+- <DeprecationInfo/>
+- <ConstructorComments/>
+- <TagInfo/>
+- <ConstructorFooter/>
+- </ConstructorDoc>
+- <Footer/>
+- </ConstructorDetails>
+- <MethodDetails>
+- <Header/>
+- <MethodDoc>
+- <MethodHeader/>
+- <Signature/>
+- <DeprecationInfo/>
+- <MethodComments/>
+- <TagInfo/>
+- <MethodFooter/>
+- </MethodDoc>
+- <Footer/>
+- </MethodDetails>
+- <ClassFooter/>
++ <MemberDetails>
++ <EnumConstantsDetails>
++ <EnumConstant>
++ <Signature/>
++ <DeprecationInfo/>
++ <EnumConstantComments/>
++ <TagInfo/>
++ </EnumConstant>
++ </EnumConstantsDetails>
++ <FieldDetails>
++ <FieldDoc>
++ <Signature/>
++ <DeprecationInfo/>
++ <FieldComments/>
++ <TagInfo/>
++ </FieldDoc>
++ </FieldDetails>
++ <ConstructorDetails>
++ <ConstructorDoc>
++ <Signature/>
++ <DeprecationInfo/>
++ <ConstructorComments/>
++ <TagInfo/>
++ </ConstructorDoc>
++ </ConstructorDetails>
++ <MethodDetails>
++ <MethodDoc>
++ <Signature/>
++ <DeprecationInfo/>
++ <MethodComments/>
++ <TagInfo/>
++ </MethodDoc>
++ </MethodDetails>
++ </MemberDetails>
+ </ClassDoc>
+
+ <ConstantSummary>
+- <Header/>
+ <Contents/>
+ <ConstantSummaries>
+- <PackageConstantSummary>
+- <PackageHeader/>
+- <ClassConstantSummary>
+- <ClassHeader/>
+- <ConstantMembers/>
+- <ClassFooter/>
+- </ClassConstantSummary>
+- </PackageConstantSummary>
++ <PackageHeader/>
++ <ClassConstantSummary>
++ <ConstantMembers/>
++ </ClassConstantSummary>
+ </ConstantSummaries>
+ <Footer/>
+ </ConstantSummary>
+
+ <SerializedForm>
+- <Header/>
+ <SerializedFormSummaries>
+ <PackageSerializedForm>
+ <PackageHeader/>
+ <ClassSerializedForm>
+- <ClassHeader/>
+ <SerialUIDInfo/>
+- <MethodHeader/>
+- <SerializableMethods>
+- <MethodSubHeader/>
+- <DeprecatedMethodInfo/>
+- <MethodInfo>
+- <MethodDescription/>
+- <MethodTags/>
+- </MethodInfo>
+- <MethodFooter/>
+- </SerializableMethods>
+- <FieldHeader/>
+- <SerializableFields>
+- <FieldSubHeader/>
+- <FieldDeprecationInfo/>
+- <FieldInfo/>
+- <FieldSubFooter/>
+- </SerializableFields>
++ <ClassContent>
++ <SerializableMethods>
++ <MethodSubHeader/>
++ <DeprecatedMethodInfo/>
++ <MethodInfo>
++ <MethodDescription/>
++ <MethodTags/>
++ </MethodInfo>
++ </SerializableMethods>
++ <FieldHeader/>
++ <SerializableFields>
++ <FieldSubHeader/>
++ <FieldDeprecationInfo/>
++ <FieldInfo/>
++ </SerializableFields>
++ </ClassContent>
+ </ClassSerializedForm>
+ </PackageSerializedForm>
+ </SerializedFormSummaries>
+- <Footer/>
+ </SerializedForm>
+ </Doclet>
+diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclets.properties b/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclets.properties
+--- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclets.properties
++++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclets.properties
+@@ -111,12 +111,12 @@
+ doclet.extends=extends
+ doclet.Package_private=(package private)
+ doclet.implements=implementsdoclet.Same_package_name_used=Package name format used twice: {0}
+-doclet.Nested_Classes_Interfaces_Inherited_From_Class=Nested classes/interfaces inherited from class {0}
+-doclet.Nested_Classes_Interface_Inherited_From_Interface=Nested classes/interfaces inherited from interface {0}
+-doclet.Methods_Inherited_From_Class=Methods inherited from class {0}
+-doclet.Methods_Inherited_From_Interface=Methods inherited from interface {0}
+-doclet.Fields_Inherited_From_Class=Fields inherited from class {0}
+-doclet.Fields_Inherited_From_Interface=Fields inherited from interface {0}
++doclet.Nested_Classes_Interfaces_Inherited_From_Class=Nested classes/interfaces inherited from class
++doclet.Nested_Classes_Interface_Inherited_From_Interface=Nested classes/interfaces inherited from interface
++doclet.Methods_Inherited_From_Class=Methods inherited from class
++doclet.Methods_Inherited_From_Interface=Methods inherited from interface
++doclet.Fields_Inherited_From_Class=Fields inherited from class
++doclet.Fields_Inherited_From_Interface=Fields inherited from interface
+ doclet.Serializable=Serializable
+ doclet.Externalizable=Externalizable
+ doclet.Annotation_Type_Member_Detail=Element Detail
+@@ -136,12 +136,19 @@
+ doclet.Constants_Table_Summary={0} table, listing constant fields, and values
+ doclet.Member_Table_Summary={0} table, listing {1}, and an explanation
+ doclet.fields=fields
++doclet.Fields=Fields
+ doclet.constructors=constructors
++doclet.Constructors=Constructors
+ doclet.methods=methods
++doclet.Methods=Methods
+ doclet.annotation_type_optional_members=optional elements
++doclet.Annotation_Type_Optional_Members=Optional Elements
+ doclet.annotation_type_required_members=required elements
++doclet.Annotation_Type_Required_Members=Required Elements
+ doclet.enum_constants=enum constants
++doclet.Enum_Constants=Enum Constants
+ doclet.nested_classes=nested classes
++doclet.Nested_Classes=Nested Classes
+ doclet.subclasses=subclasses
+ doclet.subinterfaces=subinterfaces
+ doclet.Modifier=Modifier
+@@ -173,7 +180,7 @@
+
+ doclet.enum_valueof_doc=\n\
+ Returns the enum constant of this type with the specified name.\n\
+- The string must match <I>exactly</I> an identifier used to declare an\n\
++ The string must match <i>exactly</i> an identifier used to declare an\n\
+ enum constant in this type. (Extraneous whitespace characters are \n\
+ not permitted.)\n\
+ \n\
+diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/stylesheet.css b/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/stylesheet.css
+new file mode 100644
+--- /dev/null
++++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/stylesheet.css
+@@ -0,0 +1,439 @@
++/* Javadoc style sheet */
++/*
++Overall document style
++*/
++* {
++ margin:0;
++ padding:0;
++}
++body {
++ font-family:Helvetica, Arial, sans-serif;
++ color:#000000;
++}
++p {
++ margin:20px 0;
++}
++pre {
++ font-size:1.0em;
++}
++h1 {
++ font-size:1.4em;
++}
++h2 {
++ font-size:1.35em;
++}
++h3 {
++ font-size:1.3em;
++}
++h4 {
++ font-size:1.25em;
++}
++ul {
++ margin:10px 0 10px 20px;
++}
++li {
++ list-style:disc;
++}
++dl dt {
++ font-size:0.95em;
++ font-weight:bold;
++ margin:10px 0 0 0;
++}
++dl dd {
++ margin:10px 0 10px 20px;
++}
++dl dd ul {
++ margin-left:0;
++}
++dl dd ul li {
++ list-style:none;
++ margin:10px 0 10px 0;
++}
++caption {
++ background: #CCCCFF;
++ color:#000000;
++ text-align: left;
++ font-size: 150%;
++ font-weight: bold;
++ border-left: 2px ridge;
++ border-right: 2px ridge;
++ border-top: 2px ridge;
++ padding-left: 5px;
++ width:auto;
++}
++/*
++Document title and Copyright styles
++*/
++.aboutLanguage {
++ float:right;
++ font-size:0.9em;
++ color:#000000;
++}
++.legalCopy {
++ margin:7px;
++}
++.bar {
++ font-size:1em;
++ margin:10px 0 0 10px;
++}
++.bar a {
++ font-weight:normal;
++}
++/*
++Navigation bar styles
++*/
++.topNav {
++ border-top:2px solid #C0C0C0;
++ margin:7px;
++ padding:7px 0;
++ height:2.8em;
++ width:99%;
++ min-width:600px;
++}
++.bottomNav {
++ border-top:2px solid #C0C0C0;
++ margin:7px;
++ padding:7px 0;
++ height:2.8em;
++ width:99%;
++}
++.subNav {
++ border-bottom:2px solid #C0C0C0;
++ float:left;
++ width:99%;
++ margin:7px;
++ min-width:600px;
++}
++.subNav div {
++ clear:left;
++ float:left;
++ padding:0 0 5px 2px;
++ width:100%;
++}
++.topNav a:link,.topNav a:active, .topNav a:visited, .topNav a:hover,
++.bottomNav a:link,.bottomNav a:active, .bottomNav a:visited, .bottomNav a:hover {
++ color:#000000;
++ font-weight:bold;
++ text-decoration:underline;
++ font-size:1em;
++}
++/* Navigation bar list styles */
++.topNav ul.navList, .bottomNav ul.navList {
++ background-color:#EEEEFF;
++ padding:7px 5px;
++ margin:0;
++ float:left;
++ width:80%;
++}
++ul.navList li{
++ list-style:none;
++ float:left;
++ padding:3px 4px;
++ color:#000000;
++ font-size:0.98em;
++}
++ul.navList li.navBarCell1Rev {
++ background-color:#00008B;
++ color:#FFFFFF;
++ font-weight:bold;
++ font-size:0.97em;
++}
++/* Sub-navigation bar list styles */
++.subNav ul.navList {
++ float:left;
++ margin:0;
++ font-size:0.7em;
++ width:350px;
++}
++ul.subNavList {
++ float:left;
++ margin:0;
++ font-size:0.7em;
++ width:350px;
++}
++ul.subNavList li{
++ list-style:none;
++ float:left;
++ font-size:90%;
++}
++/*
++Page header and footer styles
++*/
++.header, .footer {
++ clear:both;
++ margin:0 7px;
++}
++.indexHeader {
++ font-size:0.9em;
++ margin:10px 0 7px 10px;
++}
++.header ul {
++ padding-left:20px;
++}
++/* Header and footer title styles */
++.header h1.title {
++ font-size:1.4em;
++ text-align:center;
++ margin:0;
++}
++.header h2.title {
++ font-size:1.35em;
++ margin:0;
++}
++.subTitle {
++ margin:0;
++ padding-top:10px;
++ font-size:0.75em;
++ font-weight:bold;
++}
++/*
++Page layout container styles
++*/
++.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer,
++.constantValuesContainer {
++ clear:both;
++ padding:10px 10px;
++ position:relative;
++}
++.indexContainer {
++ padding:0 0 10px 10px;
++ font-size:0.9em;
++}
++/*
++Class inheritance information styles
++*/
++ul.inheritance {
++ margin:0;
++ padding:0;
++}
++ul.inheritance li {
++ display:inline;
++ list-style:none;
++}
++ul.inheritance li ul.inheritance {
++ margin-left:15px;
++ background-image:url(resources/inherit.gif);
++ background-repeat:no-repeat;
++ padding-left:15px;
++ padding-top:1px;
++}
++/*
++Heading styles
++*/
++.indexContainer h2 {
++ font-weight:normal;
++ font-size:1.0em;
++ padding:10px 0 0 0;
++}
++.contentContainer h2 {
++ margin:10px 0;
++}
++.constantValuesContainer h2 {
++ background:#CCCCFF;
++ border:2px ridge;
++ padding:3px;
++ margin:0 0 10px 0;
++}
++.serializedFormContainer ul.blockList li.blockList h2 {
++ background:#EEEEFF;
++ border:2px ridge;
++ padding:3px;
++ margin:0 0 15px 0;
++ text-align:center;
++}
++.classUseContainer ul li ul li h3 {
++ margin-bottom:30px;
++ padding:3px;
++}
++.serializedFormContainer ul.blockList li.blockList ul.blockList li.blockList h3 {
++ background:#EEEEFF;
++ margin:0 0 15px 0;
++ padding:3px;
++}
++.serializedFormContainer ul.blockList li.blockList ul.blockList li.blockList ul.blockList li.blockList h3 {
++ background:#CCCCFF;
++ margin:0 0 15px 0;
++ padding:3px;
++ border:2px ridge;
++}
++ul.blockList ul.blockList li.blockList h3, ul.blockList ul.blockList li.blockList h3 {
++ background:#CCCCFF;
++ border:2px ridge;
++ padding-left:5px;
++}
++div.summary ul.blockList ul.blockList li.blockList h3 {
++ background:#CCCCFF;
++ border:0;
++ border:2px ridge;
++ padding-left:5px;
++}
++div.summary ul.blockList ul.blockList ul.blockList li.blockList h3 {
++ background:#EEEEFF;
++ border:0;
++ border-bottom:2px ridge;
++}
++div.details ul.blockList ul.blockList ul.blockList li.blockList h4,
++div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 {
++ font-size:1.15em;
++ font-weight:bold;
++ padding:0 0 10px 0;
++}
++/*
++Table styles
++*/
++.contentContainer table {
++ border-collapse: collapse ;
++ width:100%;
++}
++.contentContainer table td, .contentContainer table th {
++ border:2px ridge;
++ padding:3px;
++}
++/* Constant values page table styles */
++.constantValuesContainer table {
++ border-collapse: collapse ;
++ margin:0 0 10px 0;
++}
++.constantValuesContainer table caption{
++ font-size:0.95em;
++ padding:3px;
++ background:#EEEEFF;
++}
++.constantValuesContainer table td, .constantValuesContainer table th {
++ border:2px ridge;
++ padding:3px;
++}
++/* Class-use/Package-use page table styles */
++.classUseContainer table {
++ border-collapse: collapse ;
++ width:100%;
++ margin:0 0 15px 0;
++}
++.classUseContainer ul li ul li table {
++ margin-bottom:30px;
++}
++.classUseContainer ul li ul li table caption{
++ font-size:0.95em;
++ padding:3px;
++ background:#EEEEFF;
++}
++.classUseContainer table td, .classUseContainer table th {
++ border:2px ridge;
++ padding:3px;
++}
++/* Summary table styles */
++ul.blockList li.blockList table.overviewSummary {
++ margin:0;
++ margin-bottom:15px;
++}
++ul.blockList li.blockList table caption {
++ padding:3px;
++}
++ul.blockList li.blockList table.overviewSummary td.colFirst{
++ text-align:right;
++}
++table.packageSummary td.colFirst, table.overviewSummary th.colFirst {
++ width:15%;
++}
++div.summary ul.blockList ul.blockList li.blockList caption {
++ display:none;
++}
++div.summary ul.blockList li.blockList ul.blockList li.blockList table.overviewSummary th {
++ border-top:0;
++}
++/* Table column block styles */
++ul.blockList li.blockList table.overviewSummary td.colLast div.block{
++ padding:0;
++ padding-left:40px;
++}
++ul.blockList li.blockList table.overviewSummary td.colOne div.block{
++ padding:0;
++ padding-left:40px;
++}
++.contentContainer ul.blockList li.blockList table .colOne div.block{
++ padding-left:40px;
++}
++.classUseContainer ul li ul li table .colLast div.block,
++.classUseContainer ul li ul li table .colOne div.block{
++ padding-left:40px;
++}
++/*
++List styles
++*/
++ul.horizontal li {
++ display:inline;
++ font-size:0.9em;
++}
++/* Container specific list styles */
++.indexContainer ul {
++ margin:0;
++}
++.indexContainer ul li {
++ list-style:none;
++}
++.serializedFormContainer ul.blockList li.blockList ul.blockList li.blockList ul.blockList li.blockList {
++ border:0;
++}
++.serializedFormContainer ul.blockList li.blockList ul.blockList li.blockList ul.blockList li.blockList ul.blockList li.blockList {
++ list-style:none;
++ border:0;
++ border-bottom:2px ridge;
++}
++.serializedFormContainer ul.blockList li.blockList ul.blockList li.blockList ul.blockList li.blockList ul.blockList li.blockListLast {
++ list-style:none;
++}
++/* General list styles */
++ul.blockList, ul.blockListLast {
++ margin-left:0;
++ padding-left:0;
++}
++ul.blockList li.blockList, ul.blockListLast li.blockList {
++ list-style:none;
++ margin-bottom:25px;
++}
++ul.blockList ul.blockList ul.blockList li.blockList {
++ border:2px ridge;
++}
++div.details ul.blockList ul.blockList ul.blockList li.blockList {
++ border:0;
++ border-bottom:2px ridge;
++}
++/* Definition list styles */
++ul.blockList li.blockList dl{
++ margin-bottom:15px;
++}
++ul.blockList li.blockList dl dd{
++ margin:0 0 0 30px;
++}
++ul.blockList li.blockList ul.blockList li.blockList ul.blockList li.blockList dl,
++ul.blockList li.blockList ul.blockList li.blockList ul.blockListLast li.blockList dl{
++ padding:0 0 10px 35px;
++}
++dl.nameValue dt, dl.nameValue dd{
++ display:inline;
++}
++ul.blockList li.blockList pre{
++ margin:0 0 15px 0;
++}
++/* List content styles */
++ul.blockList li.blockList ul.blockList li.blockList pre{
++ margin:10px 0 15px 0;
++}
++ul.blockList li.blockList ul.blockList li.blockList ul.blockList li.blockList pre,
++ul.blockList li.blockList ul.blockList li.blockList ul.blockListLast li.blockList pre{
++ padding:0 0 10px 0;
++}
++ul.blockList li.blockList ul.blockList li.blockList ul.blockList li.blockList div.block,
++ul.blockList li.blockList ul.blockList li.blockList ul.blockListLast li.blockList div.block{
++ padding:0 0 10px 35px;
++}
++/*
++Formatting effect styles
++*/
++.strong {
++ font-weight:bold;
++}
++.sourceLineNo {
++ color:green;
++ padding:0 30px 0 0;
++}
+diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/DirectoryManager.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/DirectoryManager.java
+--- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/DirectoryManager.java
++++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/DirectoryManager.java
+@@ -46,7 +46,7 @@
+ /**
+ * The file separator string, "/", used in the formation of the URL path.
+ */
+- public static final String URL_FILE_SEPERATOR = "/";
++ public static final String URL_FILE_SEPARATOR = "/";
+
+ /**
+ * Never instaniated.
+@@ -123,13 +123,13 @@
+ for (int i = 0; i < packageName.length(); i++) {
+ char ch = packageName.charAt(i);
+ if (ch == '.') {
+- pathstr.append(URL_FILE_SEPERATOR);
++ pathstr.append(URL_FILE_SEPARATOR);
+ } else {
+ pathstr.append(ch);
+ }
+ }
+- if (pathstr.length() > 0 && ! pathstr.toString().endsWith(URL_FILE_SEPERATOR)) {
+- pathstr.append(URL_FILE_SEPERATOR);
++ if (pathstr.length() > 0 && ! pathstr.toString().endsWith(URL_FILE_SEPARATOR)) {
++ pathstr.append(URL_FILE_SEPARATOR);
+ }
+ return pathstr.toString();
+ }
+@@ -155,7 +155,7 @@
+ for (int i = 0; i < name.length(); i++) {
+ char ch = name.charAt(i);
+ if (ch == '.') {
+- pathstr.append(URL_FILE_SEPERATOR);
++ pathstr.append(URL_FILE_SEPARATOR);
+ } else {
+ pathstr.append(ch);
+ }
+@@ -184,7 +184,7 @@
+ StringBuffer pathstr = new StringBuffer();
+ pathstr.append(getRelativePath(from));
+ pathstr.append(getPath(to));
+- pathstr.append(URL_FILE_SEPERATOR);
++ pathstr.append(URL_FILE_SEPARATOR);
+ return pathstr.toString();
+ }
+
+@@ -226,10 +226,10 @@
+ for (int i = 0; i < from.length(); i++) {
+ char ch = from.charAt(i);
+ if (ch == '.') {
+- pathstr.append(".." + URL_FILE_SEPERATOR);
++ pathstr.append(".." + URL_FILE_SEPARATOR);
+ }
+ }
+- pathstr.append(".." + URL_FILE_SEPERATOR);
++ pathstr.append(".." + URL_FILE_SEPARATOR);
+ return pathstr.toString();
+ }
+
+@@ -297,7 +297,7 @@
+ String pathstr = createPathString(pd);
+ if (pathstr.length() > 0) {
+ buf.append(pathstr);
+- buf.append(URL_FILE_SEPERATOR);
++ buf.append(URL_FILE_SEPARATOR);
+ }
+ buf.append(filename);
+ return buf.toString();
+diff --git a/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/Util.java b/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/Util.java
+--- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/Util.java
++++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/Util.java
+@@ -51,6 +51,11 @@
+ {{"&", "&amp;"}, {"<", "&lt;"}, {">", "&gt;"}};
+
+ /**
++ * Name of the resource directory.
++ */
++ public static final String RESOURCESDIR = "resources";
++
++ /**
+ * Return array of class members whose documentation is to be generated.
+ * If the member is deprecated do not include such a member in the
+ * returned array.
+@@ -236,8 +241,8 @@
+ String destname = configuration.docFileDestDirName;
+ File srcdir = new File(path + dir);
+ if (destname.length() > 0 && !destname.endsWith(
+- DirectoryManager.URL_FILE_SEPERATOR)) {
+- destname += DirectoryManager.URL_FILE_SEPERATOR;
++ DirectoryManager.URL_FILE_SEPARATOR)) {
++ destname += DirectoryManager.URL_FILE_SEPARATOR;
+ }
+ String dest = destname + dir;
+ try {
+@@ -263,7 +268,7 @@
+ && ! configuration.shouldExcludeDocFileDir(
+ srcfile.getName())){
+ copyDocFiles(configuration, path, dir +
+- DirectoryManager.URL_FILE_SEPERATOR + srcfile.getName(),
++ DirectoryManager.URL_FILE_SEPARATOR + srcfile.getName(),
+ overwrite);
+ }
+ }
+@@ -322,25 +327,38 @@
+ * it already exists.
+ */
+ public static void copyResourceFile(Configuration configuration,
+- String resourcefile,
+- boolean overwrite) {
+- String destdir = configuration.destDirName;
+- String destresourcesdir = destdir + "resources";
+- DirectoryManager.createDirectory(configuration, destresourcesdir);
+- File destfile = new File(destresourcesdir, resourcefile);
++ String resourcefile, boolean overwrite) {
++ String destresourcesdir = configuration.destDirName + RESOURCESDIR;
++ copyFile(configuration, resourcefile, RESOURCESDIR, destresourcesdir,
++ overwrite);
++ }
++
++ /**
++ * Copy a file from a source directory to a destination directory
++ * (if it is not there already). If <code>overwrite</code> is true and
++ * the destination file already exists, overwrite it.
++ *
++ * @param configuration Holds the error message
++ * @param file The name of the file to copy
++ * @param source The source directory
++ * @param destination The destination directory where the file needs to be copied
++ * @param overwrite A flag to indicate whether the file in the
++ * destination directory will be overwritten if
++ * it already exists.
++ */
++ public static void copyFile(Configuration configuration, String file, String source,
++ String destination, boolean overwrite) {
++ DirectoryManager.createDirectory(configuration, destination);
++ File destfile = new File(destination, file);
+ if(destfile.exists() && (! overwrite)) return;
+ try {
+-
+ InputStream in = Configuration.class.getResourceAsStream(
+- "resources/" + resourcefile);
+-
++ source + DirectoryManager.URL_FILE_SEPARATOR + file);
+ if(in==null) return;
+-
+ OutputStream out = new FileOutputStream(destfile);
+ byte[] buf = new byte[2048];
+ int n;
+ while((n = in.read(buf))>0) out.write(buf,0,n);
+-
+ in.close();
+ out.close();
+ } catch(Throwable t) {}
+@@ -357,12 +375,12 @@
+ try{
+ String pkgPath = DirectoryManager.getDirectoryPath(pkgDoc);
+ String completePath = new SourcePath(configuration.sourcepath).
+- getDirectory(pkgPath) + DirectoryManager.URL_FILE_SEPERATOR;
++ getDirectory(pkgPath) + DirectoryManager.URL_FILE_SEPARATOR;
+ //Make sure that both paths are using the same seperators.
+ completePath = Util.replaceText(completePath, File.separator,
+- DirectoryManager.URL_FILE_SEPERATOR);
++ DirectoryManager.URL_FILE_SEPARATOR);
+ pkgPath = Util.replaceText(pkgPath, File.separator,
+- DirectoryManager.URL_FILE_SEPERATOR);
++ DirectoryManager.URL_FILE_SEPARATOR);
+ return completePath.substring(0, completePath.indexOf(pkgPath));
+ } catch (Exception e){
+ return "";
+@@ -572,6 +590,24 @@
+ }
+
+ /**
++ * Given a string, strips all html characters and
++ * return the result.
++ *
++ * @param rawString The string to check.
++ * @return the original string with all of the HTML characters
++ * stripped.
++ *
++ */
++ public static String stripHtml(String rawString) {
++ // remove HTML tags
++ rawString = rawString.replaceAll("\\<.*?>", " ");
++ // consolidate multiple spaces between a word to a single space
++ rawString = rawString.replaceAll("\\b\\s{2,}\\b", " ");
++ // remove extra whitespaces
++ return rawString.trim();
++ }
++
++ /**
+ * Create the directory path for the file to be generated, construct
+ * FileOutputStream and OutputStreamWriter depending upon docencoding.
+ *
+diff --git a/test/com/sun/javadoc/AccessAsciiArt/AccessAsciiArt.java b/test/com/sun/javadoc/AccessAsciiArt/AccessAsciiArt.java
+--- langtools/test/com/sun/javadoc/AccessAsciiArt/AccessAsciiArt.java
++++ langtools/test/com/sun/javadoc/AccessAsciiArt/AccessAsciiArt.java
+@@ -84,17 +84,17 @@
+
+ // Test the top line of the class tree
+ {
+-" <IMG SRC=\"../../resources/inherit.gif\" ALT=\"extended by \"><A HREF=\"../../p1/C.html\" title=\"class in p1\">p1.C</A>",
++"<li><a href=\"../../p1/C.html\" title=\"class in p1\">p1.C</a></li>",
+ TMPDEST_DIR1 + "p1" + FS + "subpkg" + FS + "SSC.html" },
+
+ // Test the second line of the class tree
+ {
+-" <IMG SRC=\"../../resources/inherit.gif\" ALT=\"extended by \"><A HREF=\"../../p1/SC.html\" title=\"class in p1\">p1.SC</A>",
++"<li><a href=\"../../p1/SC.html\" title=\"class in p1\">p1.SC</a></li>",
+ TMPDEST_DIR1 + "p1" + FS + "subpkg" + FS + "SSC.html" },
+
+ // Test the third line of the class tree
+ {
+-" <IMG SRC=\"../../resources/inherit.gif\" ALT=\"extended by \"><STRONG>p1.subpkg.SSC</STRONG>",
++"<li>p1.subpkg.SSC</li>",
+ TMPDEST_DIR1 + "p1" + FS + "subpkg" + FS +"SSC.html" },
+
+ };
+diff --git a/test/com/sun/javadoc/AccessH1/AccessH1.java b/test/com/sun/javadoc/AccessH1/AccessH1.java
+--- langtools/test/com/sun/javadoc/AccessH1/AccessH1.java
++++ langtools/test/com/sun/javadoc/AccessH1/AccessH1.java
+@@ -83,18 +83,19 @@
+ * NOTE: The standard doclet uses the same separator "\n" for all OS's
+ */
+ private static final String[][] testArray = {
+-
+- // Test the style sheet
+- {
+- "h1 { font-size: 145% }",
+- TMPDEST_DIR1 + "stylesheet.css" },
+-
+- // Test the doc title in the overview page
+- {
+- "<H1>" + LS + "Document Title" + LS + "</H1>",
+- TMPDEST_DIR1 + "overview-summary.html" }
+-
+- };
++ // Test the style sheet
++ {
++ ".header h1.title {" + LS + " font-size:1.4em;" + LS +
++ " text-align:center;" + LS + " margin:0;" + LS +
++ "}",
++ TMPDEST_DIR1 + "stylesheet.css"
++ },
++ // Test the doc title in the overview page
++ {
++ "<h1 class=\"title\">Document Title</h1>",
++ TMPDEST_DIR1 + "overview-summary.html"
++ }
++ };
+
+ public static void runTestsOnHTML(String[][] testArray) {
+
+diff --git a/test/com/sun/javadoc/AccessSkipNav/AccessSkipNav.java b/test/com/sun/javadoc/AccessSkipNav/AccessSkipNav.java
+--- langtools/test/com/sun/javadoc/AccessSkipNav/AccessSkipNav.java
++++ langtools/test/com/sun/javadoc/AccessSkipNav/AccessSkipNav.java
+@@ -46,6 +46,7 @@
+ private static final String BUGNAME = "AccessSkipNav";
+ private static final String FS = System.getProperty("file.separator");
+ private static final String PS = System.getProperty("path.separator");
++ private static final String LS = System.getProperty("line.separator");
+ private static final String TMPDEST_DIR1 = "." + FS + "docs1" + FS;
+ private static final String TMPDEST_DIR2 = "." + FS + "docs2" + FS;
+
+@@ -84,20 +85,22 @@
+
+ // Testing only for the presence of the <a href> and <a name>
+
+- // Top navbar <A HREF>
+- { "<A HREF=\"#skip-navbar_top\" title=\"Skip navigation links\"></A>",
++ // Top navbar <a href>
++ { "<a href=\"#skip-navbar_top\" title=\"Skip navigation links\"></a>",
+ TMPDEST_DIR1 + "p1" + FS + "C1.html" },
+
+- // Top navbar <A NAME>
+- { "<A NAME=\"skip-navbar_top\"></A>",
++ // Top navbar <a name>
++ { "<a name=\"skip-navbar_top\">" + LS +
++ "<!-- -->" + LS + "</a>",
+ TMPDEST_DIR1 + "p1" + FS + "C1.html" },
+
+- // Bottom navbar <A HREF>
+- { "<A HREF=\"#skip-navbar_bottom\" title=\"Skip navigation links\"></A>",
++ // Bottom navbar <a href>
++ { "<a href=\"#skip-navbar_bottom\" title=\"Skip navigation links\"></a>",
+ TMPDEST_DIR1 + "p1" + FS + "C1.html" },
+
+- // Bottom navbar <A NAME>
+- { "<A NAME=\"skip-navbar_bottom\"></A>",
++ // Bottom navbar <a name>
++ { "<a name=\"skip-navbar_bottom\">" + LS +
++ "<!-- -->" + LS + "</a>",
+ TMPDEST_DIR1 + "p1" + FS + "C1.html" }
+ };
+
+diff --git a/test/com/sun/javadoc/AccessSummary/AccessSummary.java b/test/com/sun/javadoc/AccessSummary/AccessSummary.java
+--- langtools/test/com/sun/javadoc/AccessSummary/AccessSummary.java
++++ langtools/test/com/sun/javadoc/AccessSummary/AccessSummary.java
+@@ -24,7 +24,7 @@
+ /*
+ * @test @(#)AccessSummary.java
+ * @bug 4637604 4775148
+- * @summary Test the tables for summary=""
++ * @summary Test the tables for summary attribute
+ * @author dkramer
+ * @library ../lib/
+ * @build JavadocTester
+@@ -44,15 +44,15 @@
+
+ // Test that the summary attribute appears
+ { OUTPUT_DIR1 + "overview-summary.html",
+- "SUMMARY=\"\"" },
++ "summary=\"Packages table, listing packages, and an explanation\"" },
+
+ // Test that the summary attribute appears
+ { OUTPUT_DIR1 + "p1" + FS + "C1.html",
+- "SUMMARY=\"\"" },
++ "summary=\"Constructor Summary table, listing constructors, and an explanation\"" },
+
+ // Test that the summary attribute appears
+ { OUTPUT_DIR1 + "constant-values.html",
+- "SUMMARY=\"\"" }
++ "summary=\"Constant Field Values table, listing constant fields, and values\"" }
+ };
+
+ // First test with -header only
+diff --git a/test/com/sun/javadoc/AuthorDD/AuthorDD.java b/test/com/sun/javadoc/AuthorDD/AuthorDD.java
+--- langtools/test/com/sun/javadoc/AuthorDD/AuthorDD.java
++++ langtools/test/com/sun/javadoc/AuthorDD/AuthorDD.java
+@@ -86,12 +86,12 @@
+
+ // Test single @since tag:
+
+- { "<DT><STRONG>Since:</STRONG></DT>"+NL+" <DD>JDK 1.0</DD>",
++ { "<dt><span class=\"strong\">Since:</span></dt>"+NL+" <dd>JDK 1.0</dd>",
+ BUGID + FS + "p1" + FS + "C1.html" },
+
+ // Test multiple @author tags:
+
+- { "<DT><STRONG>Author:</STRONG></DT>"+NL+" <DD>Doug Kramer, Jamie, Neal</DD>",
++ { "<dt><span class=\"strong\">Author:</span></dt>"+NL+" <dd>Doug Kramer, Jamie, Neal</dd>",
+ BUGID + FS + "p1" + FS + "C1.html" },
+
+ };
+diff --git a/test/com/sun/javadoc/JavascriptWinTitle/JavascriptWinTitle.java b/test/com/sun/javadoc/JavascriptWinTitle/JavascriptWinTitle.java
+--- langtools/test/com/sun/javadoc/JavascriptWinTitle/JavascriptWinTitle.java
++++ langtools/test/com/sun/javadoc/JavascriptWinTitle/JavascriptWinTitle.java
+@@ -90,44 +90,34 @@
+ private static final String[][] testArray = {
+
+ // Test the javascript "type" attribute is present:
+- { "<SCRIPT type=\"text/javascript\">",
++ { "<script type=\"text/javascript\">",
++ TMPDEST_DIR1 + "overview-summary.html" },
++
++ // Test onload is absent:
++ { "<body>",
+ TMPDEST_DIR1 + "overview-summary.html" },
+
+ // Test onload is present:
+- { "onload=\"windowTitle();\"",
+- TMPDEST_DIR1 + "overview-summary.html" },
+-
+- // Test onload is present:
+- { "onload=\"windowTitle();\"",
++ { "<body>",
+ TMPDEST_DIR1 + FS + "p1" + FS + "package-summary.html" },
+
+- // Test onload is present:
+- { "onload=\"windowTitle();\"",
+- TMPDEST_DIR1 + FS + "p1" + FS + "C.html" },
+-
+ // Test that "onload" is not present in BODY tag:
+- { "<BODY BGCOLOR=\"white\">",
++ { "<body>",
+ TMPDEST_DIR1 + "overview-frame.html" },
+
+ // Test that "onload" is not present in BODY tag:
+- { "<BODY BGCOLOR=\"white\">",
++ { "<body>",
+ TMPDEST_DIR1 + "allclasses-frame.html" },
+
+ // Test that "onload" is not present in BODY tag:
+- { "<BODY BGCOLOR=\"white\">",
++ { "<body>",
+ TMPDEST_DIR1 + FS + "p1" + FS + "package-frame.html" },
+
+ // Test that win title javascript is followed by NOSCRIPT code.
+- {"<SCRIPT type=\"text/javascript\">" + LS +
+- "function windowTitle()" + LS +
+- "{" + LS +
+- " if (location.href.indexOf('is-external=true') == -1) {" + LS +
+- " parent.document.title=\"C (Window Title)\";" + LS +
+- " }" + LS +
+- "}" + LS +
+- "</SCRIPT>" + LS +
+- "<NOSCRIPT>" + LS +
+- "</NOSCRIPT>",
++ {"<script type=\"text/javascript\"><!--" + LS +
++ " if (location.href.indexOf('is-external=true') == -1) {" + LS +
++ " parent.document.title=\"C (Window Title)\";" + LS +
++ " }" + LS + "//-->" + LS + "</script>",
+ TMPDEST_DIR1 + FS + "p1" + FS + "C.html"
+ }
+
+diff --git a/test/com/sun/javadoc/MetaTag/MetaTag.java b/test/com/sun/javadoc/MetaTag/MetaTag.java
+--- langtools/test/com/sun/javadoc/MetaTag/MetaTag.java
++++ langtools/test/com/sun/javadoc/MetaTag/MetaTag.java
+@@ -67,31 +67,31 @@
+ private static final String[][] TEST = {
+
+ { OUTPUT_DIR + FS + "p1" + FS + "C1.html",
+- "<META NAME=\"keywords\" CONTENT=\"p1.C1 class\">" },
++ "<meta name=\"keywords\" content=\"p1.C1 class\">" },
+
+ { OUTPUT_DIR + FS + "p1" + FS + "C1.html",
+- "<META NAME=\"keywords\" CONTENT=\"field1\">" },
++ "<meta name=\"keywords\" content=\"field1\">" },
+
+ { OUTPUT_DIR + FS + "p1" + FS + "C1.html",
+- "<META NAME=\"keywords\" CONTENT=\"field2\">" },
++ "<meta name=\"keywords\" content=\"field2\">" },
+
+ { OUTPUT_DIR + FS + "p1" + FS + "C1.html",
+- "<META NAME=\"keywords\" CONTENT=\"method1()\">" },
++ "<meta name=\"keywords\" content=\"method1()\">" },
+
+ { OUTPUT_DIR + FS + "p1" + FS + "C1.html",
+- "<META NAME=\"keywords\" CONTENT=\"method2()\">" },
++ "<meta name=\"keywords\" content=\"method2()\">" },
+
+ { OUTPUT_DIR + FS + "p1" + FS + "package-summary.html",
+- "<META NAME=\"keywords\" CONTENT=\"p1 package\">" },
++ "<meta name=\"keywords\" content=\"p1 package\">" },
+
+ { OUTPUT_DIR + FS + "overview-summary.html",
+- "<META NAME=\"keywords\" CONTENT=\"Overview, Sample Packages\">" },
++ "<meta name=\"keywords\" content=\"Overview, Sample Packages\">" },
+
+ //NOTE: Hopefully, this regression test is not run at midnight. If the output
+ //was generated yesterday and this test is run today, the test will fail.
+ {OUTPUT_DIR + FS + "overview-summary.html",
+- "<META NAME=\"date\" "
+- + "CONTENT=\"" + m_dateFormat.format(new Date()) + "\">"},
++ "<meta name=\"date\" "
++ + "content=\"" + m_dateFormat.format(new Date()) + "\">"},
+ };
+
+ private static final String[][] NEGATED_TEST = NO_TEST;
+diff --git a/test/com/sun/javadoc/ValidHtml/ValidHtml.java b/test/com/sun/javadoc/ValidHtml/ValidHtml.java
+--- langtools/test/com/sun/javadoc/ValidHtml/ValidHtml.java
++++ langtools/test/com/sun/javadoc/ValidHtml/ValidHtml.java
+@@ -33,12 +33,10 @@
+ * @run main ValidHtml
+ */
+
+-
+ import com.sun.javadoc.*;
+ import java.util.*;
+ import java.io.*;
+
+-
+ /**
+ * Runs javadoc and runs regression tests on the resulting HTML.
+ * It reads each file, complete with newlines, into a string to easily
+@@ -66,13 +64,14 @@
+ String srcdir = System.getProperty("test.src", ".");
+
+ // Test for all cases except the split index page
+- runJavadoc(new String[] {"-d", TMPDEST_DIR1,
+- "-doctitle", "Document Title",
+- "-windowtitle", "Window Title",
+- "-use",
+- "-overview", (srcdir + FS + "overview.html"),
+- "-sourcepath", srcdir,
+- "p1", "p2"});
++ runJavadoc(new String[]{"-d", TMPDEST_DIR1,
++ "-doctitle", "Document Title",
++ "-windowtitle", "Window Title",
++ "-use",
++ "-overview", (srcdir + FS + "overview.html"),
++ "-sourcepath", srcdir,
++ "p1", "p2"
++ });
+ runTestsOnHTML(testArray);
+
+ printSummary();
+@@ -90,53 +89,52 @@
+ * NOTE: The standard doclet uses the same separator "\n" for all OS's
+ */
+ private static final String[][] testArray = {
+-
+- // Test the proper DOCTYPE element is present:
+- {
+-"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Frameset//EN\" \"http://www.w3.org/TR/html4/frameset.dtd\">",
+- TMPDEST_DIR1 + "index.html" },
+-
+- // Test the proper DOCTYPE element is present:
+- {
+-"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">",
+- TMPDEST_DIR1 + "overview-summary.html" },
+-
+- // Test the proper DOCTYPE element is present:
+- {
+-"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">",
+- TMPDEST_DIR1 + "p1" + FS + "package-summary.html" },
+-
+- // Test the proper DOCTYPE element is present:
+- {
+-"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">",
+- TMPDEST_DIR1 + "p1" + FS + "C.html" },
+-
+- // Test the proper DOCTYPE element is present:
+- {
+-"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">",
+- TMPDEST_DIR1 + "overview-frame.html" },
+-
+- // Test the proper DOCTYPE element is present:
+- {
+-"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">",
+- TMPDEST_DIR1 + "allclasses-frame.html" },
+-
+- // Test the proper DOCTYPE element is present:
+- {
+-"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">",
+- TMPDEST_DIR1 + "p1" + FS + "package-frame.html" },
+-
+- // Test that <NOFRAMES> is inside <FRAMESET> element:
+- {
+-"</NOFRAMES>" + LS + "</FRAMESET>",
+- TMPDEST_DIR1 + "index.html" },
+-
+- // Test the table elements are in the correct order:
+- {
+-"</FONT></TD>" + LS + "</TR>",
+- TMPDEST_DIR1 + FS + "p1" + FS + "package-use.html" }
+-
+- };
++ // Test the proper DOCTYPE element is present:
++ {
++ "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Frameset//EN\" \"http://www.w3.org/TR/html4/frameset.dtd\">",
++ TMPDEST_DIR1 + "index.html"
++ },
++ // Test the proper DOCTYPE element is present:
++ {
++ "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">",
++ TMPDEST_DIR1 + "overview-summary.html"
++ },
++ // Test the proper DOCTYPE element is present:
++ {
++ "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">",
++ TMPDEST_DIR1 + "p1" + FS + "package-summary.html"
++ },
++ // Test the proper DOCTYPE element is present:
++ {
++ "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">",
++ TMPDEST_DIR1 + "p1" + FS + "C.html"
++ },
++ // Test the proper DOCTYPE element is present:
++ {
++ "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">",
++ TMPDEST_DIR1 + "overview-frame.html"
++ },
++ // Test the proper DOCTYPE element is present:
++ {
++ "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">",
++ TMPDEST_DIR1 + "allclasses-frame.html"
++ },
++ // Test the proper DOCTYPE element is present:
++ {
++ "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">",
++ TMPDEST_DIR1 + "p1" + FS + "package-frame.html"
++ },
++ // Test that <NOFRAMES> is inside <FRAMESET> element:
++ {
++ "</noframes>" + LS + "</frameset>",
++ TMPDEST_DIR1 + "index.html"
++ },
++ // Test the table elements are in the correct order:
++ {
++ "</td>" + LS + "</tr>",
++ TMPDEST_DIR1 + FS + "p1" + FS + "package-use.html"
++ }
++ };
+
+ public static void runTestsOnHTML(String[][] testArray) {
+
+@@ -152,10 +150,7 @@
+
+ // Find string in file's contents
+ if (findString(fileString, stringToFind) == -1) {
+- System.out.println("\nSub-test " + (subtestNum)
+- + " for bug " + BUGID + " (" + BUGNAME + ") FAILED\n"
+- + "when searching for:\n"
+- + stringToFind);
++ System.out.println("\nSub-test " + (subtestNum) + " for bug " + BUGID + " (" + BUGNAME + ") FAILED\n" + "when searching for:\n" + stringToFind);
+ } else {
+ numSubtestsPassed += 1;
+ System.out.println("\nSub-test " + (subtestNum) + " passed:\n" + stringToFind);
+@@ -164,11 +159,10 @@
+ }
+
+ public static void printSummary() {
+- if ( numSubtestsPassed == subtestNum ) {
++ if (numSubtestsPassed == subtestNum) {
+ System.out.println("\nAll " + numSubtestsPassed + " subtests passed");
+ } else {
+- throw new Error("\n" + (subtestNum - numSubtestsPassed) + " of " + (subtestNum)
+- + " subtests failed for bug " + BUGID + " (" + BUGNAME + ")\n");
++ throw new Error("\n" + (subtestNum - numSubtestsPassed) + " of " + (subtestNum) + " subtests failed for bug " + BUGID + " (" + BUGNAME + ")\n");
+ }
+ }
+
+@@ -176,16 +170,16 @@
+ public static String readFileToString(String filename) {
+ try {
+ File file = new File(filename);
+- if ( !file.exists() ) {
++ if (!file.exists()) {
+ System.out.println("\nFILE DOES NOT EXIST: " + filename);
+ }
+ BufferedReader in = new BufferedReader(new FileReader(file));
+
+ // Create an array of characters the size of the file
+- char[] allChars = new char[(int)file.length()];
++ char[] allChars = new char[(int) file.length()];
+
+ // Read the characters into the allChars array
+- in.read(allChars, 0, (int)file.length());
++ in.read(allChars, 0, (int) file.length());
+ in.close();
+
+ // Convert to a string
+diff --git a/test/com/sun/javadoc/VersionNumber/VersionNumber.java b/test/com/sun/javadoc/VersionNumber/VersionNumber.java
+--- langtools/test/com/sun/javadoc/VersionNumber/VersionNumber.java
++++ langtools/test/com/sun/javadoc/VersionNumber/VersionNumber.java
+@@ -84,7 +84,7 @@
+
+ // Test the proper DOCTYPE element is present:
+ {
+- "<!-- Generated by javadoc (build",
++ "<!-- Generated by javadoc (version",
+ TMPDEST_DIR1 + "p1" + FS + "C.html" },
+
+ };
+diff --git a/test/com/sun/javadoc/WindowTitles/WindowTitles.java b/test/com/sun/javadoc/WindowTitles/WindowTitles.java
+--- langtools/test/com/sun/javadoc/WindowTitles/WindowTitles.java
++++ langtools/test/com/sun/javadoc/WindowTitles/WindowTitles.java
+@@ -94,52 +94,52 @@
+ */
+ private static final String[][] testArray = {
+
+- { "<TITLE>" + LS + "Overview" + LS + "</TITLE>",
++ { "<title>Overview</title>",
+ TMPDIR_STRING1 + "overview-summary.html" },
+
+- { "<TITLE>" + LS + "Class Hierarchy" + LS + "</TITLE>",
++ { "<title>Class Hierarchy</title>",
+ TMPDIR_STRING1 + "overview-tree.html" },
+
+- { "<TITLE>" + LS + "Overview List" + LS + "</TITLE>",
++ { "<title>Overview List</title>",
+ TMPDIR_STRING1 + "overview-frame.html" },
+
+- { "<TITLE>" + LS + "p1" + LS + "</TITLE>",
++ { "<title>p1</title>",
+ TMPDIR_STRING1 + "p1" + FS + "package-summary.html" },
+
+- { "<TITLE>" + LS + "p1" + LS + "</TITLE>",
++ { "<title>p1</title>",
+ TMPDIR_STRING1 + "p1" + FS + "package-frame.html" },
+
+- { "<TITLE>" + LS + "p1 Class Hierarchy" + LS + "</TITLE>",
++ { "<title>p1 Class Hierarchy</title>",
+ TMPDIR_STRING1 + "p1" + FS + "package-tree.html" },
+
+- { "<TITLE>" + LS + "Uses of Package p1" + LS + "</TITLE>",
++ { "<title>Uses of Package p1</title>",
+ TMPDIR_STRING1 + "p1" + FS + "package-use.html" },
+
+- { "<TITLE>" + LS + "C1" + LS + "</TITLE>",
++ { "<title>C1</title>",
+ TMPDIR_STRING1 + "p1" + FS + "C1.html" },
+
+- { "<TITLE>" + LS + "All Classes" + LS + "</TITLE>",
++ { "<title>All Classes</title>",
+ TMPDIR_STRING1 + "allclasses-frame.html" },
+
+- { "<TITLE>" + LS + "All Classes" + LS + "</TITLE>",
++ { "<title>All Classes</title>",
+ TMPDIR_STRING1 + "allclasses-noframe.html" },
+
+- { "<TITLE>" + LS + "Constant Field Values" + LS + "</TITLE>",
++ { "<title>Constant Field Values</title>",
+ TMPDIR_STRING1 + "constant-values.html" },
+
+- { "<TITLE>" + LS + "Deprecated List" + LS + "</TITLE>",
++ { "<title>Deprecated List</title>",
+ TMPDIR_STRING1 + "deprecated-list.html" },
+
+- { "<TITLE>" + LS + "Serialized Form" + LS + "</TITLE>",
++ { "<title>Serialized Form</title>",
+ TMPDIR_STRING1 + "serialized-form.html" },
+
+- { "<TITLE>" + LS + "API Help" + LS + "</TITLE>",
++ { "<title>API Help</title>",
+ TMPDIR_STRING1 + "help-doc.html" },
+
+- { "<TITLE>" + LS + "Index" + LS + "</TITLE>",
++ { "<title>Index</title>",
+ TMPDIR_STRING1 + "index-all.html" },
+
+- { "<TITLE>" + LS + "Uses of Class p1.C1" + LS + "</TITLE>",
++ { "<title>Uses of Class p1.C1</title>",
+ TMPDIR_STRING1 + "p1" + FS + "class-use" + FS + "C1.html" },
+ };
+
+@@ -147,7 +147,7 @@
+ * Assign value for [ stringToFind, filename ] for split index page
+ */
+ private static final String[][] testSplitIndexArray = {
+- { "<TITLE>" + LS + "C-Index" + LS + "</TITLE>",
++ { "<title>C-Index</title>",
+ TMPDIR_STRING2 + "index-files" + FS + "index-1.html" },
+ };
+
+diff --git a/test/com/sun/javadoc/constantValues/TestConstantValuesDriver.java b/test/com/sun/javadoc/constantValues/TestConstantValuesDriver.java
+--- langtools/test/com/sun/javadoc/constantValues/TestConstantValuesDriver.java
++++ langtools/test/com/sun/javadoc/constantValues/TestConstantValuesDriver.java
+@@ -51,7 +51,7 @@
+ tests[i][1] = "TEST"+(i+1)+"PASSES";
+ }
+ tests[tests.length-1][0] = BUG_ID + FS + "constant-values.html";
+- tests[tests.length-1][1] = "<CODE>\"&lt;Hello World&gt;\"</CODE>";
++ tests[tests.length-1][1] = "<code>\"&lt;Hello World&gt;\"</code>";
+ TestConstantValuesDriver tester = new TestConstantValuesDriver();
+ run(tester, ARGS, tests, NO_TEST);
+ tester.printSummary();
+diff --git a/test/com/sun/javadoc/testClassCrossReferences/TestClassCrossReferences.java b/test/com/sun/javadoc/testClassCrossReferences/TestClassCrossReferences.java
+--- langtools/test/com/sun/javadoc/testClassCrossReferences/TestClassCrossReferences.java
++++ langtools/test/com/sun/javadoc/testClassCrossReferences/TestClassCrossReferences.java
+@@ -37,18 +37,20 @@
+ private static final String BUG_ID = "4652655-4857717";
+ private static final String[][] TEST = {
+ {BUG_ID + FS + "C.html",
+- "<A HREF=\"http://java.sun.com/j2se/1.4/docs/api/java/math/package-summary.html?is-external=true\"><CODE>Link to math package</CODE></A>"},
++ "<a href=\"http://java.sun.com/j2se/1.4/docs/api/java/math/package-summary.html?is-external=true\"><code>Link to math package</code></a>"},
+ {BUG_ID + FS + "C.html",
+- "<A HREF=\"http://java.sun.com/j2se/1.4/docs/api/javax/swing/text/AbstractDocument.AttributeContext.html?is-external=true\" " +
+- "title=\"class or interface in javax.swing.text\"><CODE>Link to AttributeContext innerclass</CODE></A>"},
++ "<a href=\"http://java.sun.com/j2se/1.4/docs/api/javax/swing/text/AbstractDocument.AttributeContext.html?is-external=true\" " +
++ "title=\"class or interface in javax.swing.text\"><code>Link to AttributeContext innerclass</code></a>"},
+ {BUG_ID + FS + "C.html",
+- "<A HREF=\"http://java.sun.com/j2se/1.4/docs/api/java/math/BigDecimal.html?is-external=true\" " +
+- "title=\"class or interface in java.math\"><CODE>Link to external class BigDecimal</CODE></A>"},
++ "<a href=\"http://java.sun.com/j2se/1.4/docs/api/java/math/BigDecimal.html?is-external=true\" " +
++ "title=\"class or interface in java.math\"><code>Link to external class BigDecimal</code></a>"},
+ {BUG_ID + FS + "C.html",
+- "<A HREF=\"http://java.sun.com/j2se/1.4/docs/api/java/math/BigInteger.html?is-external=true#gcd(java.math.BigInteger)\" " +
+- "title=\"class or interface in java.math\"><CODE>Link to external member gcd</CODE></A>"},
++ "<a href=\"http://java.sun.com/j2se/1.4/docs/api/java/math/BigInteger.html?is-external=true#gcd(java.math.BigInteger)\" " +
++ "title=\"class or interface in java.math\"><code>Link to external member gcd</code></a>"},
+ {BUG_ID + FS + "C.html",
+- "<STRONG>Overrides:</STRONG></DT><DD><CODE>toString</CODE> in class <CODE>java.lang.Object</CODE>"}
++ "<dl>" + NL + "<dt><strong>Overrides:</strong></dt>" + NL +
++ "<dd><code>toString</code>&nbsp;in class&nbsp;<code>java.lang.Object</code></dd>" + NL +
++ "</dl>"}
+ };
+ private static final String[][] NEGATED_TEST = NO_TEST;
+ private static final String[] ARGS =
+diff --git a/test/com/sun/javadoc/testClassTree/TestClassTree.java b/test/com/sun/javadoc/testClassTree/TestClassTree.java
+--- langtools/test/com/sun/javadoc/testClassTree/TestClassTree.java
++++ langtools/test/com/sun/javadoc/testClassTree/TestClassTree.java
+@@ -48,32 +48,29 @@
+ //Input for string search tests.
+ private static final String[][] TEST = {
+ {BUG_ID + FS + "pkg" + FS + "package-tree.html",
+- "<LI TYPE=\"circle\">pkg.<A HREF=\"../pkg/ParentClass.html\" " +
+- "title=\"class in pkg\"><STRONG>ParentClass</STRONG></A><UL>"},
++ "<ul>" + NL + "<li type=\"circle\">pkg.<a href=\"../pkg/ParentClass.html\" " +
++ "title=\"class in pkg\"><span class=\"strong\">ParentClass</span></a>"},
+
+ {BUG_ID + FS + "pkg" + FS + "package-tree.html",
+- "Annotation Type Hierarchy" + NL + "</H2>" + NL + "<UL>" + NL +
+- "<LI TYPE=\"circle\">pkg.<A HREF=\"../pkg/AnnotationType.html\" " +
+- "title=\"annotation in pkg\"><STRONG>AnnotationType</STRONG></A> " +
+- "(implements java.lang.annotation.Annotation)" + NL + "</UL>"},
++ "<h2 title=\"Annotation Type Hierarchy\">Annotation Type Hierarchy</h2>" + NL +
++ "<ul>" + NL + "<li type=\"circle\">pkg.<a href=\"../pkg/AnnotationType.html\" " +
++ "title=\"annotation in pkg\"><span class=\"strong\">AnnotationType</span></a> " +
++ "(implements java.lang.annotation.Annotation)</li>" + NL + "</ul>"},
+
+ {BUG_ID + FS + "pkg" + FS + "package-tree.html",
+- "<H2>" + NL +
+- "Enum Hierarchy" + NL +
+- "</H2>" + NL +
+- "<UL>" + NL +
+- "<LI TYPE=\"circle\">java.lang.Object<UL>" + NL +
+- "<LI TYPE=\"circle\">java.lang.Enum&lt;E&gt; (implements java.lang.Comparable&lt;T&gt;, java.io.Serializable)" + NL +
+- "<UL>" + NL +
+- "<LI TYPE=\"circle\">pkg.<A HREF=\"../pkg/Coin.html\" title=\"enum in pkg\"><STRONG>Coin</STRONG></A></UL>" + NL +
+- "</UL>" + NL +
+- "</UL>"
++ "<h2 title=\"Enum Hierarchy\">Enum Hierarchy</h2>" + NL + "<ul>" + NL +
++ "<li type=\"circle\">java.lang.Object" + NL + "<ul>" + NL +
++ "<li type=\"circle\">java.lang.Enum&lt;E&gt; (implements java.lang." +
++ "Comparable&lt;T&gt;, java.io.Serializable)" + NL + "<ul>" + NL +
++ "<li type=\"circle\">pkg.<a href=\"../pkg/Coin.html\" " +
++ "title=\"enum in pkg\"><span class=\"strong\">Coin</span></a></li>" + NL +
++ "</ul>" + NL + "</li>" + NL + "</ul>" + NL + "</li>" + NL + "</ul>"
+ },
+ };
+ private static final String[][] NEGATED_TEST = {
+ {BUG_ID + FS + "pkg" + FS + "package-tree.html",
+- "<LI TYPE=\"circle\">class pkg.<A HREF=\"../pkg/ParentClass.html\" " +
+- "title=\"class in pkg\"><STRONG>ParentClass</STRONG></A><UL>"}
++ "<li type=\"circle\">class pkg.<a href=\"../pkg/ParentClass.html\" " +
++ "title=\"class in pkg\"><span class=\"strong\">ParentClass</span></a></li>"}
+ };
+
+ /**
+diff --git a/test/com/sun/javadoc/testConstructorIndent/TestConstructorIndent.java b/test/com/sun/javadoc/testConstructorIndent/TestConstructorIndent.java
+--- langtools/test/com/sun/javadoc/testConstructorIndent/TestConstructorIndent.java
++++ langtools/test/com/sun/javadoc/testConstructorIndent/TestConstructorIndent.java
+@@ -45,10 +45,10 @@
+
+ //Input for string search tests.
+ private static final String[][] TEST = {
+- {BUG_ID + FS + "C.html", "<DL>" + NL + "<DD>This is just a simple constructor." + NL +
+- "<P>" + NL + "</DD>" + NL + "<DD><DL>" + NL + "<DT><STRONG>Parameters:</STRONG>" +
+- "</DT><DD><CODE>i</CODE> - a param.</DD></DL>" + NL +
+- "</DD>" + NL + "</DL>"
++ {BUG_ID + FS + "C.html", "<div class=\"block\">" +
++ "This is just a simple constructor.</div>" + NL +
++ "<dl><dt><span class=\"strong\">Parameters:</span></dt><dd>" +
++ "<code>i</code> - a param.</dd></dl>"
+ }
+ };
+ private static final String[][] NEGATED_TEST = NO_TEST;
+diff --git a/test/com/sun/javadoc/testDeprecatedDocs/TestDeprecatedDocs.java b/test/com/sun/javadoc/testDeprecatedDocs/TestDeprecatedDocs.java
+--- langtools/test/com/sun/javadoc/testDeprecatedDocs/TestDeprecatedDocs.java
++++ langtools/test/com/sun/javadoc/testDeprecatedDocs/TestDeprecatedDocs.java
+@@ -76,24 +76,21 @@
+ {TARGET_FILE, "pkg.DeprecatedClassByAnnotation.method()"},
+ {TARGET_FILE, "pkg.DeprecatedClassByAnnotation.field"},
+
+- {TARGET_FILE2, "<STRONG>Deprecated.</STRONG>" + NL +
+- "<P>" + NL +
+- "<PRE><FONT SIZE=\"-1\">@Deprecated" + NL +
+- "</FONT>public class <STRONG>DeprecatedClassByAnnotation</STRONG>"},
++ {TARGET_FILE2, "<pre>@Deprecated" + NL +
++ "public class <strong>DeprecatedClassByAnnotation</strong>" + NL +
++ "extends java.lang.Object</pre>"},
+
+- {TARGET_FILE2, "public int <STRONG>field</STRONG></PRE>" + NL +
+- "<DL>" + NL +
+- "<DD><STRONG>Deprecated.</STRONG>&nbsp;</DD></DL>"},
++ {TARGET_FILE2, "<pre>@Deprecated" + NL +
++ "public&nbsp;int field</pre>" + NL +
++ "<div class=\"block\"><span class=\"strong\">Deprecated.</span>&nbsp;</div>"},
+
+- {TARGET_FILE2, "<FONT SIZE=\"-1\">@Deprecated" + NL +
+- "</FONT>public <STRONG>DeprecatedClassByAnnotation</STRONG>()</PRE>" + NL +
+- "<DL>" + NL +
+- "<DD><STRONG>Deprecated.</STRONG>"},
++ {TARGET_FILE2, "<pre>@Deprecated" + NL +
++ "public&nbsp;DeprecatedClassByAnnotation()</pre>" + NL +
++ "<div class=\"block\"><span class=\"strong\">Deprecated.</span>&nbsp;</div>"},
+
+- {TARGET_FILE2, "<FONT SIZE=\"-1\">@Deprecated" + NL +
+- "</FONT>public void <STRONG>method</STRONG>()</PRE>" + NL +
+- "<DL>" + NL +
+- "<DD><STRONG>Deprecated.</STRONG>"},
++ {TARGET_FILE2, "<pre>@Deprecated" + NL +
++ "public&nbsp;void&nbsp;method()</pre>" + NL +
++ "<div class=\"block\"><span class=\"strong\">Deprecated.</span>&nbsp;</div>"},
+ };
+
+ private static final String[][] NEGATED_TEST = NO_TEST;
+diff --git a/test/com/sun/javadoc/testDocRootInlineTag/TestDocRootInlineTag.java b/test/com/sun/javadoc/testDocRootInlineTag/TestDocRootInlineTag.java
+--- langtools/test/com/sun/javadoc/testDocRootInlineTag/TestDocRootInlineTag.java
++++ langtools/test/com/sun/javadoc/testDocRootInlineTag/TestDocRootInlineTag.java
+@@ -39,13 +39,13 @@
+ private static final String BUG_ID = "4369014-4851991";
+ private static final String[][] TEST = {
+ {BUG_ID + FS + "TestDocRootTag.html",
+- "<A HREF=\"http://www.java.sun.com/j2se/1.4/docs/api/java/io/File.html?is-external=true\" " +
+- "title=\"class or interface in java.io\"><CODE>File</CODE></A>"},
++ "<a href=\"http://www.java.sun.com/j2se/1.4/docs/api/java/io/File.html?is-external=true\" " +
++ "title=\"class or interface in java.io\"><code>File</code></a>"},
+ {BUG_ID + FS + "TestDocRootTag.html",
+ "<a href=\"./glossary.html\">glossary</a>"},
+ {BUG_ID + FS + "TestDocRootTag.html",
+- "<A HREF=\"http://www.java.sun.com/j2se/1.4/docs/api/java/io/File.html?is-external=true\" " +
+- "title=\"class or interface in java.io\"><CODE>Second File Link</CODE></A>"},
++ "<a href=\"http://www.java.sun.com/j2se/1.4/docs/api/java/io/File.html?is-external=true\" " +
++ "title=\"class or interface in java.io\"><code>Second File Link</code></a>"},
+ {BUG_ID + FS + "TestDocRootTag.html", "The value of @docRoot is \"./\""},
+ {BUG_ID + FS + "index-all.html", "My package page is " +
+ "<a href=\"./pkg/package-summary.html\">here</a>"}
+diff --git a/test/com/sun/javadoc/testExternalOverridenMethod/TestExternalOverridenMethod.java b/test/com/sun/javadoc/testExternalOverridenMethod/TestExternalOverridenMethod.java
+--- langtools/test/com/sun/javadoc/testExternalOverridenMethod/TestExternalOverridenMethod.java
++++ langtools/test/com/sun/javadoc/testExternalOverridenMethod/TestExternalOverridenMethod.java
+@@ -39,17 +39,17 @@
+ private static final String BUG_ID = "4857717";
+ private static final String[][] TEST = {
+ {BUG_ID + FS + "pkg" + FS + "XReader.html",
+- "<STRONG>Overrides:</STRONG></DT><DD><CODE><A HREF=\"" +
+- "http://java.sun.com/j2se/1.4.1/docs/api/java/io/FilterReader.html?is-external=true#read()\"" +
+- " title=\"class or interface in java.io\">read</A></CODE> in class " +
+- "<CODE><A HREF=\"http://java.sun.com/j2se/1.4.1/docs/api/java/io/FilterReader.html?is-external=true\"" +
+- " title=\"class or interface in java.io\">FilterReader</A>"},
++ "<dt><strong>Overrides:</strong></dt>" + NL +
++ "<dd><code><a href=\"http://java.sun.com/j2se/1.4.1/docs/api/java/io/FilterReader.html?is-external=true#read()\" " +
++ "title=\"class or interface in java.io\">read</a></code>&nbsp;in class&nbsp;<code>" +
++ "<a href=\"http://java.sun.com/j2se/1.4.1/docs/api/java/io/FilterReader.html?is-external=true\" " +
++ "title=\"class or interface in java.io\">FilterReader</a></code></dd>"},
+ {BUG_ID + FS + "pkg" + FS + "XReader.html",
+- "<STRONG>Specified by:</STRONG></DT><DD><CODE><A HREF=\"" +
+- "http://java.sun.com/j2se/1.4.1/docs/api/java/io/DataInput.html?is-external=true#readInt()\"" +
+- " title=\"class or interface in java.io\">readInt</A></CODE> in interface " +
+- "<CODE><A HREF=\"http://java.sun.com/j2se/1.4.1/docs/api/java/io/DataInput.html?is-external=true\"" +
+- " title=\"class or interface in java.io\">DataInput</A>"}};
++ "<dt><strong>Specified by:</strong></dt>" + NL +
++ "<dd><code><a href=\"http://java.sun.com/j2se/1.4.1/docs/api/java/io/DataInput.html?is-external=true#readInt()\" " +
++ "title=\"class or interface in java.io\">readInt</a></code>&nbsp;in interface&nbsp;<code>" +
++ "<a href=\"http://java.sun.com/j2se/1.4.1/docs/api/java/io/DataInput.html?is-external=true\" " +
++ "title=\"class or interface in java.io\">DataInput</a></code></dd>"}};
+
+
+
+diff --git a/test/com/sun/javadoc/testHeadings/TestHeadings.java b/test/com/sun/javadoc/testHeadings/TestHeadings.java
+--- langtools/test/com/sun/javadoc/testHeadings/TestHeadings.java
++++ langtools/test/com/sun/javadoc/testHeadings/TestHeadings.java
+@@ -47,80 +47,65 @@
+ private static final String[][] TEST = {
+ //Package summary
+ {BUG_ID + FS + "pkg1" + FS + "package-summary.html",
+- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
+- "Class</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
+- " NOWRAP>Description</TH>"
++ "<th class=\"colFirst\" scope=\"col\">" +
++ "Class</th>" + NL + "<th class=\"colLast\" scope=\"col\"" +
++ ">Description</th>"
+ },
+
+ // Class documentation
+ {BUG_ID + FS + "pkg1" + FS + "C1.html",
+- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
+- "Modifier and Type</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
+- " SCOPE=\"col\" NOWRAP>Field and Description</TH>"
++ "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>" + NL +
++ "<th class=\"colLast\" scope=\"col\">Field and Description</th>"
+ },
+ {BUG_ID + FS + "pkg1" + FS + "C1.html",
+- "<TH ALIGN=\"left\"><STRONG>Methods inherited from class " + "java.lang.Object</STRONG></TH>"
++ "<h3>Methods inherited from class&nbsp;java.lang.Object</h3>"
+ },
+
+ // Class use documentation
+ {BUG_ID + FS + "pkg1" + FS + "class-use" + FS + "C1.html",
+- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
+- "Package</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
+- " SCOPE=\"col\" NOWRAP>Description</TH>"
++ "<th class=\"colFirst\" scope=\"col\">Package</th>" + NL +
++ "<th class=\"colLast\" scope=\"col\">Description</th>"
+ },
+ {BUG_ID + FS + "pkg1" + FS + "class-use" + FS + "C1.html",
+- "<TH ALIGN=\"left\" COLSPAN=\"2\"><FONT SIZE=\"+2\">" + NL +
+- "Uses of <A HREF=\"../../pkg1/C1.html\" " + "title=\"class in pkg1\">C1</A> in " + "<A HREF=\"../../pkg2/package-summary.html\">pkg2</A></FONT></TH>"
+- },
+- {BUG_ID + FS + "pkg1" + FS + "class-use" + FS + "C1.html",
+- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
+- "Modifier and Type</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
+- " SCOPE=\"col\" NOWRAP>Field and Description</TH>"
++ "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>" + NL +
++ "<th class=\"colLast\" scope=\"col\">Field and Description</th>"
+ },
+
+ // Deprecated
+ {BUG_ID + FS + "deprecated-list.html",
+- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
+- "Method and Description</TH>"
++ "<th class=\"colOne\" scope=\"col\">Method and Description</th>"
+ },
+
+ // Constant values
+ {BUG_ID + FS + "constant-values.html",
+- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
+- "Modifier and Type</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
+- " SCOPE=\"col\" NOWRAP>Constant Field</TH>" + NL +
+- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>Value</TH>"
++ "<th class=\"colFirst\" scope=\"col\">" +
++ "Modifier and Type</th>" + NL + "<th scope=\"col\">Constant Field</th>" + NL +
++ "<th class=\"colLast\" scope=\"col\">Value</th>"
+ },
+
+ // Serialized Form
+ {BUG_ID + FS + "serialized-form.html",
+- "<TH ALIGN=\"center\"><FONT SIZE=\"+2\">" + NL +
+- "<STRONG>Package</STRONG> <STRONG>pkg1</STRONG></FONT></TH>"
++ "<h2 title=\"Package\">Package&nbsp;pkg1</h2>"
+ },
+ {BUG_ID + FS + "serialized-form.html",
+- "<TH ALIGN=\"left\" COLSPAN=\"2\"><FONT SIZE=\"+2\">" + NL +
+- "<STRONG>Class <A HREF=\"pkg1/C1.html\" " + "title=\"class in pkg1\">pkg1.C1</A> extends java.lang.Object " + "implements Serializable</STRONG></FONT></TH>"
++ "<h3>Class <a href=\"pkg1/C1.html\" title=\"class in pkg1\">" +
++ "pkg1.C1</a> extends java.lang.Object implements Serializable</h3>"
+ },
+ {BUG_ID + FS + "serialized-form.html",
+- "<TH ALIGN=\"left\" COLSPAN=\"1\"><FONT SIZE=\"+2\">" + NL +
+- "<STRONG>Serialized Fields</STRONG></FONT></TH>"
++ "<h3>Serialized Fields</h3>"
+ },
+
+ // Overview Frame
+ {BUG_ID + FS + "overview-frame.html",
+- "<TH ALIGN=\"left\" NOWRAP><FONT size=\"+1\" " + "CLASS=\"FrameTitleFont\">" + NL + "<STRONG>Test Files</STRONG></FONT></TH>"
++ "<h1 title=\"Test Files\" class=\"bar\">Test Files</h1>"
+ },
+ {BUG_ID + FS + "overview-frame.html",
+- "<TITLE>" + NL +
+- "Overview List" + NL +
+- "</TITLE>"
++ "<title>Overview List</title>"
+ },
+
+ // Overview Summary
+ {BUG_ID + FS + "overview-summary.html",
+- "<TITLE>" + NL +
+- "Overview" + NL +
+- "</TITLE>"
++ "<title>Overview</title>"
+ },
+
+ };
+diff --git a/test/com/sun/javadoc/testHelpOption/TestHelpOption.java b/test/com/sun/javadoc/testHelpOption/TestHelpOption.java
+--- langtools/test/com/sun/javadoc/testHelpOption/TestHelpOption.java
++++ langtools/test/com/sun/javadoc/testHelpOption/TestHelpOption.java
+@@ -91,8 +91,7 @@
+
+ private static final String[][] TEST2 = {
+ {BUG_ID + FS + "TestHelpOption.html",
+- "<A HREF=\"help-doc.html\"><FONT CLASS=\"NavBarFont1\">" +
+- "<STRONG>Help</STRONG></FONT></A>"
++ "<li><a href=\"help-doc.html\">Help</a></li>"
+ },
+ };
+ private static final String[][] NEGATED_TEST2 = NO_TEST;
+diff --git a/test/com/sun/javadoc/testHref/TestHref.java b/test/com/sun/javadoc/testHref/TestHref.java
+--- langtools/test/com/sun/javadoc/testHref/TestHref.java
++++ langtools/test/com/sun/javadoc/testHref/TestHref.java
+@@ -47,37 +47,41 @@
+ private static final String[][] TEST = {
+ //External link.
+ {BUG_ID + FS + "pkg" + FS + "C1.html",
+- "HREF=\"http://java.sun.com/j2se/1.4/docs/api/java/lang/Object.html?is-external=true#wait(long, int)\""
++ "href=\"http://java.sun.com/j2se/1.4/docs/api/java/lang/Object.html?is-external=true#wait(long, int)\""
+ },
+ //Member summary table link.
+ {BUG_ID + FS + "pkg" + FS + "C1.html",
+- "HREF=\"../pkg/C1.html#method(int, int, java.util.ArrayList)\""
++ "href=\"../pkg/C1.html#method(int, int, java.util.ArrayList)\""
+ },
+ //Anchor test.
+ {BUG_ID + FS + "pkg" + FS + "C1.html",
+- "<A NAME=\"method(int, int, java.util.ArrayList)\"><!-- --></A>"
++ "<a name=\"method(int, int, java.util.ArrayList)\">" + NL +
++ "<!-- -->" + NL +
++ "</a>"
+ },
+ //Backward compatibility anchor test.
+ {BUG_ID + FS + "pkg" + FS + "C1.html",
+- "<A NAME=\"method(int, int, java.util.ArrayList)\"><!-- --></A>"
++ "<a name=\"method(int, int, java.util.ArrayList)\">" + NL +
++ "<!-- -->" + NL +
++ "</a>"
+ },
+ //{@link} test.
+ {BUG_ID + FS + "pkg" + FS + "C2.html",
+- "Link: <A HREF=\"../pkg/C1.html#method(int, int, java.util.ArrayList)\">"
++ "Link: <a href=\"../pkg/C1.html#method(int, int, java.util.ArrayList)\">"
+ },
+ //@see test.
+ {BUG_ID + FS + "pkg" + FS + "C2.html",
+- "See Also:</STRONG></DT><DD><A HREF=\"../pkg/C1.html#method(int, int, java.util.ArrayList)\">"
++ "See Also:</span></dt><dd><a href=\"../pkg/C1.html#method(int, int, java.util.ArrayList)\">"
+ },
+
+ //Header does not link to the page itself.
+ {BUG_ID + FS + "pkg" + FS + "C4.html",
+- "Class C4&lt;E extends C4&lt;E&gt;&gt;</H2>"
++ "Class C4&lt;E extends C4&lt;E&gt;&gt;</h2>"
+ },
+
+ //Signature does not link to the page itself.
+ {BUG_ID + FS + "pkg" + FS + "C4.html",
+- "public abstract class <STRONG>C4&lt;E extends C4&lt;E&gt;&gt;</STRONG>"
++ "public abstract class <strong>C4&lt;E extends C4&lt;E&gt;&gt;</strong>"
+ },
+ };
+ private static final String[][] NEGATED_TEST =
+diff --git a/test/com/sun/javadoc/testHtmlDefinitionListTag/TestHtmlDefinitionListTag.java b/test/com/sun/javadoc/testHtmlDefinitionListTag/TestHtmlDefinitionListTag.java
+--- langtools/test/com/sun/javadoc/testHtmlDefinitionListTag/TestHtmlDefinitionListTag.java
++++ langtools/test/com/sun/javadoc/testHtmlDefinitionListTag/TestHtmlDefinitionListTag.java
+@@ -43,149 +43,77 @@
+ // Optional Element should print properly nested definition list tags
+ // for default value.
+ private static final String[][] TEST_ALL = {
+- {BUG_ID + FS + "pkg1" + FS + "C1.html", "<PRE>public class " +
+- "<STRONG>C1</STRONG>" + NL + "extends " +
+- "java.lang.Object" + NL + "implements " +
+- "java.io.Serializable</PRE>"},
+- {BUG_ID + FS + "pkg1" + FS + "C4.html", "<DL>" + NL + "<DD><DL>" + NL +
+- "<DT><STRONG>Default:</STRONG></DT><DD>true</DD>" + NL +
+- "</DL>" + NL + "</DD>" + NL + "</DL>"}};
++ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<pre>public class <strong>C1</strong>" + NL +
++ "extends java.lang.Object" + NL + "implements java.io.Serializable</pre>"},
++ {BUG_ID + FS + "pkg1" + FS + "C4.html", "<dl>" + NL +
++ "<dt>Default:</dt>" + NL + "<dd>true</dd>" + NL +
++ "</dl>"}};
+
+ // Test for normal run of javadoc in which various ClassDocs and
+ // serialized form should have properly nested definition list tags
+ // enclosing comments, tags and deprecated information.
+ private static final String[][] TEST_CMNT_DEPR = {
+- {BUG_ID + FS + "pkg1" + FS + "C1.html", "<DL>" + NL +
+- "<DT><STRONG>Since:</STRONG></DT>" + NL +
+- " <DD>JDK1.0</DD>" + NL + "<DT><STRONG>See Also:</STRONG></DT><DD>" +
+- "<A HREF=\"../pkg1/C2.html\" title=\"class in pkg1\">" +
+- "<CODE>C2</CODE></A>, " + NL +
+- "<A HREF=\"../serialized-form.html#pkg1.C1\">" +
+- "Serialized Form</A></DD></DL>"},
+- {BUG_ID + FS + "pkg1" + FS + "C1.html", "<DL>" + NL +
+- "<DD><STRONG>Deprecated.</STRONG>&nbsp;<I>As of JDK version" +
+- " 1.5, replaced by" + NL +
+- " <A HREF=\"../pkg1/C1.html#setUndecorated(boolean)\">" +
+- "<CODE>setUndecorated(boolean)</CODE></A>.</I></DD>" +
+- "<DD>This field indicates whether the C1 is undecorated." + NL +
+- "<P>" + NL + "</DD>" + NL + "<DD><DL>" + NL + "<DT><STRONG>" +
+- "Since:</STRONG></DT>" + NL + " <DD>1.4</DD>" + NL + "<DT>" +
+- "<STRONG>See Also:</STRONG></DT><DD>" +
+- "<A HREF=\"../pkg1/C1.html#setUndecorated(boolean)\"><CODE>" +
+- "setUndecorated(boolean)</CODE></A></DD></DL>" + NL +"</DD>" + NL +
+- "</DL>"},
+- {BUG_ID + FS + "pkg1" + FS + "C1.html", "<DL>" + NL +
+- "<DD>Constructor." + NL + "<P>" + NL + "</DD>" + NL +
+- "<DD><DL>" + NL + "<DT><STRONG>Parameters:</STRONG></DT><DD>" +
+- "<CODE>title</CODE> - the title</DD><DD><CODE>test</CODE>" +
+- " - boolean value</DD>" + NL + "<DT><STRONG>Throws:</STRONG></DT>" + NL +
+- "<DD><CODE>java.lang.IllegalArgumentException</CODE>" +
+- " - if the <code>owner</code>'s" + NL + " <code>GraphicsConfiguration" +
+- "</code> is not from a screen device</DD>" + NL +"<DD><CODE>" +
+- "HeadlessException</CODE></DD></DL>" + NL + "</DD>" + NL +
+- "</DL>"},
+- {BUG_ID + FS + "pkg1" + FS + "C1.html", "<DL>" + NL +
+- "<DD>Method comments." + NL + "<P>" + NL +
+- "</DD>" + NL + "<DD><DL>" + NL + "<DT><STRONG>Parameters:" +
+- "</STRONG></DT><DD><CODE>undecorated</CODE> - <code>true</code>" +
+- " if no decorations are" + NL + " to be enabled;" + NL +
+- " <code>false</code> if decorations are to be enabled." +
+- "</DD><DT><STRONG>Since:</STRONG></DT>" + NL +
+- " <DD>1.4</DD>" + NL + "<DT><STRONG>See Also:</STRONG></DT>" +
+- "<DD><A HREF=\"../pkg1/C1.html#readObject()\"><CODE>" +
+- "readObject()</CODE></A></DD></DL>" + NL + "</DD>" + NL +
+- "</DL>"},
+- {BUG_ID + FS + "pkg1" + FS + "C1.html", "<DL>" + NL + "<DD><DL>" + NL +
+- "<DT><STRONG>Throws:</STRONG></DT>" + NL + "<DD><CODE>" +
+- "java.io.IOException</CODE></DD><DT><STRONG>See Also:" +
+- "</STRONG></DT><DD>" +
+- "<A HREF=\"../pkg1/C1.html#setUndecorated(boolean)\">" +
+- "<CODE>setUndecorated(boolean)</CODE></A></DD></DL>" + NL +
+- "</DD>" + NL + "</DL>"},
+- {BUG_ID + FS + "pkg1" + FS + "C1.ModalExclusionType.html", "<DL>" + NL +
+- "<DD>No modal exclusion." + NL + "<P>" + NL +"</DD>" + NL +
+- "</DL>"},
+- {BUG_ID + FS + "pkg1" + FS + "C2.html", "<DL>" + NL + "<DD>Constructor." + NL +
+- "<P>" + NL +"</DD>" + NL + "</DL>"},
+- {BUG_ID + FS + "pkg1" + FS + "C2.html", "<DL>" + NL + "<DD><STRONG>" +
+- "Deprecated.</STRONG>&nbsp;<I>As of JDK version 1.5, replaced " +
+- "by" + NL + " <A HREF=\"../pkg1/C1.html#setUndecorated(boolean)\">" +
+- "<CODE>setUndecorated(boolean)</CODE></A>.</I>" + NL + "<P>" + NL +
+- "</DD><DD>Set visible." + NL + "<P>" + NL + "</DD>" +NL +
+- "<DD><DL>" + NL + "<DT><STRONG>Parameters:</STRONG></DT><DD>" +
+- "<CODE>set</CODE> - boolean</DD><DT><STRONG>Since:</STRONG></DT>" + NL +
+- " <DD>1.4</DD></DL>" + NL + "</DD>" + NL + "</DL>"},
+- {BUG_ID + FS + "pkg1" + FS + "C3.html", "<DL>" + NL + "<DD>Comment." + NL +
+- "<P>" + NL + "</DD>" + NL + "</DL>"},
+- {BUG_ID + FS + "serialized-form.html", "<DL>" + NL + "<DD><DL>" + NL +
+- "<DT><STRONG>Throws:</STRONG></DT>" + NL + "<DD><CODE>" +
+- "java.io.IOException</CODE></DD><DT><STRONG>See Also:</STRONG>" +
+- "</DT><DD><A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
+- "<CODE>C1.setUndecorated(boolean)</CODE></A></DD></DL>" + NL +
+- "</DD>" + NL + "</DL>"},
+- {BUG_ID + FS + "serialized-form.html", "<DL>" + NL +
+- "<DD><STRONG>Deprecated.</STRONG>&nbsp;<I>As of JDK version " +
+- "1.5, replaced by" + NL +
+- " <A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
+- "<CODE>setUndecorated(boolean)</CODE></A>.</I></DD>" +
+- "<DD>This field indicates whether the C1 is undecorated." + NL +
+- "<P>" + NL + "</DD>" + NL + "<DD>&nbsp;</DD>" + NL +
+- "<DD><DL>" + NL + "<DT><STRONG>Since:</STRONG></DT>" + NL +
+- " <DD>1.4</DD>" + NL + "<DT><STRONG>See Also:</STRONG>" +
+- "</DT><DD><A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
+- "<CODE>C1.setUndecorated(boolean)</CODE></A></DD></DL>" + NL +
+- "</DD>" + NL + "</DL>"},
+- {BUG_ID + FS + "serialized-form.html", "<DL>" + NL +
+- "<DD><STRONG>Deprecated.</STRONG>&nbsp;<I>As of JDK version" +
+- " 1.5, replaced by" + NL +
+- " <A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
+- "<CODE>setUndecorated(boolean)</CODE></A>.</I>" + NL + "<P>" + NL +
+- "</DD><DD>Reads the object stream." + NL + "<P>" + NL +
+- "</DD>" + NL + "<DD><DL>" + NL + "<DT><STRONG>Throws:" +
+- "</STRONG></DT>" + NL + "<DD><CODE><code>" +
+- "IOException</code></CODE></DD>" + NL +
+- "<DD><CODE>java.io.IOException</CODE></DD></DL>" + NL +
+- "</DD>" + NL + "</DL>"},
+- {BUG_ID + FS + "serialized-form.html", "<DL>" + NL +
+- "<DD><STRONG>Deprecated.</STRONG>&nbsp;</DD><DD>" +
+- "The name for this class." + NL + "<P>" + NL + "</DD>" + NL +
+- "<DD>&nbsp;</DD>" + NL + "</DL>"}};
+-
+- // Test with -nocomment option. The ClassDocs and serialized form should
+- // have properly nested definition list tags enclosing deprecated
+- // information and should not display definition lists for comments
+- // and tags.
+- private static final String[][] TEST_NOCMNT = {
+- {BUG_ID + FS + "pkg1" + FS + "C1.html", "<DL>" + NL + "<DD><STRONG>" +
+- "Deprecated.</STRONG>&nbsp;<I>As of JDK version 1.5, replaced by" + NL +
+- " <A HREF=\"../pkg1/C1.html#setUndecorated(boolean)\"><CODE>" +
+- "setUndecorated(boolean)</CODE></A>.</I></DD></DL>"},
+- {BUG_ID + FS + "pkg1" + FS + "C2.html", "<DL>" + NL +
+- "<DD><STRONG>Deprecated.</STRONG>&nbsp;<I>As of JDK version" +
+- " 1.5, replaced by" + NL +
+- " <A HREF=\"../pkg1/C1.html#setUndecorated(boolean)\">" +
+- "<CODE>setUndecorated(boolean)</CODE></A>.</I>" + NL + "<P>" + NL +
+- "</DD></DL>"},
+- {BUG_ID + FS + "pkg1" + FS + "C5.html", "<PRE>" + NL +
+- "protected <STRONG>C5</STRONG>()</PRE>" + NL + "<DL>" + NL +
+- "<DD><STRONG>Deprecated.</STRONG>&nbsp;</DD></DL>"},
+- {BUG_ID + FS + "pkg1" + FS + "C5.html", "<PRE>" + NL +
+- "public void <STRONG>printInfo</STRONG>()</PRE>" + NL + "<DL>" + NL +
+- "<DD><STRONG>Deprecated.</STRONG>&nbsp;</DD></DL>"},
+- {BUG_ID + FS + "serialized-form.html", "<PRE>" + NL + "boolean <STRONG>" +
+- "undecorated</STRONG></PRE>" + NL + "<DL>" + NL + "<DD><STRONG>" +
+- "Deprecated.</STRONG>&nbsp;<I>As of JDK version 1.5, replaced by" + NL +
+- " <A HREF=\"pkg1/C1.html#setUndecorated(boolean)\"><CODE>" +
+- "setUndecorated(boolean)</CODE></A>.</I></DD></DL>"},
+- {BUG_ID + FS + "serialized-form.html", "<DL>" + NL + "<DD><STRONG>" +
+- "Deprecated.</STRONG>&nbsp;<I>As of JDK version" +
+- " 1.5, replaced by" + NL +
+- " <A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
+- "<CODE>setUndecorated(boolean)</CODE></A>.</I>" + NL + "<P>" + NL +
+- "</DD></DL>"},
+- {BUG_ID + FS + "serialized-form.html", "<PRE>" + NL + "int <STRONG>" +
+- "publicKey</STRONG></PRE>" + NL + "<DL>" + NL + "<DD><STRONG>" +
+- "Deprecated.</STRONG>&nbsp;</DD></DL>"}};
++ {BUG_ID + FS + "pkg1" + FS + "package-summary.html", "<dl>" +
++ "<dt><span class=\"strong\">Since:</span></dt>" + NL +
++ " <dd>JDK1.0</dd></dl>"},
++ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<dl><dt><span class=\"strong\">Since:</span></dt>" + NL +
++ " <dd>JDK1.0</dd>" + NL + "<dt><span class=\"strong\">See Also:</span></dt>" +
++ "<dd><a href=\"../pkg1/C2.html\" title=\"class in pkg1\"><code>" +
++ "C2</code></a>, " + NL + "<a href=\"../serialized-form.html#pkg1.C1\">" +
++ "Serialized Form</a></dd></dl>"},
++ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<dl><dt><span class=\"strong\">Since:</span></dt>" + NL +
++ " <dd>1.4</dd>" + NL +
++ "<dt><span class=\"strong\">See Also:</span></dt><dd>" +
++ "<a href=\"../pkg1/C1.html#setUndecorated(boolean)\">" +
++ "<code>setUndecorated(boolean)</code></a></dd></dl>"},
++ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<dl><dt><span class=\"strong\">Parameters:</span></dt><dd><code>title" +
++ "</code> - the title</dd><dd><code>test</code> - boolean value" +
++ "</dd>" + NL + "<dt><span class=\"strong\">Throws:</span></dt>" + NL +
++ "<dd><code>java.lang.IllegalArgumentException</code> - if the " +
++ "<code>owner</code>'s" + NL +
++ " <code>GraphicsConfiguration</code> is not from a screen " +
++ "device</dd>" + NL + "<dd><code>HeadlessException</code></dd></dl>"},
++ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<dl><dt><span class=\"strong\">Parameters:</span></dt><dd><code>undecorated" +
++ "</code> - <code>true</code> if no decorations are" + NL +
++ " to be enabled;" + NL + " <code>false</code> " +
++ "if decorations are to be enabled.</dd><dt><span class=\"strong\">Since:" +
++ "</span></dt>" + NL + " <dd>1.4</dd>" + NL +
++ "<dt><span class=\"strong\">See Also:</span></dt><dd>" +
++ "<a href=\"../pkg1/C1.html#readObject()\"><code>readObject()" +
++ "</code></a></dd></dl>"},
++ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<dl><dt><span class=\"strong\">Throws:</span></dt>" + NL +
++ "<dd><code>java.io.IOException</code></dd><dt><span class=\"strong\">See Also:" +
++ "</span></dt><dd><a href=\"../pkg1/C1.html#setUndecorated(boolean)\">" +
++ "<code>setUndecorated(boolean)</code></a></dd></dl>"},
++ {BUG_ID + FS + "pkg1" + FS + "C2.html", "<dl><dt><span class=\"strong\">Parameters:" +
++ "</span></dt><dd><code>set</code> - boolean</dd><dt><span class=\"strong\">" +
++ "Since:</span></dt>" + NL + " <dd>1.4</dd></dl>"},
++ {BUG_ID + FS + "serialized-form.html", "<dl><dt><span class=\"strong\">Throws:</span>" +
++ "</dt>" + NL + "<dd><code>" +
++ "java.io.IOException</code></dd><dt><span class=\"strong\">See Also:</span>" +
++ "</dt><dd><a href=\"pkg1/C1.html#setUndecorated(boolean)\">" +
++ "<code>C1.setUndecorated(boolean)</code></a></dd></dl>"},
++ {BUG_ID + FS + "serialized-form.html", "<span class=\"strong\">Deprecated.</span>" +
++ "&nbsp;<i>As of JDK version 1.5, replaced by" + NL +
++ " <a href=\"pkg1/C1.html#setUndecorated(boolean)\">" +
++ "<code>setUndecorated(boolean)</code></a>.</i></div>" + NL +
++ "<div class=\"block\">This field indicates whether the C1 is " +
++ "undecorated.</div>" + NL + "&nbsp;" + NL + "<dl><dt><span class=\"strong\">Since:</span></dt>" + NL +
++ " <dd>1.4</dd>" + NL + "<dt><span class=\"strong\">See Also:</span>" +
++ "</dt><dd><a href=\"pkg1/C1.html#setUndecorated(boolean)\">" +
++ "<code>C1.setUndecorated(boolean)</code></a></dd></dl>"},
++ {BUG_ID + FS + "serialized-form.html", "<span class=\"strong\">Deprecated.</span>" +
++ "&nbsp;<i>As of JDK version 1.5, replaced by" + NL +
++ " <a href=\"pkg1/C1.html#setUndecorated(boolean)\">" +
++ "<code>setUndecorated(boolean)</code></a>.</i></div>" + NL +
++ "<div class=\"block\">Reads the object stream.</div>" + NL +
++ "<dl><dt><span class=\"strong\">Throws:" +
++ "</span></dt>" + NL + "<dd><code><code>" +
++ "IOException</code></code></dd>" + NL +
++ "<dd><code>java.io.IOException</code></dd></dl>"},
++ {BUG_ID + FS + "serialized-form.html", "<span class=\"strong\">Deprecated.</span>" +
++ "&nbsp;</div>" + NL +
++ "<div class=\"block\">The name for this class.</div>"}};
+
+ // Test with -nodeprecated option. The ClassDocs should have properly nested
+ // definition list tags enclosing comments and tags. The ClassDocs should not
+@@ -193,133 +121,104 @@
+ // should display properly nested definition list tags for comments, tags
+ // and deprecated information.
+ private static final String[][] TEST_NODEPR = {
+- {BUG_ID + FS + "pkg1" + FS + "C1.html", "<DL>" + NL +
+- "<DT><STRONG>Since:</STRONG></DT>" + NL +
+- " <DD>JDK1.0</DD>" + NL + "<DT><STRONG>See Also:</STRONG></DT><DD>" +
+- "<A HREF=\"../pkg1/C2.html\" title=\"class in pkg1\">" +
+- "<CODE>C2</CODE></A>, " + NL +
+- "<A HREF=\"../serialized-form.html#pkg1.C1\">" +
+- "Serialized Form</A></DD></DL>"},
+- {BUG_ID + FS + "pkg1" + FS + "C1.html", "<DL>" + NL +
+- "<DD>Constructor." + NL + "<P>" + NL + "</DD>" + NL +
+- "<DD><DL>" + NL + "<DT><STRONG>Parameters:</STRONG></DT><DD>" +
+- "<CODE>title</CODE> - the title</DD><DD><CODE>test</CODE>" +
+- " - boolean value</DD>" + NL + "<DT><STRONG>Throws:</STRONG></DT>" + NL +
+- "<DD><CODE>java.lang.IllegalArgumentException</CODE>" +
+- " - if the <code>owner</code>'s" + NL + " <code>GraphicsConfiguration" +
+- "</code> is not from a screen device</DD>" + NL +"<DD><CODE>" +
+- "HeadlessException</CODE></DD></DL>" + NL + "</DD>" + NL +
+- "</DL>"},
+- {BUG_ID + FS + "pkg1" + FS + "C1.html", "<DL>" + NL +
+- "<DD>Method comments." + NL + "<P>" + NL +
+- "</DD>" + NL + "<DD><DL>" + NL + "<DT><STRONG>Parameters:" +
+- "</STRONG></DT><DD><CODE>undecorated</CODE> - <code>true</code>" +
++ {BUG_ID + FS + "pkg1" + FS + "package-summary.html", "<dl>" +
++ "<dt><span class=\"strong\">Since:</span></dt>" + NL +
++ " <dd>JDK1.0</dd></dl>"},
++ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<dl><dt><span class=\"strong\">Since:</span>" +
++ "</dt>" + NL + " <dd>JDK1.0</dd>" + NL + "<dt><span class=\"strong\">See Also:" +
++ "</span></dt><dd><a href=\"../pkg1/C2.html\" title=\"class in pkg1\">" +
++ "<code>C2</code></a>, " + NL + "<a href=\"../serialized-form.html#pkg1.C1\">" +
++ "Serialized Form</a></dd></dl>"},
++ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<dl><dt><span class=\"strong\">Parameters:" +
++ "</span></dt><dd><code>title</code> - the title</dd><dd><code>" +
++ "test</code> - boolean value</dd>" + NL + "<dt><span class=\"strong\">Throws:" +
++ "</span></dt>" + NL + "<dd><code>java.lang.IllegalArgumentException" +
++ "</code> - if the <code>owner</code>'s" + NL + " <code>GraphicsConfiguration" +
++ "</code> is not from a screen device</dd>" + NL + "<dd><code>" +
++ "HeadlessException</code></dd></dl>"},
++ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<dl><dt><span class=\"strong\">Parameters:" +
++ "</span></dt><dd><code>undecorated</code> - <code>true</code>" +
+ " if no decorations are" + NL + " to be enabled;" + NL +
+ " <code>false</code> if decorations are to be enabled." +
+- "</DD><DT><STRONG>Since:</STRONG></DT>" + NL +
+- " <DD>1.4</DD>" + NL + "<DT><STRONG>See Also:</STRONG></DT>" +
+- "<DD><A HREF=\"../pkg1/C1.html#readObject()\"><CODE>" +
+- "readObject()</CODE></A></DD></DL>" + NL + "</DD>" + NL +
+- "</DL>"},
+- {BUG_ID + FS + "pkg1" + FS + "C1.html", "<DL>" + NL + "<DD><DL>" + NL +
+- "<DT><STRONG>Throws:</STRONG></DT>" + NL + "<DD><CODE>" +
+- "java.io.IOException</CODE></DD><DT><STRONG>See Also:" +
+- "</STRONG></DT><DD>" +
+- "<A HREF=\"../pkg1/C1.html#setUndecorated(boolean)\">" +
+- "<CODE>setUndecorated(boolean)</CODE></A></DD></DL>" + NL +
+- "</DD>" + NL + "</DL>"},
+- {BUG_ID + FS + "pkg1" + FS + "C1.ModalExclusionType.html", "<DL>" + NL +
+- "<DD>No modal exclusion." + NL + "<P>" + NL +"</DD>" + NL +
+- "</DL>"},
+- {BUG_ID + FS + "pkg1" + FS + "C2.html", "<DL>" + NL + "<DD>Constructor." + NL +
+- "<P>" + NL +"</DD>" + NL + "</DL>"},
+- {BUG_ID + FS + "pkg1" + FS + "C3.html", "<DL>" + NL + "<DD>Comment." + NL +
+- "<P>" + NL + "</DD>" + NL + "</DL>"},
+- {BUG_ID + FS + "serialized-form.html", "<DL>" + NL + "<DD><DL>" + NL +
+- "<DT><STRONG>Throws:</STRONG></DT>" + NL + "<DD><CODE>" +
+- "java.io.IOException</CODE></DD><DT><STRONG>See Also:</STRONG>" +
+- "</DT><DD><A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
+- "<CODE>C1.setUndecorated(boolean)</CODE></A></DD></DL>" + NL +
+- "</DD>" + NL + "</DL>"},
+- {BUG_ID + FS + "serialized-form.html", "<DL>" + NL +
+- "<DD><STRONG>Deprecated.</STRONG>&nbsp;<I>As of JDK version " +
+- "1.5, replaced by" + NL +
+- " <A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
+- "<CODE>setUndecorated(boolean)</CODE></A>.</I></DD>" +
+- "<DD>This field indicates whether the C1 is undecorated." + NL +
+- "<P>" + NL + "</DD>" + NL + "<DD>&nbsp;</DD>" + NL +
+- "<DD><DL>" + NL + "<DT><STRONG>Since:</STRONG></DT>" + NL +
+- " <DD>1.4</DD>" + NL + "<DT><STRONG>See Also:</STRONG>" +
+- "</DT><DD><A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
+- "<CODE>C1.setUndecorated(boolean)</CODE></A></DD></DL>" + NL +
+- "</DD>" + NL + "</DL>"},
+- {BUG_ID + FS + "serialized-form.html", "<DL>" + NL +
+- "<DD><STRONG>Deprecated.</STRONG>&nbsp;<I>As of JDK version" +
+- " 1.5, replaced by" + NL +
+- " <A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
+- "<CODE>setUndecorated(boolean)</CODE></A>.</I>" + NL + "<P>" + NL +
+- "</DD><DD>Reads the object stream." + NL + "<P>" + NL +
+- "</DD>" + NL + "<DD><DL>" + NL + "<DT><STRONG>Throws:" +
+- "</STRONG></DT>" + NL + "<DD><CODE><code>" +
+- "IOException</code></CODE></DD>" + NL +
+- "<DD><CODE>java.io.IOException</CODE></DD></DL>" + NL +
+- "</DD>" + NL + "</DL>"},
+- {BUG_ID + FS + "serialized-form.html", "<DL>" + NL +
+- "<DD><STRONG>Deprecated.</STRONG>&nbsp;</DD><DD>" +
+- "The name for this class." + NL + "<P>" + NL + "</DD>" + NL +
+- "<DD>&nbsp;</DD>" + NL + "</DL>"}};
++ "</dd><dt><span class=\"strong\">Since:</span></dt>" + NL + " <dd>1.4</dd>" + NL +
++ "<dt><span class=\"strong\">See Also:</span></dt><dd><a href=\"../pkg1/C1.html#readObject()\">" +
++ "<code>readObject()</code></a></dd></dl>"},
++ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<dl><dt><span class=\"strong\">Throws:</span>" +
++ "</dt>" + NL + "<dd><code>java.io.IOException</code></dd><dt>" +
++ "<span class=\"strong\">See Also:</span></dt><dd><a href=\"../pkg1/C1.html#setUndecorated(boolean)\">" +
++ "<code>setUndecorated(boolean)</code></a></dd></dl>"},
++ {BUG_ID + FS + "serialized-form.html", "<dl><dt><span class=\"strong\">Throws:</span>" +
++ "</dt>" + NL + "<dd><code>" +
++ "java.io.IOException</code></dd><dt><span class=\"strong\">See Also:</span>" +
++ "</dt><dd><a href=\"pkg1/C1.html#setUndecorated(boolean)\">" +
++ "<code>C1.setUndecorated(boolean)</code></a></dd></dl>"},
++ {BUG_ID + FS + "serialized-form.html", "<span class=\"strong\">Deprecated.</span>" +
++ "&nbsp;<i>As of JDK version 1.5, replaced by" + NL +
++ " <a href=\"pkg1/C1.html#setUndecorated(boolean)\">" +
++ "<code>setUndecorated(boolean)</code></a>.</i></div>" + NL +
++ "<div class=\"block\">This field indicates whether the C1 is " +
++ "undecorated.</div>" + NL + "&nbsp;" + NL + "<dl><dt><span class=\"strong\">Since:</span></dt>" + NL +
++ " <dd>1.4</dd>" + NL + "<dt><span class=\"strong\">See Also:</span>" +
++ "</dt><dd><a href=\"pkg1/C1.html#setUndecorated(boolean)\">" +
++ "<code>C1.setUndecorated(boolean)</code></a></dd></dl>"},
++ {BUG_ID + FS + "serialized-form.html", "<span class=\"strong\">Deprecated.</span>" +
++ "&nbsp;<i>As of JDK version 1.5, replaced by" + NL +
++ " <a href=\"pkg1/C1.html#setUndecorated(boolean)\">" +
++ "<code>setUndecorated(boolean)</code></a>.</i></div>" + NL +
++ "<div class=\"block\">Reads the object stream.</div>" + NL +
++ "<dl><dt><span class=\"strong\">Throws:" +
++ "</span></dt>" + NL + "<dd><code><code>" +
++ "IOException</code></code></dd>" + NL +
++ "<dd><code>java.io.IOException</code></dd></dl>"},
++ {BUG_ID + FS + "serialized-form.html", "<span class=\"strong\">Deprecated.</span>" +
++ "&nbsp;</div>" + NL + "<div class=\"block\">" +
++ "The name for this class.</div>"}};
+
+ // Test with -nocomment and -nodeprecated options. The ClassDocs whould
+- // not display definition lists for any member details. The serialized
+- // form should display properly nested definition list tags for
+- // deprecated information only.
++ // not display definition lists for any member details.
+ private static final String[][] TEST_NOCMNT_NODEPR = {
+- {BUG_ID + FS + "pkg1" + FS + "C1.html", "<PRE>" + NL + "public void " +
+- "<STRONG>readObject</STRONG>()" + NL + " throws" +
+- " java.io.IOException</PRE>" + NL + "<HR>"},
+- {BUG_ID + FS + "pkg1" + FS + "C2.html", "<PRE>" +NL + "public <STRONG>" +
+- "C2</STRONG>()</PRE>" + NL + "<HR>"},
+- {BUG_ID + FS + "pkg1" + FS + "C1.ModalExclusionType.html", "<PRE>" + NL +
+- "public static final " +
+- "<A HREF=\"../pkg1/C1.ModalExclusionType.html\" " +
+- "title=\"enum in pkg1\">C1.ModalExclusionType</A> <STRONG>" +
+- "APPLICATION_EXCLUDE</STRONG></PRE>" + NL + "<HR>"},
+- {BUG_ID + FS + "serialized-form.html", "<PRE>" + NL + "boolean <STRONG>" +
+- "undecorated</STRONG></PRE>" + NL + "<DL>" + NL + "<DD><STRONG>" +
+- "Deprecated.</STRONG>&nbsp;<I>As of JDK version 1.5, replaced by" + NL +
+- " <A HREF=\"pkg1/C1.html#setUndecorated(boolean)\"><CODE>" +
+- "setUndecorated(boolean)</CODE></A>.</I></DD></DL>"},
+- {BUG_ID + FS + "serialized-form.html", "<DL>" + NL + "<DD><STRONG>" +
+- "Deprecated.</STRONG>&nbsp;<I>As of JDK version" +
++ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<pre>public&nbsp;void&nbsp;readObject()" + NL +
++ " throws java.io.IOException</pre>" + NL + "</li>"},
++ {BUG_ID + FS + "pkg1" + FS + "C2.html", "<pre>public&nbsp;C2()</pre>" + NL +
++ "</li>"},
++ {BUG_ID + FS + "pkg1" + FS + "C1.ModalExclusionType.html", "<pre>public " +
++ "static final&nbsp;<a href=\"../pkg1/C1.ModalExclusionType.html\" " +
++ "title=\"enum in pkg1\">C1.ModalExclusionType</a> " +
++ "APPLICATION_EXCLUDE</pre>" + NL + "</li>"},
++ {BUG_ID + FS + "serialized-form.html", "<pre>boolean " +
++ "undecorated</pre>" + NL + "<div class=\"block\"><span class=\"strong\">" +
++ "Deprecated.</span>&nbsp;<i>As of JDK version 1.5, replaced by" + NL +
++ " <a href=\"pkg1/C1.html#setUndecorated(boolean)\"><code>" +
++ "setUndecorated(boolean)</code></a>.</i></div>" + NL + "</li>"},
++ {BUG_ID + FS + "serialized-form.html", "<span class=\"strong\">" +
++ "Deprecated.</span>&nbsp;<i>As of JDK version" +
+ " 1.5, replaced by" + NL +
+- " <A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
+- "<CODE>setUndecorated(boolean)</CODE></A>.</I>" + NL + "<P>" + NL +
+- "</DD></DL>"},
+- {BUG_ID + FS + "serialized-form.html", "<PRE>" + NL + "int <STRONG>" +
+- "publicKey</STRONG></PRE>" + NL + "<DL>" + NL + "<DD><STRONG>" +
+- "Deprecated.</STRONG>&nbsp;</DD></DL>"}};
++ " <a href=\"pkg1/C1.html#setUndecorated(boolean)\">" +
++ "<code>setUndecorated(boolean)</code></a>.</i></div>" + NL + "</li>"}};
+
+ // Test for valid HTML generation which should not comprise of empty
+ // definition list tags.
+ private static final String[][] NEGATED_TEST = {
+- {BUG_ID + FS + "pkg1" + FS + "C1.html", "<DL></DL>"},
+- {BUG_ID + FS + "pkg1" + FS + "C1.html", "<DL>" + NL + "</DL>"},
+- {BUG_ID + FS + "pkg1" + FS + "C1.ModalExclusionType.html", "<DL></DL>"},
+- {BUG_ID + FS + "pkg1" + FS + "C1.ModalExclusionType.html", "<DL>" + NL + "</DL>"},
+- {BUG_ID + FS + "pkg1" + FS + "C2.html", "<DL></DL>"},
+- {BUG_ID + FS + "pkg1" + FS + "C2.html", "<DL>" + NL + "</DL>"},
+- {BUG_ID + FS + "pkg1" + FS + "C2.ModalType.html", "<DL></DL>"},
+- {BUG_ID + FS + "pkg1" + FS + "C2.ModalType.html", "<DL>" + NL + "</DL>"},
+- {BUG_ID + FS + "pkg1" + FS + "C3.html", "<DL></DL>"},
+- {BUG_ID + FS + "pkg1" + FS + "C3.html", "<DL>" + NL + "</DL>"},
+- {BUG_ID + FS + "pkg1" + FS + "C4.html", "<DL></DL>"},
+- {BUG_ID + FS + "pkg1" + FS + "C4.html", "<DL>" + NL + "</DL>"},
+- {BUG_ID + FS + "pkg1" + FS + "C5.html", "<DL></DL>"},
+- {BUG_ID + FS + "pkg1" + FS + "C5.html", "<DL>" + NL + "</DL>"},
+- {BUG_ID + FS + "overview-tree.html", "<DL></DL>"},
+- {BUG_ID + FS + "overview-tree.html", "<DL>" + NL + "</DL>"},
+- {BUG_ID + FS + "serialized-form.html", "<DL></DL>"},
+- {BUG_ID + FS + "serialized-form.html", "<DL>" + NL + "</DL>"}};
++ {BUG_ID + FS + "pkg1" + FS + "package-summary.html", "<dl></dl>"},
++ {BUG_ID + FS + "pkg1" + FS + "package-summary.html", "<dl>" + NL + "</dl>"},
++ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<dl></dl>"},
++ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<dl>" + NL + "</dl>"},
++ {BUG_ID + FS + "pkg1" + FS + "C1.ModalExclusionType.html", "<dl></dl>"},
++ {BUG_ID + FS + "pkg1" + FS + "C1.ModalExclusionType.html", "<dl>" + NL + "</dl>"},
++ {BUG_ID + FS + "pkg1" + FS + "C2.html", "<dl></dl>"},
++ {BUG_ID + FS + "pkg1" + FS + "C2.html", "<dl>" + NL + "</dl>"},
++ {BUG_ID + FS + "pkg1" + FS + "C2.ModalType.html", "<dl></dl>"},
++ {BUG_ID + FS + "pkg1" + FS + "C2.ModalType.html", "<dl>" + NL + "</dl>"},
++ {BUG_ID + FS + "pkg1" + FS + "C3.html", "<dl></dl>"},
++ {BUG_ID + FS + "pkg1" + FS + "C3.html", "<dl>" + NL + "</dl>"},
++ {BUG_ID + FS + "pkg1" + FS + "C4.html", "<dl></dl>"},
++ {BUG_ID + FS + "pkg1" + FS + "C4.html", "<dl>" + NL + "</dl>"},
++ {BUG_ID + FS + "pkg1" + FS + "C5.html", "<dl></dl>"},
++ {BUG_ID + FS + "pkg1" + FS + "C5.html", "<dl>" + NL + "</dl>"},
++ {BUG_ID + FS + "overview-tree.html", "<dl></dl>"},
++ {BUG_ID + FS + "overview-tree.html", "<dl>" + NL + "</dl>"},
++ {BUG_ID + FS + "serialized-form.html", "<dl></dl>"},
++ {BUG_ID + FS + "serialized-form.html", "<dl>" + NL + "</dl>"}};
+
+ private static final String[] ARGS1 =
+ new String[] {
+@@ -346,7 +245,7 @@
+ run(tester, ARGS1, TEST_ALL, NEGATED_TEST);
+ run(tester, ARGS1, TEST_CMNT_DEPR, NEGATED_TEST);
+ run(tester, ARGS2, TEST_ALL, NEGATED_TEST);
+- run(tester, ARGS2, TEST_NOCMNT, TEST_CMNT_DEPR);
++ run(tester, ARGS2, NO_TEST, TEST_CMNT_DEPR);
+ run(tester, ARGS3, TEST_ALL, NEGATED_TEST);
+ run(tester, ARGS3, TEST_NODEPR, TEST_NOCMNT_NODEPR);
+ run(tester, ARGS4, TEST_ALL, NEGATED_TEST);
+diff --git a/test/com/sun/javadoc/testHtmlDocument/TestHtmlDocument.java b/test/com/sun/javadoc/testHtmlDocument/TestHtmlDocument.java
+new file mode 100644
+--- /dev/null
++++ langtools/test/com/sun/javadoc/testHtmlDocument/TestHtmlDocument.java
+@@ -0,0 +1,155 @@
++/*
++ * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
++ *
++ * This code is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License version 2 only, as
++ * published by the Free Software Foundation. Oracle designates this
++ * particular file as subject to the "Classpath" exception as provided
++ * by Oracle in the LICENSE file that accompanied this code.
++ *
++ * This code is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ * version 2 for more details (a copy is included in the LICENSE file that
++ * accompanied this code).
++ *
++ * You should have received a copy of the GNU General Public License version
++ * 2 along with this work; if not, write to the Free Software Foundation,
++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
++ *
++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
++ * or visit www.oracle.com if you need additional information or have any
++ * questions.
++ */
++
++/*
++ * @test
++ * @bug 6851834
++ * @summary This test verifies the HTML document generation for javadoc output.
++ * @author Bhavesh Patel
++ * @build TestHtmlDocument
++ * @run main TestHtmlDocument
++ */
++
++import java.io.*;
++import com.sun.tools.doclets.formats.html.markup.*;
++
++/**
++ * The class reads each file, complete with newlines, into a string to easily
++ * compare the existing markup with the generated markup.
++ */
++public class TestHtmlDocument {
++
++ private static final String BUGID = "6851834";
++ private static final String BUGNAME = "TestHtmlDocument";
++ private static final String FS = System.getProperty("file.separator");
++ private static String srcdir = System.getProperty("test.src", ".");
++
++ // Entry point
++ public static void main(String[] args) throws IOException {
++ // Check whether the generated markup is same as the existing markup.
++ if (generateHtmlTree().equals(readFileToString(srcdir + FS + "testMarkup.html"))) {
++ System.out.println("\nTest passed for bug " + BUGID + " (" + BUGNAME + ")\n");
++ } else {
++ throw new Error("\nTest failed for bug " + BUGID + " (" + BUGNAME + ")\n");
++ }
++ }
++
++ // Generate the HTML output using the HTML document generation within doclet.
++ public static String generateHtmlTree() {
++ // Document type for the HTML document
++ DocType htmlDocType = DocType.Transitional();
++ HtmlTree html = new HtmlTree(HtmlTag.HTML);
++ HtmlTree head = new HtmlTree(HtmlTag.HEAD);
++ HtmlTree title = new HtmlTree(HtmlTag.TITLE);
++ // String content within the document
++ StringContent titleContent = new StringContent("Markup test");
++ title.addContent(titleContent);
++ head.addContent(title);
++ // Test META tag
++ HtmlTree meta = new HtmlTree(HtmlTag.META);
++ meta.addAttr(HtmlAttr.NAME, "keywords");
++ meta.addAttr(HtmlAttr.CONTENT, "testContent");
++ head.addContent(meta);
++ // Test invalid META tag
++ HtmlTree invmeta = new HtmlTree(HtmlTag.META);
++ head.addContent(invmeta);
++ // Test LINK tag
++ HtmlTree link = new HtmlTree(HtmlTag.LINK);
++ link.addAttr(HtmlAttr.REL, "testRel");
++ link.addAttr(HtmlAttr.HREF, "testLink.html");
++ head.addContent(link);
++ // Test invalid LINK tag
++ HtmlTree invlink = new HtmlTree(HtmlTag.LINK);
++ head.addContent(invlink);
++ html.addContent(head);
++ // Comment within the document
++ Comment bodyMarker = new Comment("======== START OF BODY ========");
++ html.addContent(bodyMarker);
++ HtmlTree body = new HtmlTree(HtmlTag.BODY);
++ Comment pMarker = new Comment("======== START OF PARAGRAPH ========");
++ body.addContent(pMarker);
++ HtmlTree p = new HtmlTree(HtmlTag.P);
++ StringContent bodyContent = new StringContent(
++ "This document is generated from sample source code and HTML " +
++ "files with examples of a wide variety of Java language constructs: packages, " +
++ "subclasses, subinterfaces, nested classes, nested interfaces," +
++ "inheriting from other packages, constructors, fields," +
++ "methods, and so forth. ");
++ p.addContent(bodyContent);
++ StringContent anchorContent = new StringContent("Click Here");
++ p.addContent(HtmlTree.A("testLink.html", anchorContent));
++ StringContent pContent = new StringContent(" to <test> out a link.");
++ p.addContent(pContent);
++ body.addContent(p);
++ HtmlTree p1 = new HtmlTree(HtmlTag.P);
++ // Test another version of A tag.
++ HtmlTree anchor = new HtmlTree(HtmlTag.A);
++ anchor.addAttr(HtmlAttr.HREF, "testLink.html");
++ anchor.addAttr(HtmlAttr.NAME, "Another version of a tag");
++ p1.addContent(anchor);
++ body.addContent(p1);
++ // Test for empty tags.
++ HtmlTree dl = new HtmlTree(HtmlTag.DL);
++ html.addContent(dl);
++ // Test for empty nested tags.
++ HtmlTree dlTree = new HtmlTree(HtmlTag.DL);
++ dlTree.addContent(new HtmlTree(HtmlTag.DT));
++ dlTree.addContent(new HtmlTree (HtmlTag.DD));
++ html.addContent(dlTree);
++ HtmlTree dlDisplay = new HtmlTree(HtmlTag.DL);
++ dlDisplay.addContent(new HtmlTree(HtmlTag.DT));
++ HtmlTree dd = new HtmlTree (HtmlTag.DD);
++ StringContent ddContent = new StringContent("Test DD");
++ dd.addContent(ddContent);
++ dlDisplay.addContent(dd);
++ body.addContent(dlDisplay);
++ StringContent emptyString = new StringContent("");
++ body.addContent(emptyString);
++ Comment emptyComment = new Comment("");
++ body.addContent(emptyComment);
++ HtmlTree hr = new HtmlTree(HtmlTag.HR);
++ body.addContent(hr);
++ html.addContent(body);
++ HtmlDocument htmlDoc = new HtmlDocument(htmlDocType, html);
++ return htmlDoc.toString();
++ }
++
++ // Read the file into a String
++ public static String readFileToString(String filename) throws IOException {
++ File file = new File(filename);
++ if ( !file.exists() ) {
++ System.out.println("\nFILE DOES NOT EXIST: " + filename);
++ }
++ BufferedReader in = new BufferedReader(new FileReader(file));
++ // Create an array of characters the size of the file
++ char[] allChars = new char[(int)file.length()];
++ // Read the characters into the allChars array
++ in.read(allChars, 0, (int)file.length());
++ in.close();
++ // Convert to a string
++ String allCharsString = new String(allChars);
++ return allCharsString;
++ }
++}
+diff --git a/test/com/sun/javadoc/testHtmlDocument/testLink.html b/test/com/sun/javadoc/testHtmlDocument/testLink.html
+new file mode 100644
+--- /dev/null
++++ langtools/test/com/sun/javadoc/testHtmlDocument/testLink.html
+@@ -0,0 +1,9 @@
++<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
++<html>
++<head>
++<title>Markup test</title>
++</head>
++<body>
++This is a test for link.
++</body>
++</html>
+diff --git a/test/com/sun/javadoc/testHtmlDocument/testMarkup.html b/test/com/sun/javadoc/testHtmlDocument/testMarkup.html
+new file mode 100644
+--- /dev/null
++++ langtools/test/com/sun/javadoc/testHtmlDocument/testMarkup.html
+@@ -0,0 +1,18 @@
++<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
++<html>
++<head>
++<title>Markup test</title>
++<meta name="keywords" content="testContent">
++<link rel="testRel" href="testLink.html">
++</head>
++<!-- ======== START OF BODY ======== -->
++<body>
++<!-- ======== START OF PARAGRAPH ======== -->
++<p>This document is generated from sample source code and HTML files with examples of a wide variety of Java language constructs: packages, subclasses, subinterfaces, nested classes, nested interfaces,inheriting from other packages, constructors, fields,methods, and so forth. <a href="testLink.html">Click Here</a> to &lt;test&gt; out a link.</p>
++<p><a href="testLink.html" name="Another version of a tag"></a></p>
++<dl>
++<dd>Test DD</dd>
++</dl>
++<hr>
++</body>
++</html>
+diff --git a/test/com/sun/javadoc/testHtmlStrongTag/TestHtmlStrongTag.java b/test/com/sun/javadoc/testHtmlStrongTag/TestHtmlStrongTag.java
+--- langtools/test/com/sun/javadoc/testHtmlStrongTag/TestHtmlStrongTag.java
++++ langtools/test/com/sun/javadoc/testHtmlStrongTag/TestHtmlStrongTag.java
+@@ -38,7 +38,7 @@
+
+ private static final String BUG_ID = "6786028";
+ private static final String[][] TEST1 = {
+- {BUG_ID + FS + "pkg1" + FS + "C1.html", "<STRONG>See Also:</STRONG>"}};
++ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<span class=\"strong\">See Also:</span>"}};
+ private static final String[][] NEGATED_TEST1 = {
+ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<STRONG>Method Summary</STRONG>"},
+ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<B>"},
+diff --git a/test/com/sun/javadoc/testHtmlTableTags/TestHtmlTableTags.java b/test/com/sun/javadoc/testHtmlTableTags/TestHtmlTableTags.java
+--- langtools/test/com/sun/javadoc/testHtmlTableTags/TestHtmlTableTags.java
++++ langtools/test/com/sun/javadoc/testHtmlTableTags/TestHtmlTableTags.java
+@@ -50,139 +50,128 @@
+
+ //Package summary
+ {BUG_ID + FS + "pkg1" + FS + "package-summary.html",
+- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
+- "CELLSPACING=\"0\" SUMMARY=\"Class Summary table, " +
++ "<table class=\"packageSummary\" border=\"0\" cellpadding=\"3\"" +
++ " cellspacing=\"0\" summary=\"Class Summary table, " +
+ "listing classes, and an explanation\">"
+ },
+ {BUG_ID + FS + "pkg1" + FS + "package-summary.html",
+- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
+- "CELLSPACING=\"0\" SUMMARY=\"Interface Summary table, " +
++ "<table class=\"packageSummary\" border=\"0\" cellpadding=\"3\"" +
++ " cellspacing=\"0\" summary=\"Interface Summary table, " +
+ "listing interfaces, and an explanation\">"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "package-summary.html",
+- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
+- "CELLSPACING=\"0\" SUMMARY=\"Enum Summary table, " +
++ "<table class=\"packageSummary\" border=\"0\" cellpadding=\"3\"" +
++ " cellspacing=\"0\" summary=\"Enum Summary table, " +
+ "listing enums, and an explanation\">"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "package-summary.html",
+- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
+- "CELLSPACING=\"0\" SUMMARY=\"Annotation Types Summary table, " +
++ "<table class=\"packageSummary\" border=\"0\" cellpadding=\"3\"" +
++ " cellspacing=\"0\" summary=\"Annotation Types Summary table, " +
+ "listing annotation types, and an explanation\">"
+ },
+ // Class documentation
+ {BUG_ID + FS + "pkg1" + FS + "C1.html",
+- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
+- "CELLSPACING=\"0\" SUMMARY=\"Field Summary table, " +
+- "listing fields, and an explanation\">"
++ "<table class=\"overviewSummary\" border=\"0\" cellpadding=\"3\" " +
++ "cellspacing=\"0\" summary=\"Field Summary table, listing fields, " +
++ "and an explanation\">"
+ },
+ {BUG_ID + FS + "pkg1" + FS + "C1.html",
+- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
+- "CELLSPACING=\"0\" SUMMARY=\"Method Summary table, " +
+- "listing methods, and an explanation\">"
++ "<table class=\"overviewSummary\" border=\"0\" cellpadding=\"3\" " +
++ "cellspacing=\"0\" summary=\"Method Summary table, listing methods, " +
++ "and an explanation\">"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "C2.html",
+- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
+- "CELLSPACING=\"0\" SUMMARY=\"Nested Class Summary table, " +
+- "listing nested classes, and an explanation\">"
++ "<table class=\"overviewSummary\" border=\"0\" cellpadding=\"3\" " +
++ "cellspacing=\"0\" summary=\"Nested Class Summary table, listing " +
++ "nested classes, and an explanation\">"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "C2.html",
+- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
+- "CELLSPACING=\"0\" SUMMARY=\"Constructor Summary table, " +
+- "listing constructors, and an explanation\">"
++ "<table class=\"overviewSummary\" border=\"0\" cellpadding=\"3\" " +
++ "cellspacing=\"0\" summary=\"Constructor Summary table, listing " +
++ "constructors, and an explanation\">"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "C2.ModalExclusionType.html",
+- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
+- "CELLSPACING=\"0\" SUMMARY=\"Enum Constant Summary table, " +
+- "listing enum constants, and an explanation\">"
++ "<table class=\"overviewSummary\" border=\"0\" cellpadding=\"3\" " +
++ "cellspacing=\"0\" summary=\"Enum Constant Summary table, listing " +
++ "enum constants, and an explanation\">"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "C3.html",
+- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
+- "CELLSPACING=\"0\" SUMMARY=\"Required Element Summary table, " +
++ "<table class=\"overviewSummary\" border=\"0\" cellpadding=\"3\" " +
++ "cellspacing=\"0\" summary=\"Required Element Summary table, " +
+ "listing required elements, and an explanation\">"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "C4.html",
+- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
+- "CELLSPACING=\"0\" SUMMARY=\"Optional Element Summary table, " +
++ "<table class=\"overviewSummary\" border=\"0\" cellpadding=\"3\" " +
++ "cellspacing=\"0\" summary=\"Optional Element Summary table, " +
+ "listing optional elements, and an explanation\">"
+ },
+ // Class use documentation
+ {BUG_ID + FS + "pkg1" + FS + "class-use" + FS + "I1.html",
+- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
+- "CELLSPACING=\"0\" SUMMARY=\"Use table, " +
+- "listing packages, and an explanation\">"
++ "<table border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
++ "table, listing packages, and an explanation\">"
+ },
+ {BUG_ID + FS + "pkg1" + FS + "class-use" + FS + "C1.html",
+- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
+- "CELLSPACING=\"0\" SUMMARY=\"Use table, " +
+- "listing fields, and an explanation\">"
++ "<table border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
++ "table, listing fields, and an explanation\">"
+ },
+ {BUG_ID + FS + "pkg1" + FS + "class-use" + FS + "C1.html",
+- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
+- "CELLSPACING=\"0\" SUMMARY=\"Use table, " +
+- "listing methods, and an explanation\">"
++ "<table border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
++ "table, listing methods, and an explanation\">"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "C2.html",
+- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
+- "CELLSPACING=\"0\" SUMMARY=\"Use table, " +
+- "listing fields, and an explanation\">"
++ "<table border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
++ "table, listing fields, and an explanation\">"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "C2.html",
+- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
+- "CELLSPACING=\"0\" SUMMARY=\"Use table, " +
+- "listing methods, and an explanation\">"
++ "<table border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
++ "table, listing methods, and an explanation\">"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "C2.ModalExclusionType.html",
+- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
+- "CELLSPACING=\"0\" SUMMARY=\"Use table, " +
+- "listing packages, and an explanation\">"
++ "<table border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
++ "table, listing packages, and an explanation\">"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "C2.ModalExclusionType.html",
+- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
+- "CELLSPACING=\"0\" SUMMARY=\"Use table, " +
+- "listing methods, and an explanation\">"
++ "<table border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
++ "table, listing methods, and an explanation\">"
+ },
+ // Package use documentation
+ {BUG_ID + FS + "pkg1" + FS + "package-use.html",
+- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
+- "CELLSPACING=\"0\" SUMMARY=\"Use table, " +
+- "listing packages, and an explanation\">"
++ "<table border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
++ "table, listing packages, and an explanation\">"
+ },
+ {BUG_ID + FS + "pkg1" + FS + "package-use.html",
+- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
+- "CELLSPACING=\"0\" SUMMARY=\"Use table, " +
+- "listing classes, and an explanation\">"
++ "<table border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
++ "table, listing classes, and an explanation\">"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "package-use.html",
+- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
+- "CELLSPACING=\"0\" SUMMARY=\"Use table, " +
+- "listing packages, and an explanation\">"
++ "<table border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
++ "table, listing packages, and an explanation\">"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "package-use.html",
+- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
+- "CELLSPACING=\"0\" SUMMARY=\"Use table, " +
+- "listing classes, and an explanation\">"
++ "<table border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
++ "table, listing classes, and an explanation\">"
+ },
+ // Deprecated
+ {BUG_ID + FS + "deprecated-list.html",
+- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
+- "CELLSPACING=\"0\" SUMMARY=\"Deprecated Fields table, " +
+- "listing deprecated fields, and an explanation\">"
++ "<table border=\"0\" cellpadding=\"3\" cellspacing=\"0\" " +
++ "summary=\"Deprecated Fields table, listing deprecated fields, " +
++ "and an explanation\">"
+ },
+ {BUG_ID + FS + "deprecated-list.html",
+- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
+- "CELLSPACING=\"0\" SUMMARY=\"Deprecated Methods table, " +
+- "listing deprecated methods, and an explanation\">"
++ "<table border=\"0\" cellpadding=\"3\" cellspacing=\"0\" " +
++ "summary=\"Deprecated Methods table, listing deprecated methods, " +
++ "and an explanation\">"
+ },
+ // Constant values
+ {BUG_ID + FS + "constant-values.html",
+- "<TABLE BORDER=\"1\" CELLPADDING=\"3\" CELLSPACING=\"0\" " +
+- "SUMMARY=\"Constant Field Values table, listing " +
++ "<table border=\"0\" cellpadding=\"3\" cellspacing=\"0\" " +
++ "summary=\"Constant Field Values table, listing " +
+ "constant fields, and values\">"
+ },
+ // Overview Summary
+ {BUG_ID + FS + "overview-summary.html",
+- "<TABLE BORDER=\"1\" WIDTH=\"100%\" CELLPADDING=\"3\" " +
+- "CELLSPACING=\"0\" SUMMARY=\"Packages table, " +
++ "<table class=\"overviewSummary\" border=\"0\" cellpadding=\"3\" " +
++ "cellspacing=\"0\" summary=\"Packages table, " +
+ "listing packages, and an explanation\">"
+ },
+
+@@ -192,125 +181,117 @@
+
+ //Package summary
+ {BUG_ID + FS + "pkg1" + FS + "package-summary.html",
+- "<CAPTION CLASS=\"TableCaption\">" + NL +
+- "Class Summary</CAPTION>"
++ "<caption><span>Class Summary</span><span class=\"tabEnd\">" +
++ "&nbsp;</span></caption>"
+ },
+ {BUG_ID + FS + "pkg1" + FS + "package-summary.html",
+- "<CAPTION CLASS=\"TableCaption\">" + NL +
+- "Interface Summary</CAPTION>"
++ "<caption><span>Interface Summary</span><span class=\"tabEnd\">" +
++ "&nbsp;</span></caption>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "package-summary.html",
+- "<CAPTION CLASS=\"TableCaption\">" + NL +
+- "Enum Summary</CAPTION>"
++ "<caption><span>Enum Summary</span><span class=\"tabEnd\">" +
++ "&nbsp;</span></caption>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "package-summary.html",
+- "<CAPTION CLASS=\"TableCaption\">" + NL +
+- "Annotation Types Summary</CAPTION>"
++ "<caption><span>Annotation Types Summary</span><span class=\"tabEnd\">" +
++ "&nbsp;</span></caption>"
+ },
+ // Class documentation
+ {BUG_ID + FS + "pkg1" + FS + "C1.html",
+- "<CAPTION CLASS=\"TableCaption\">" + NL +
+- "Field Summary</CAPTION>"
++ "<caption><span>Fields</span><span class=\"tabEnd\">&nbsp;</span></caption>"
+ },
+ {BUG_ID + FS + "pkg1" + FS + "C1.html",
+- "<CAPTION CLASS=\"TableCaption\">" + NL +
+- "Method Summary</CAPTION>"
++ "<caption><span>Methods</span><span class=\"tabEnd\">&nbsp;</span></caption>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "C2.html",
+- "<CAPTION CLASS=\"TableCaption\">" + NL +
+- "Nested Class Summary</CAPTION>"
++ "<caption><span>Nested Classes</span><span class=\"tabEnd\">&nbsp;</span></caption>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "C2.html",
+- "<CAPTION CLASS=\"TableCaption\">" + NL +
+- "Constructor Summary</CAPTION>"
++ "<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "C2.ModalExclusionType.html",
+- "<CAPTION CLASS=\"TableCaption\">" + NL +
+- "Enum Constant Summary</CAPTION>"
++ "<caption><span>Enum Constants</span><span class=\"tabEnd\">&nbsp;</span></caption>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "C3.html",
+- "<CAPTION CLASS=\"TableCaption\">" + NL +
+- "Required Element Summary</CAPTION>"
++ "<caption><span>Required Elements</span><span class=\"tabEnd\">&nbsp;" +
++ "</span></caption>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "C4.html",
+- "<CAPTION CLASS=\"TableCaption\">" + NL +
+- "Optional Element Summary</CAPTION>"
++ "<caption><span>Optional Elements</span><span class=\"tabEnd\">&nbsp;" +
++ "</span></caption>"
+ },
+ // Class use documentation
+ {BUG_ID + FS + "pkg1" + FS + "class-use" + FS + "I1.html",
+- "<CAPTION CLASS=\"TableCaption\">" + NL +
+- "Packages that use <A HREF=\"../../pkg1/I1.html\" " +
+- "title=\"interface in pkg1\">I1</A></CAPTION>"
++ "<caption><span>Packages that use <a href=\"../../pkg1/I1.html\" " +
++ "title=\"interface in pkg1\">I1</a></span><span class=\"tabEnd\">" +
++ "&nbsp;</span></caption>"
+ },
+ {BUG_ID + FS + "pkg1" + FS + "class-use" + FS + "C1.html",
+- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
+- "Fields in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> " +
+- "declared as <A HREF=\"../../pkg1/C1.html\" title=\"class in pkg1\">" +
+- "C1</A></CAPTION>"
++ "<caption><span>Fields in <a href=\"../../pkg2/package-summary.html\">" +
++ "pkg2</a> declared as <a href=\"../../pkg1/C1.html\" " +
++ "title=\"class in pkg1\">C1</a></span><span class=\"tabEnd\">&nbsp;" +
++ "</span></caption>"
+ },
+ {BUG_ID + FS + "pkg1" + FS + "class-use" + FS + "C1.html",
+- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
+- "Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> " +
+- "with parameters of type <A HREF=\"../../pkg1/C1.html\" " +
+- "title=\"class in pkg1\">C1</A></CAPTION>"
++ "<caption><span>Methods in <a href=\"../../pkg2/package-summary.html\">" +
++ "pkg2</a> that return <a href=\"../../pkg1/C1.html\" " +
++ "title=\"class in pkg1\">C1</a></span><span class=\"tabEnd\">" +
++ "&nbsp;</span></caption>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "C2.html",
+- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
+- "Fields in <A HREF=\"../../pkg1/package-summary.html\">pkg1</A> " +
+- "declared as <A HREF=\"../../pkg2/C2.html\" title=\"class in pkg2\">" +
+- "C2</A></CAPTION>"
++ "<caption><span>Fields in <a href=\"../../pkg1/package-summary.html\">" +
++ "pkg1</a> declared as <a href=\"../../pkg2/C2.html\" " +
++ "title=\"class in pkg2\">C2</a></span><span class=\"tabEnd\">" +
++ "&nbsp;</span></caption>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "C2.html",
+- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
+- "Methods in <A HREF=\"../../pkg1/package-summary.html\">pkg1</A> " +
+- "with parameters of type <A HREF=\"../../pkg2/C2.html\" " +
+- "title=\"class in pkg2\">C2</A></CAPTION>"
++ "<caption><span>Methods in <a href=\"../../pkg1/package-summary.html\">" +
++ "pkg1</a> that return <a href=\"../../pkg2/C2.html\" " +
++ "title=\"class in pkg2\">C2</a></span><span class=\"tabEnd\">" +
++ "&nbsp;</span></caption>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "C2.ModalExclusionType.html",
+- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
+- "Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2</A> " +
+- "that return <A HREF=\"../../pkg2/C2.ModalExclusionType.html\" " +
+- "title=\"enum in pkg2\">C2.ModalExclusionType</A></CAPTION>"
++ "<caption><span>Methods in <a href=\"../../pkg2/package-summary.html\">" +
++ "pkg2</a> that return <a href=\"../../pkg2/C2.ModalExclusionType.html\" " +
++ "title=\"enum in pkg2\">C2.ModalExclusionType</a></span>" +
++ "<span class=\"tabEnd\">&nbsp;</span></caption>"
+ },
+ // Package use documentation
+ {BUG_ID + FS + "pkg1" + FS + "package-use.html",
+- "<CAPTION CLASS=\"TableCaption\">" + NL +
+- "Packages that use <A HREF=\"../pkg1/package-summary.html\">" +
+- "pkg1</A></CAPTION>"
++ "<caption><span>Packages that use <a href=\"../pkg1/package-summary.html\">" +
++ "pkg1</a></span><span class=\"tabEnd\">&nbsp;</span></caption>"
+ },
+ {BUG_ID + FS + "pkg1" + FS + "package-use.html",
+- "<CAPTION CLASS=\"TableCaption\">" + NL +
+- "Classes in <A HREF=\"../pkg1/package-summary.html\">pkg1</A> " +
+- "used by <A HREF=\"../pkg1/package-summary.html\">pkg1</A></CAPTION>"
++ "<caption><span>Classes in <a href=\"../pkg1/package-summary.html\">" +
++ "pkg1</a> used by <a href=\"../pkg1/package-summary.html\">pkg1</a>" +
++ "</span><span class=\"tabEnd\">&nbsp;</span></caption>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "package-use.html",
+- "<CAPTION CLASS=\"TableCaption\">" + NL +
+- "Packages that use <A HREF=\"../pkg2/package-summary.html\">" +
+- "pkg2</A></CAPTION>"
++ "<caption><span>Packages that use <a href=\"../pkg2/package-summary.html\">" +
++ "pkg2</a></span><span class=\"tabEnd\">&nbsp;</span></caption>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "package-use.html",
+- "<CAPTION CLASS=\"TableCaption\">" + NL +
+- "Classes in <A HREF=\"../pkg2/package-summary.html\">pkg2</A> " +
+- "used by <A HREF=\"../pkg1/package-summary.html\">pkg1</A></CAPTION>"
++ "<caption><span>Classes in <a href=\"../pkg2/package-summary.html\">" +
++ "pkg2</a> used by <a href=\"../pkg1/package-summary.html\">pkg1</a>" +
++ "</span><span class=\"tabEnd\">&nbsp;</span></caption>"
+ },
+ // Deprecated
+ {BUG_ID + FS + "deprecated-list.html",
+- "<CAPTION CLASS=\"TableCaption\">" + NL +
+- "Deprecated Fields</CAPTION>"
++ "<caption><span>Deprecated Fields</span><span class=\"tabEnd\">" +
++ "&nbsp;</span></caption>"
+ },
+ {BUG_ID + FS + "deprecated-list.html",
+- "<CAPTION CLASS=\"TableCaption\">" + NL +
+- "Deprecated Methods</CAPTION>"
++ "<caption><span>Deprecated Methods</span><span class=\"tabEnd\">" +
++ "&nbsp;</span></caption>"
+ },
+ // Constant values
+ {BUG_ID + FS + "constant-values.html",
+- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
+- "pkg1.<A HREF=\"pkg1/C1.html\" title=\"class in pkg1\">C1</A></CAPTION>"
++ "<caption><span>pkg1.<a href=\"pkg1/C1.html\" title=\"class in pkg1\">" +
++ "C1</a></span><span class=\"tabEnd\">&nbsp;</span></caption>"
+ },
+ // Overview Summary
+ {BUG_ID + FS + "overview-summary.html",
+- "<CAPTION CLASS=\"TableCaption\">" + NL +
+- "Packages</CAPTION>"
++ "<caption><span>Packages</span><span class=\"tabEnd\">&nbsp;</span></caption>"
+ },
+
+ /*
+@@ -319,135 +300,115 @@
+
+ //Package summary
+ {BUG_ID + FS + "pkg1" + FS + "package-summary.html",
+- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
+- "Class</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
+- " NOWRAP>Description</TH>"
++ "<th class=\"colFirst\" scope=\"col\">" +
++ "Class</th>" + NL + "<th class=\"colLast\" scope=\"col\"" +
++ ">Description</th>"
+ },
+ {BUG_ID + FS + "pkg1" + FS + "package-summary.html",
+- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
+- "Interface</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
+- " NOWRAP>Description</TH>"
++ "<th class=\"colFirst\" scope=\"col\">" +
++ "Interface</th>" + NL + "<th class=\"colLast\" scope=\"col\"" +
++ ">Description</th>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "package-summary.html",
+- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
+- "Enum</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
+- " NOWRAP>Description</TH>"
++ "<th class=\"colFirst\" scope=\"col\">" +
++ "Enum</th>" + NL + "<th class=\"colLast\" scope=\"col\"" +
++ ">Description</th>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "package-summary.html",
+- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
+- "Annotation Type</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
+- " SCOPE=\"col\" NOWRAP>Description</TH>"
++ "<th class=\"colFirst\" scope=\"col\">" +
++ "Annotation Type</th>" + NL + "<th class=\"colLast\"" +
++ " scope=\"col\">Description</th>"
+ },
+ // Class documentation
+ {BUG_ID + FS + "pkg1" + FS + "C1.html",
+- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
+- "Modifier and Type</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
+- " SCOPE=\"col\" NOWRAP>Field and Description</TH>"
++ "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>" + NL +
++ "<th class=\"colLast\" scope=\"col\">Field and Description</th>"
+ },
+ {BUG_ID + FS + "pkg1" + FS + "C1.html",
+- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
+- "Modifier and Type</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
+- " SCOPE=\"col\" NOWRAP>Method and Description</TH>"
++ "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>" + NL +
++ "<th class=\"colLast\" scope=\"col\">Method and Description</th>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "C2.html",
+- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
+- "Modifier and Type</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
+- " SCOPE=\"col\" NOWRAP>Class and Description</TH>"
++ "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>" + NL +
++ "<th class=\"colLast\" scope=\"col\">Class and Description</th>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "C2.html",
+- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
+- "Constructor and Description</TH>"
++ "<th class=\"colOne\" scope=\"col\">Constructor and Description</th>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "C2.ModalExclusionType.html",
+- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
+- "Enum Constant and Description</TH>"
++ "<th class=\"colOne\" scope=\"col\">Enum Constant and Description</th>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "C3.html",
+- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
+- "Modifier and Type</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
+- " SCOPE=\"col\" NOWRAP>Required Element and Description</TH>"
++ "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>" + NL +
++ "<th class=\"colLast\" scope=\"col\">Required Element and Description</th>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "C4.html",
+- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
+- "Modifier and Type</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
+- " SCOPE=\"col\" NOWRAP>Optional Element and Description</TH>"
++ "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>" + NL +
++ "<th class=\"colLast\" scope=\"col\">Optional Element and Description</th>"
+ },
+ // Class use documentation
+ {BUG_ID + FS + "pkg1" + FS + "class-use" + FS + "I1.html",
+- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
+- "Package</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
+- " NOWRAP>Description</TH>"
++ "<th class=\"colFirst\" scope=\"col\">Package</th>" + NL +
++ "<th class=\"colLast\" scope=\"col\">Description</th>"
+ },
+ {BUG_ID + FS + "pkg1" + FS + "class-use" + FS + "C1.html",
+- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
+- "Modifier and Type</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
+- " SCOPE=\"col\" NOWRAP>Field and Description</TH>"
++ "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>" + NL +
++ "<th class=\"colLast\" scope=\"col\">Field and Description</th>"
+ },
+ {BUG_ID + FS + "pkg1" + FS + "class-use" + FS + "C1.html",
+- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
+- "Modifier and Type</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
+- " SCOPE=\"col\" NOWRAP>Method and Description</TH>"
++ "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>" + NL +
++ "<th class=\"colLast\" scope=\"col\">Method and Description</th>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "C2.html",
+- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
+- "Modifier and Type</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
+- " SCOPE=\"col\" NOWRAP>Field and Description</TH>"
++ "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>" + NL +
++ "<th class=\"colLast\" scope=\"col\">Field and Description</th>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "C2.html",
+- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
+- "Modifier and Type</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
+- " SCOPE=\"col\" NOWRAP>Method and Description</TH>"
++ "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>" + NL +
++ "<th class=\"colLast\" scope=\"col\">Method and Description</th>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "C2.ModalExclusionType.html",
+- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
+- "Package</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
+- " NOWRAP>Description</TH>"
++ "<th class=\"colFirst\" scope=\"col\">Package</th>" + NL +
++ "<th class=\"colLast\" scope=\"col\">Description</th>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "C2.ModalExclusionType.html",
+- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
+- "Modifier and Type</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
+- " SCOPE=\"col\" NOWRAP>Method and Description</TH>"
++ "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>" + NL +
++ "<th class=\"colLast\" scope=\"col\">Method and Description</th>"
+ },
+ // Package use documentation
+ {BUG_ID + FS + "pkg1" + FS + "package-use.html",
+- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
+- "Package</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
+- " NOWRAP>Description</TH>"
++ "<th class=\"colFirst\" scope=\"col\">Package</th>" + NL +
++ "<th class=\"colLast\" scope=\"col\">Description</th>"
+ },
+ {BUG_ID + FS + "pkg1" + FS + "package-use.html",
+- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
+- "Class and Description</TH>"
++ "<th class=\"colOne\" scope=\"col\">Class and Description</th>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "package-use.html",
+- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
+- "Package</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
+- " NOWRAP>Description</TH>"
++ "<th class=\"colFirst\" scope=\"col\">Package</th>" + NL +
++ "<th class=\"colLast\" scope=\"col\">Description</th>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "package-use.html",
+- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
+- "Class and Description</TH>"
++ "<th class=\"colOne\" scope=\"col\">Class and Description</th>"
+ },
+ // Deprecated
+ {BUG_ID + FS + "deprecated-list.html",
+- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
+- "Field and Description</TH>"
++ "<th class=\"colOne\" scope=\"col\">Field and Description</th>"
+ },
+ {BUG_ID + FS + "deprecated-list.html",
+- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
+- "Method and Description</TH>"
++ "<th class=\"colOne\" scope=\"col\">Method and Description</th>"
+ },
+ // Constant values
+ {BUG_ID + FS + "constant-values.html",
+- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
+- "Modifier and Type</TH>" + NL + "<TH CLASS=\"TableHeader\"" +
+- " SCOPE=\"col\" NOWRAP>Constant Field</TH>" + NL +
+- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>Value</TH>"
++ "<th class=\"colFirst\" scope=\"col\">" +
++ "Modifier and Type</th>" + NL + "<th" +
++ " scope=\"col\">Constant Field</th>" + NL +
++ "<th class=\"colLast\" scope=\"col\">Value</th>"
+ },
+ // Overview Summary
+ {BUG_ID + FS + "overview-summary.html",
+- "<TH CLASS=\"TableHeader\" SCOPE=\"col\" NOWRAP>" +
+- "Package</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
+- " NOWRAP>Description</TH>"
++ "<th class=\"colFirst\" scope=\"col\">" +
++ "Package</th>" + NL + "<th class=\"colLast\" scope=\"col\"" +
++ ">Description</th>"
+ }
+ };
+ private static final String[][] NEGATED_TEST = NO_TEST;
+diff --git a/test/com/sun/javadoc/testHtmlTag/TestHtmlTag.java b/test/com/sun/javadoc/testHtmlTag/TestHtmlTag.java
+--- langtools/test/com/sun/javadoc/testHtmlTag/TestHtmlTag.java
++++ langtools/test/com/sun/javadoc/testHtmlTag/TestHtmlTag.java
+@@ -40,20 +40,20 @@
+
+ private static final String BUG_ID = "6786682";
+ private static final String[][] TEST1 = {
+- {BUG_ID + FS + "pkg1" + FS + "C1.html", "<HTML lang=\"" + Locale.getDefault().getLanguage() + "\">"},
+- {BUG_ID + FS + "pkg1" + FS + "package-summary.html", "<HTML lang=\"" + Locale.getDefault().getLanguage() + "\">"}};
++ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<html lang=\"" + Locale.getDefault().getLanguage() + "\">"},
++ {BUG_ID + FS + "pkg1" + FS + "package-summary.html", "<html lang=\"" + Locale.getDefault().getLanguage() + "\">"}};
+ private static final String[][] NEGATED_TEST1 = {
+- {BUG_ID + FS + "pkg1" + FS + "C1.html", "<HTML>"}};
++ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<html>"}};
+ private static final String[][] TEST2 = {
+- {BUG_ID + FS + "pkg2" + FS + "C2.html", "<HTML lang=\"ja\">"},
+- {BUG_ID + FS + "pkg2" + FS + "package-summary.html", "<HTML lang=\"ja\">"}};
++ {BUG_ID + FS + "pkg2" + FS + "C2.html", "<html lang=\"ja\">"},
++ {BUG_ID + FS + "pkg2" + FS + "package-summary.html", "<html lang=\"ja\">"}};
+ private static final String[][] NEGATED_TEST2 = {
+- {BUG_ID + FS + "pkg2" + FS + "C2.html", "<HTML>"}};
++ {BUG_ID + FS + "pkg2" + FS + "C2.html", "<html>"}};
+ private static final String[][] TEST3 = {
+- {BUG_ID + FS + "pkg1" + FS + "C1.html", "<HTML lang=\"en\">"},
+- {BUG_ID + FS + "pkg1" + FS + "package-summary.html", "<HTML lang=\"en\">"}};
++ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<html lang=\"en\">"},
++ {BUG_ID + FS + "pkg1" + FS + "package-summary.html", "<html lang=\"en\">"}};
+ private static final String[][] NEGATED_TEST3 = {
+- {BUG_ID + FS + "pkg1" + FS + "C1.html", "<HTML>"}};
++ {BUG_ID + FS + "pkg1" + FS + "C1.html", "<html>"}};
+
+ private static final String[] ARGS1 =
+ new String[] {
+diff --git a/test/com/sun/javadoc/testIndex/TestIndex.java b/test/com/sun/javadoc/testIndex/TestIndex.java
+--- langtools/test/com/sun/javadoc/testIndex/TestIndex.java
++++ langtools/test/com/sun/javadoc/testIndex/TestIndex.java
+@@ -48,35 +48,34 @@
+ private static final String[][] TEST = {
+ //Make sure the horizontal scroll bar does not appear in class frame.
+ {BUG_ID + FS + "index.html",
+- "<FRAME src=\"overview-summary.html\" name=\"classFrame\" " +
+- "title=\"Package, class and interface descriptions\" " +
+- "scrolling=\"yes\">"},
++ "<frame src=\"overview-summary.html\" name=\"classFrame\" title=\"" +
++ "Package, class and interface descriptions\" scrolling=\"yes\">"},
+
+ //Test index-all.html
+ {BUG_ID + FS + "index-all.html",
+- "<A HREF=\"./pkg/C.html\" title=\"class in pkg\"><STRONG>C</STRONG></A>" +
+- " - Class in <A HREF=\"./pkg/package-summary.html\">pkg</A>"},
++ "<a href=\"./pkg/C.html\" title=\"class in pkg\"><span class=\"strong\">C</span></a>" +
++ " - Class in <a href=\"./pkg/package-summary.html\">pkg</a>"},
+ {BUG_ID + FS + "index-all.html",
+- "<A HREF=\"./pkg/Interface.html\" title=\"interface in pkg\">" +
+- "<STRONG>Interface</STRONG></A> - Interface in " +
+- "<A HREF=\"./pkg/package-summary.html\">pkg</A>"},
++ "<a href=\"./pkg/Interface.html\" title=\"interface in pkg\">" +
++ "<span class=\"strong\">Interface</span></a> - Interface in " +
++ "<a href=\"./pkg/package-summary.html\">pkg</a>"},
+ {BUG_ID + FS + "index-all.html",
+- "<A HREF=\"./pkg/AnnotationType.html\" title=\"annotation in pkg\">" +
+- "<STRONG>AnnotationType</STRONG></A> - Annotation Type in " +
+- "<A HREF=\"./pkg/package-summary.html\">pkg</A>"},
++ "<a href=\"./pkg/AnnotationType.html\" title=\"annotation in pkg\">" +
++ "<span class=\"strong\">AnnotationType</span></a> - Annotation Type in " +
++ "<a href=\"./pkg/package-summary.html\">pkg</a>"},
+ {BUG_ID + FS + "index-all.html",
+- "<A HREF=\"./pkg/Coin.html\" title=\"enum in pkg\">" +
+- "<STRONG>Coin</STRONG></A> - Enum in " +
+- "<A HREF=\"./pkg/package-summary.html\">pkg</A>"},
++ "<a href=\"./pkg/Coin.html\" title=\"enum in pkg\">" +
++ "<span class=\"strong\">Coin</span></a> - Enum in " +
++ "<a href=\"./pkg/package-summary.html\">pkg</a>"},
+ {BUG_ID + FS + "index-all.html",
+- "Class in <A HREF=\"./package-summary.html\">&lt;Unnamed&gt;</A>"},
++ "Class in <a href=\"./package-summary.html\">&lt;Unnamed&gt;</a>"},
+ {BUG_ID + FS + "index-all.html",
+- "<DT><A HREF=\"./pkg/C.html#Java\"><STRONG>Java</STRONG></A> - " + NL +
+- "Static variable in class pkg.<A HREF=\"./pkg/C.html\" title=\"class in pkg\">C</A>" + NL +
+- "</DT><DD>&nbsp;</DD>" + NL + NL +
+- "<DT><A HREF=\"./pkg/C.html#JDK\"><STRONG>JDK</STRONG></A> - " + NL +
+- "Static variable in class pkg.<A HREF=\"./pkg/C.html\" title=\"class in pkg\">C</A>" + NL +
+- "</DT><DD>&nbsp;</DD>"},
++ "<dl>" + NL + "<dt><span class=\"strong\"><a href=\"./pkg/C.html#Java\">" +
++ "Java</a></span> - Static variable in class pkg.<a href=\"./pkg/C.html\" " +
++ "title=\"class in pkg\">C</a></dt>" + NL + "<dd>&nbsp;</dd>" + NL +
++ "<dt><span class=\"strong\"><a href=\"./pkg/C.html#JDK\">JDK</a></span> " +
++ "- Static variable in class pkg.<a href=\"./pkg/C.html\" title=\"class in pkg\">" +
++ "C</a></dt>" + NL + "<dd>&nbsp;</dd>" + NL + "</dl>"},
+ };
+ private static final String[][] NEGATED_TEST = NO_TEST;
+
+diff --git a/test/com/sun/javadoc/testInlineLinkLabel/TestInlineLinkLabel.java b/test/com/sun/javadoc/testInlineLinkLabel/TestInlineLinkLabel.java
+--- langtools/test/com/sun/javadoc/testInlineLinkLabel/TestInlineLinkLabel.java
++++ langtools/test/com/sun/javadoc/testInlineLinkLabel/TestInlineLinkLabel.java
+@@ -37,10 +37,10 @@
+ private static final String BUG_ID = "4524136";
+ private static final String[][] TEST = {
+ //Search for the label to the package link.
+- {BUG_ID + FS + "pkg" + FS + "C1.html" , "<A HREF=\"../pkg/package-summary.html\"><CODE>Here is a link to a package</CODE></A>"},
++ {BUG_ID + FS + "pkg" + FS + "C1.html" , "<a href=\"../pkg/package-summary.html\"><code>Here is a link to a package</code></a>"},
+
+ //Search for the label to the class link
+- {BUG_ID + FS + "pkg" + FS + "C1.html" , "<A HREF=\"../pkg/C2.html\" title=\"class in pkg\"><CODE>Here is a link to a class</CODE></A>"}
++ {BUG_ID + FS + "pkg" + FS + "C1.html" , "<a href=\"../pkg/C2.html\" title=\"class in pkg\"><code>Here is a link to a class</code></a>"}
+ };
+ private static final String[][] NEGATED_TEST = NO_TEST;
+ private static final String[] ARGS =
+diff --git a/test/com/sun/javadoc/testInterface/TestInterface.java b/test/com/sun/javadoc/testInterface/TestInterface.java
+--- langtools/test/com/sun/javadoc/testInterface/TestInterface.java
++++ langtools/test/com/sun/javadoc/testInterface/TestInterface.java
+@@ -48,51 +48,62 @@
+ //Input for string search tests.
+ private static final String[][] TEST = {
+ {BUG_ID + FS + "pkg" + FS + "Interface.html",
+- "int <STRONG>method</STRONG>()"},
++ "<pre>int&nbsp;method()</pre>"},
+ {BUG_ID + FS + "pkg" + FS + "Interface.html",
+- "static final int <STRONG>field</STRONG>"},
++ "<pre>static final&nbsp;int field</pre>"},
+
+
+ // Make sure known implementing class list is correct and omits type parameters.
+ {BUG_ID + FS + "pkg" + FS + "Interface.html",
+- "<DT><STRONG>All Known Implementing Classes:</STRONG></DT> " +
+- "<DD><A HREF=\"../pkg/Child.html\" " +
+- "title=\"class in pkg\">Child</A>, " +
+- "<A HREF=\"../pkg/Parent.html\" title=\"class in pkg\">" +
+- "Parent</A></DD>"},
++ "<dl>" + NL + "<dt>All Known Implementing Classes:</dt>" + NL +
++ "<dd><a href=\"../pkg/Child.html\" title=\"class in pkg\">Child" +
++ "</a>, <a href=\"../pkg/Parent.html\" title=\"class in pkg\">Parent" +
++ "</a></dd>" + NL + "</dl>"},
+
+ // Make sure "All Implemented Interfaces": has substituted type parameters
+ {BUG_ID + FS + "pkg" + FS + "Child.html",
+- "<STRONG>All Implemented Interfaces:</STRONG></DT> <DD>" +
+- "<A HREF=\"../pkg/Interface.html\" title=\"interface in pkg\">" +
+- "Interface</A>&lt;T&gt;"
++ "<dl>" + NL + "<dt>All Implemented Interfaces:</dt>" + NL +
++ "<dd><a href=\"../pkg/Interface.html\" title=\"interface in pkg\">" +
++ "Interface</a>&lt;T&gt;</dd>" + NL + "</dl>"
+ },
+ //Make sure Class Tree has substituted type parameters.
+ {BUG_ID + FS + "pkg" + FS + "Child.html",
+- "<PRE>" + NL +
+- "java.lang.Object" + NL +
+- " <IMG SRC=\"../resources/inherit.gif\" ALT=\"extended by \"><A HREF=\"../pkg/Parent.html\" title=\"class in pkg\">pkg.Parent</A>&lt;T&gt;" + NL +
+- " <IMG SRC=\"../resources/inherit.gif\" ALT=\"extended by \"><STRONG>pkg.Child&lt;T&gt;</STRONG>" + NL +
+- "</PRE>"
++ "<ul class=\"inheritance\">" + NL + "<li>java.lang.Object</li>" + NL +
++ "<li>" + NL + "<ul class=\"inheritance\">" + NL +
++ "<li><a href=\"../pkg/Parent.html\" title=\"class in pkg\">" +
++ "pkg.Parent</a>&lt;T&gt;</li>" + NL + "<li>" + NL +
++ "<ul class=\"inheritance\">" + NL + "<li>pkg.Child&lt;T&gt;</li>" + NL +
++ "</ul>" + NL + "</li>" + NL + "</ul>" + NL + "</li>" + NL + "</ul>"
+ },
+ //Make sure "Direct Know Subclasses" omits type parameters
+ {BUG_ID + FS + "pkg" + FS + "Parent.html",
+- "<STRONG>Direct Known Subclasses:</STRONG></DT> <DD><A HREF=\"../pkg/Child.html\" title=\"class in pkg\">Child</A>"
++ "<dl>" + NL + "<dt>Direct Known Subclasses:</dt>" + NL +
++ "<dd><a href=\"../pkg/Child.html\" title=\"class in pkg\">Child" +
++ "</a></dd>" + NL + "</dl>"
+ },
+ //Make sure "Specified By" has substituted type parameters.
+ {BUG_ID + FS + "pkg" + FS + "Child.html",
+- "<STRONG>Specified by:</STRONG></DT><DD><CODE><A HREF=\"../pkg/Interface.html#method()\">method</A></CODE> in interface <CODE><A HREF=\"../pkg/Interface.html\" title=\"interface in pkg\">Interface</A>&lt;<A HREF=\"../pkg/Child.html\" title=\"type parameter in Child\">T</A>&gt;</CODE>"
++ "<dt><strong>Specified by:</strong></dt>" + NL +
++ "<dd><code><a href=\"../pkg/Interface.html#method()\">method</a>" +
++ "</code>&nbsp;in interface&nbsp;<code>" +
++ "<a href=\"../pkg/Interface.html\" title=\"interface in pkg\">" +
++ "Interface</a>&lt;<a href=\"../pkg/Child.html\" title=\"type parameter in Child\">" +
++ "T</a>&gt;</code></dd>"
+ },
+ //Make sure "Overrides" has substituted type parameters.
+ {BUG_ID + FS + "pkg" + FS + "Child.html",
+- "<STRONG>Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg/Parent.html#method()\">method</A></CODE> in class <CODE><A HREF=\"../pkg/Parent.html\" title=\"class in pkg\">Parent</A>&lt;<A HREF=\"../pkg/Child.html\" title=\"type parameter in Child\">T</A>&gt;</CODE>"
++ "<dt><strong>Overrides:</strong></dt>" + NL +
++ "<dd><code><a href=\"../pkg/Parent.html#method()\">method</a>" +
++ "</code>&nbsp;in class&nbsp;<code><a href=\"../pkg/Parent.html\" " +
++ "title=\"class in pkg\">Parent</a>&lt;<a href=\"../pkg/Child.html\" " +
++ "title=\"type parameter in Child\">T</a>&gt;</code></dd>"
+ },
+ };
+ private static final String[][] NEGATED_TEST = {
+ {BUG_ID + FS + "pkg" + FS + "Interface.html",
+- "public int <STRONG>method</STRONG>()"},
++ "public int&nbsp;method()"},
+ {BUG_ID + FS + "pkg" + FS + "Interface.html",
+- "public static final int <STRONG>field</STRONG>"},
++ "public static final&nbsp;int field"},
+ };
+
+ /**
+diff --git a/test/com/sun/javadoc/testJavascript/TestJavascript.java b/test/com/sun/javadoc/testJavascript/TestJavascript.java
+--- langtools/test/com/sun/javadoc/testJavascript/TestJavascript.java
++++ langtools/test/com/sun/javadoc/testJavascript/TestJavascript.java
+@@ -45,11 +45,11 @@
+ //Input for string search tests.
+ private static final String[][] TEST = {
+ {BUG_ID + FS + "pkg" + FS + "C.html",
+- "<A HREF=\"../index.html?pkg/C.html\" target=\"_top\"><STRONG>FRAMES</STRONG></A>"},
++ "<a href=\"../index.html?pkg/C.html\" target=\"_top\">FRAMES</a>"},
+ {BUG_ID + FS + "TestJavascript.html",
+- "<A HREF=\"index.html?TestJavascript.html\" target=\"_top\"><STRONG>FRAMES</STRONG></A>"},
++ "<a href=\"index.html?TestJavascript.html\" target=\"_top\">FRAMES</a>"},
+ {BUG_ID + FS + "index.html",
+- "<SCRIPT type=\"text/javascript\">" + NL +
++ "<script type=\"text/javascript\">" + NL +
+ " targetPage = \"\" + window.location.search;" + NL +
+ " if (targetPage != \"\" && targetPage != \"undefined\")" + NL +
+ " targetPage = targetPage.substring(1);" + NL +
+@@ -59,7 +59,7 @@
+ " if (targetPage != \"\" && targetPage != \"undefined\")" + NL +
+ " top.classFrame.location = top.targetPage;" + NL +
+ " }" + NL +
+- "</SCRIPT>"},
++ "</script>"},
+
+ //Make sure title javascript only runs if is-external is not true
+ {BUG_ID + FS + "pkg" + FS + "C.html",
+diff --git a/test/com/sun/javadoc/testLinkOption/TestLinkOption.java b/test/com/sun/javadoc/testLinkOption/TestLinkOption.java
+--- langtools/test/com/sun/javadoc/testLinkOption/TestLinkOption.java
++++ langtools/test/com/sun/javadoc/testLinkOption/TestLinkOption.java
+@@ -46,25 +46,25 @@
+
+ private static final String[][] TEST1 = {
+ {BUG_ID + "-1" + FS + "pkg" + FS + "C.html",
+- "<A HREF=\"http://java.sun.com/j2se/1.4/docs/api/java/lang/String.html?is-external=true\" " +
+- "title=\"class or interface in java.lang\"><CODE>Link to String Class</CODE></A>"
++ "<a href=\"http://java.sun.com/j2se/1.4/docs/api/java/lang/String.html?is-external=true\" " +
++ "title=\"class or interface in java.lang\"><code>Link to String Class</code></a>"
+ },
+ //Make sure the parameters are indented properly when the -link option is used.
+ {BUG_ID + "-1" + FS + "pkg" + FS + "C.html",
+ "(int&nbsp;p1," + NL +
+- " int&nbsp;p2," + NL +
+- " int&nbsp;p3)"
++ " int&nbsp;p2," + NL +
++ " int&nbsp;p3)"
+ },
+ {BUG_ID + "-1" + FS + "pkg" + FS + "C.html",
+ "(int&nbsp;p1," + NL +
+- " int&nbsp;p2," + NL +
+- " " +
+- "<A HREF=\"http://java.sun.com/j2se/1.4/docs/api/java/lang/Object.html?is-external=true\" " +
+- "title=\"class or interface in java.lang\">Object</A>&nbsp;p3)"
++ " int&nbsp;p2," + NL +
++ " <a href=\"http://java.sun.com/j2se/1.4/docs/api/java/lang/Object.html?is-external=true\" title=\"class or interface in java.lang\">" +
++ "Object</a>&nbsp;p3)"
+ },
+ {BUG_ID + "-1" + FS + "java" + FS + "lang" + FS + "StringBuilderChild.html",
+- "public abstract class <STRONG>StringBuilderChild</STRONG>" + NL +
+- "extends <A HREF=\"http://java.sun.com/j2se/1.4/docs/api/java/lang/Object.html?is-external=true\" title=\"class or interface in java.lang\">Object</A>"
++ "<pre>public abstract class <strong>StringBuilderChild</strong>" + NL +
++ "extends <a href=\"http://java.sun.com/j2se/1.4/docs/api/java/lang/Object.html?is-external=true\" " +
++ "title=\"class or interface in java.lang\">Object</a></pre>"
+ },
+
+ };
+@@ -79,8 +79,8 @@
+
+ private static final String[][] TEST2 = {
+ {BUG_ID + "-2" + FS + "pkg2" + FS + "C2.html",
+- "This is a link to <A HREF=\"../../" + BUG_ID + "-1/pkg/C.html?is-external=true\" " +
+- "title=\"class or interface in pkg\"><CODE>Class C</CODE></A>."
++ "This is a link to <a href=\"../../" + BUG_ID + "-1/pkg/C.html?is-external=true\" " +
++ "title=\"class or interface in pkg\"><code>Class C</code></a>."
+ }
+ };
+ private static final String[][] NEGATED_TEST2 = NO_TEST;
+diff --git a/test/com/sun/javadoc/testLinkTaglet/TestLinkTaglet.java b/test/com/sun/javadoc/testLinkTaglet/TestLinkTaglet.java
+--- langtools/test/com/sun/javadoc/testLinkTaglet/TestLinkTaglet.java
++++ langtools/test/com/sun/javadoc/testLinkTaglet/TestLinkTaglet.java
+@@ -46,20 +46,22 @@
+ //Input for string search tests.
+ private static final String[][] TEST = {
+ {BUG_ID + FS + "pkg" + FS + "C.html",
+- "Qualified Link: <A HREF=\"../pkg/C.InnerC.html\" title=\"class in pkg\"><CODE>C.InnerC</CODE></A>.<br/>\n" +
+- " Unqualified Link1: <A HREF=\"../pkg/C.InnerC.html\" title=\"class in pkg\"><CODE>C.InnerC</CODE></A>.<br/>\n" +
+- " Unqualified Link2: <A HREF=\"../pkg/C.InnerC.html\" title=\"class in pkg\"><CODE>C.InnerC</CODE></A>.<br/>\n" +
+- " Qualified Link: <A HREF=\"../pkg/C.html#method(pkg.C.InnerC, pkg.C.InnerC2)\"><CODE>method(pkg.C.InnerC, pkg.C.InnerC2)</CODE></A>.<br/>\n" +
+- " Unqualified Link: <A HREF=\"../pkg/C.html#method(pkg.C.InnerC, pkg.C.InnerC2)\"><CODE>method(C.InnerC, C.InnerC2)</CODE></A>.<br/>\n" +
+- " Unqualified Link: <A HREF=\"../pkg/C.html#method(pkg.C.InnerC, pkg.C.InnerC2)\"><CODE>method(InnerC, InnerC2)</CODE></A>.<br/>"
++ "Qualified Link: <a href=\"../pkg/C.InnerC.html\" title=\"class in pkg\"><code>C.InnerC</code></a>.<br/>\n" +
++ " Unqualified Link1: <a href=\"../pkg/C.InnerC.html\" title=\"class in pkg\"><code>C.InnerC</code></a>.<br/>\n" +
++ " Unqualified Link2: <a href=\"../pkg/C.InnerC.html\" title=\"class in pkg\"><code>C.InnerC</code></a>.<br/>\n" +
++ " Qualified Link: <a href=\"../pkg/C.html#method(pkg.C.InnerC, pkg.C.InnerC2)\"><code>method(pkg.C.InnerC, pkg.C.InnerC2)</code></a>.<br/>\n" +
++ " Unqualified Link: <a href=\"../pkg/C.html#method(pkg.C.InnerC, pkg.C.InnerC2)\"><code>method(C.InnerC, C.InnerC2)</code></a>.<br/>\n" +
++ " Unqualified Link: <a href=\"../pkg/C.html#method(pkg.C.InnerC, pkg.C.InnerC2)\"><code>method(InnerC, InnerC2)</code></a>.<br/>"
+ },
+ {BUG_ID + FS + "pkg" + FS + "C.InnerC.html",
+- "Link to member in outer class: <A HREF=\"../pkg/C.html#MEMBER\"><CODE>C.MEMBER</CODE></A> <br/>\n" +
+- " Link to member in inner class: <A HREF=\"../pkg/C.InnerC2.html#MEMBER2\"><CODE>C.InnerC2.MEMBER2</CODE></A> <br/>\n" +
+- " Link to another inner class: <A HREF=\"../pkg/C.InnerC2.html\" title=\"class in pkg\"><CODE>C.InnerC2</CODE></A>"
++ "Link to member in outer class: <a href=\"../pkg/C.html#MEMBER\"><code>C.MEMBER</code></a> <br/>\n" +
++ " Link to member in inner class: <a href=\"../pkg/C.InnerC2.html#MEMBER2\"><code>C.InnerC2.MEMBER2</code></a> <br/>\n" +
++ " Link to another inner class: <a href=\"../pkg/C.InnerC2.html\" title=\"class in pkg\"><code>C.InnerC2</code></a>"
+ },
+ {BUG_ID + FS + "pkg" + FS + "C.InnerC2.html",
+- "Enclosing class:</STRONG></DT><DD><A HREF=\"../pkg/C.html\" title=\"class in pkg\">C</A>"
++ "<dl>" + NL + "<dt>Enclosing class:</dt>" + NL +
++ "<dd><a href=\"../pkg/C.html\" title=\"class in pkg\">C</a></dd>" + NL +
++ "</dl>"
+ },
+ };
+ private static final String[][] NEGATED_TEST = {
+diff --git a/test/com/sun/javadoc/testLinkToSerialForm/TestLinkToSerialForm.java b/test/com/sun/javadoc/testLinkToSerialForm/TestLinkToSerialForm.java
+--- langtools/test/com/sun/javadoc/testLinkToSerialForm/TestLinkToSerialForm.java
++++ langtools/test/com/sun/javadoc/testLinkToSerialForm/TestLinkToSerialForm.java
+@@ -37,8 +37,8 @@
+
+ private static final String BUG_ID = "4521661";
+ private static final String[][] TEST = {
+- {BUG_ID + FS + "serialized-form.html", "<A NAME=\"pkg.C\">"},
+- {BUG_ID + FS + "pkg" + FS + "C.html", "<A HREF=\"../serialized-form.html#pkg.C\">"}
++ {BUG_ID + FS + "serialized-form.html", "<a name=\"pkg.C\">"},
++ {BUG_ID + FS + "pkg" + FS + "C.html", "<a href=\"../serialized-form.html#pkg.C\">"}
+ };
+ private static final String[][] NEGATED_TEST = NO_TEST;
+ private static final String[] ARGS =
+diff --git a/test/com/sun/javadoc/testMemberInheritence/TestMemberInheritence.java b/test/com/sun/javadoc/testMemberInheritence/TestMemberInheritence.java
+--- langtools/test/com/sun/javadoc/testMemberInheritence/TestMemberInheritence.java
++++ langtools/test/com/sun/javadoc/testMemberInheritence/TestMemberInheritence.java
+@@ -40,55 +40,57 @@
+ private static final String[][] TEST = {
+ //Public field should be inherited
+ {BUG_ID + FS + "pkg" + FS + "SubClass.html",
+- "<A HREF=\"../pkg/BaseClass.html#pubField\">"},
++ "<a href=\"../pkg/BaseClass.html#pubField\">"},
+
+ //Public method should be inherited
+ {BUG_ID + FS + "pkg" + FS + "SubClass.html",
+- "<A HREF=\"../pkg/BaseClass.html#pubMethod()\">"},
++ "<a href=\"../pkg/BaseClass.html#pubMethod()\">"},
+
+ //Public inner class should be inherited.
+ {BUG_ID + FS + "pkg" + FS + "SubClass.html",
+- "<A HREF=\"../pkg/BaseClass.pubInnerClass.html\" title=\"class in pkg\">"},
++ "<a href=\"../pkg/BaseClass.pubInnerClass.html\" title=\"class in pkg\">"},
+
+ //Protected field should be inherited
+ {BUG_ID + FS + "pkg" + FS + "SubClass.html",
+- "<A HREF=\"../pkg/BaseClass.html#proField\">"},
++ "<a href=\"../pkg/BaseClass.html#proField\">"},
+
+ //Protected method should be inherited
+ {BUG_ID + FS + "pkg" + FS + "SubClass.html",
+- "<A HREF=\"../pkg/BaseClass.html#proMethod()\">"},
++ "<a href=\"../pkg/BaseClass.html#proMethod()\">"},
+
+ //Protected inner class should be inherited.
+ {BUG_ID + FS + "pkg" + FS + "SubClass.html",
+- "<A HREF=\"../pkg/BaseClass.proInnerClass.html\" title=\"class in pkg\">"},
++ "<a href=\"../pkg/BaseClass.proInnerClass.html\" title=\"class in pkg\">"},
+
+ // New labels as of 1.5.0
+ {BUG_ID + FS + "pkg" + FS + "SubClass.html",
+- "<STRONG>Nested classes/interfaces inherited from class pkg." +
+- "<A HREF=\"../pkg/BaseClass.html\" title=\"class in pkg\">" +
+- "BaseClass</A></STRONG>"},
++ "Nested classes/interfaces inherited from class&nbsp;pkg." +
++ "<a href=\"../pkg/BaseClass.html\" title=\"class in pkg\">BaseClass</a>"},
+ {BUG_ID + FS + "pkg" + FS + "SubClass.html",
+- "<STRONG>Nested classes/interfaces inherited from interface pkg." +
+- "<A HREF=\"../pkg/BaseInterface.html\" title=\"interface in pkg\">" +
+- "BaseInterface</A></STRONG>"},
++ "Nested classes/interfaces inherited from interface&nbsp;pkg." +
++ "<a href=\"../pkg/BaseInterface.html\" title=\"interface in pkg\">BaseInterface</a>"},
+
+ // Test overriding/implementing methods with generic parameters.
+ {BUG_ID + FS + "pkg" + FS + "BaseClass.html",
+- "<DT><STRONG>Specified by:</STRONG></DT><DD><CODE><A HREF=\"../pkg/BaseInterface.html#getAnnotation(java.lang.Class)\">getAnnotation</A></CODE> in interface <CODE><A HREF=\"../pkg/BaseInterface.html\" title=\"interface in pkg\">BaseInterface</A></CODE></DD>"+NL+"</DL>"},
++ "<dl>" + NL + "<dt><strong>Specified by:</strong></dt>" + NL +
++ "<dd><code><a href=\"../pkg/BaseInterface.html#getAnnotation(java.lang.Class)\">" +
++ "getAnnotation</a></code>&nbsp;in interface&nbsp;<code>" +
++ "<a href=\"../pkg/BaseInterface.html\" title=\"interface in pkg\">" +
++ "BaseInterface</a></code></dd>" + NL + "</dl>"},
+
+ // Test diamond inheritence member summary (6256068)
+ {BUG_ID + FS + "diamond" + FS + "Z.html",
+- "<TD><CODE><A HREF=\"../diamond/A.html#aMethod()\">aMethod</A></CODE></TD>"},
++ "<code><a href=\"../diamond/A.html#aMethod()\">aMethod</a></code>"},
+
+ // Test that doc is inherited from closed parent (6270645)
+ {BUG_ID + FS + "inheritDist" + FS + "C.html",
+- "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m1-B</TD>"},
++ "<div class=\"block\">m1-B</div>"},
+
+ };
+
+ private static final String[][] NEGATED_TEST = {
+ {BUG_ID + FS + "pkg" + FS + "SubClass.html",
+- "<A HREF=\"../pkg/BaseClass.html#staticMethod()\">staticMethod</A></CODE>"},
++ "<a href=\"../pkg/BaseClass.html#staticMethod()\">staticMethod</a></code>"},
+ };
+ private static final String[] ARGS =
+ new String[] {
+diff --git a/test/com/sun/javadoc/testMemberSummary/TestMemberSummary.java b/test/com/sun/javadoc/testMemberSummary/TestMemberSummary.java
+--- langtools/test/com/sun/javadoc/testMemberSummary/TestMemberSummary.java
++++ langtools/test/com/sun/javadoc/testMemberSummary/TestMemberSummary.java
+@@ -48,21 +48,23 @@
+ private static final String[][] TEST = {
+ // Check return type in member summary.
+ {BUG_ID + FS + "pkg" + FS + "PublicChild.html",
+- "<CODE>&nbsp;<A HREF=\"../pkg/PublicChild.html\" " +
+- "title=\"class in pkg\">PublicChild</A></CODE></FONT></TD>" + NL +
+- "<TD><CODE><STRONG><A HREF=\"../pkg/PublicChild.html#" +
+- "returnTypeTest()\">returnTypeTest</A></STRONG>()</CODE>"
++ "<code><a href=\"../pkg/PublicChild.html\" title=\"class in pkg\">PublicChild</a></code></td>" + NL +
++ "<td class=\"colLast\"><code><strong><a href=\"../pkg/PublicChild.html#returnTypeTest()\">" +
++ "returnTypeTest</a></strong>()</code>"
+ },
+ // Check return type in member detail.
+ {BUG_ID + FS + "pkg" + FS + "PublicChild.html",
+- "public <A HREF=\"../pkg/PublicChild.html\" " +
+- "title=\"class in pkg\">PublicChild</A> " +
+- "<STRONG>returnTypeTest</STRONG>()"
++ "<pre>public&nbsp;<a href=\"../pkg/PublicChild.html\" title=\"class in pkg\">" +
++ "PublicChild</a>&nbsp;returnTypeTest()</pre>"
+ },
+
+ // Legacy anchor dimensions (6290760)
+ {BUG_ID + FS + "pkg2" + FS + "A.html",
+- "<A NAME=\"f(java.lang.Object[])\"><!-- --></A><A NAME=\"f(T[])\"><!-- --></A>"
++ "<a name=\"f(java.lang.Object[])\">" + NL +
++ "<!-- -->" + NL +
++ "</a><a name=\"f(T[])\">" + NL +
++ "<!-- -->" + NL +
++ "</a>"
+ },
+ };
+ private static final String[][] NEGATED_TEST = NO_TEST;
+diff --git a/test/com/sun/javadoc/testNavagation/TestNavagation.java b/test/com/sun/javadoc/testNavagation/TestNavagation.java
+--- langtools/test/com/sun/javadoc/testNavagation/TestNavagation.java
++++ langtools/test/com/sun/javadoc/testNavagation/TestNavagation.java
+@@ -45,24 +45,24 @@
+
+ //Input for string search tests.
+ private static final String[][] TEST = {
+- {BUG_ID + FS + "pkg" + FS + "A.html", "&nbsp;PREV CLASS&nbsp;"},
++ {BUG_ID + FS + "pkg" + FS + "A.html", "<li>PREV CLASS</li>"},
+ {BUG_ID + FS + "pkg" + FS + "A.html",
+- "<A HREF=\"../pkg/C.html\" title=\"class in pkg\"><STRONG>NEXT CLASS</STRONG></A>"},
++ "<a href=\"../pkg/C.html\" title=\"class in pkg\"><span class=\"strong\">NEXT CLASS</span></a>"},
+ {BUG_ID + FS + "pkg" + FS + "C.html",
+- "<A HREF=\"../pkg/A.html\" title=\"annotation in pkg\"><STRONG>PREV CLASS</STRONG></A>"},
++ "<a href=\"../pkg/A.html\" title=\"annotation in pkg\"><span class=\"strong\">PREV CLASS</span></a>"},
+ {BUG_ID + FS + "pkg" + FS + "C.html",
+- "<A HREF=\"../pkg/E.html\" title=\"enum in pkg\"><STRONG>NEXT CLASS</STRONG></A>"},
++ "<a href=\"../pkg/E.html\" title=\"enum in pkg\"><span class=\"strong\">NEXT CLASS</span></a>"},
+ {BUG_ID + FS + "pkg" + FS + "E.html",
+- "<A HREF=\"../pkg/C.html\" title=\"class in pkg\"><STRONG>PREV CLASS</STRONG></A>"},
++ "<a href=\"../pkg/C.html\" title=\"class in pkg\"><span class=\"strong\">PREV CLASS</span></a>"},
+ {BUG_ID + FS + "pkg" + FS + "E.html",
+- "<A HREF=\"../pkg/I.html\" title=\"interface in pkg\"><STRONG>NEXT CLASS</STRONG></A>"},
++ "<a href=\"../pkg/I.html\" title=\"interface in pkg\"><span class=\"strong\">NEXT CLASS</span></a>"},
+ {BUG_ID + FS + "pkg" + FS + "I.html",
+- "<A HREF=\"../pkg/E.html\" title=\"enum in pkg\"><STRONG>PREV CLASS</STRONG></A>"},
+- {BUG_ID + FS + "pkg" + FS + "I.html", "&nbsp;NEXT CLASS"},
++ "<a href=\"../pkg/E.html\" title=\"enum in pkg\"><span class=\"strong\">PREV CLASS</span></a>"},
++ {BUG_ID + FS + "pkg" + FS + "I.html", "<li>NEXT CLASS</li>"},
+ // Test for 4664607
+ {BUG_ID + FS + "pkg" + FS + "I.html",
+- "<TD COLSPAN=2 BGCOLOR=\"#EEEEFF\" CLASS=\"NavBarCell1\">" + NL +
+- "<A NAME=\"navbar_top_firstrow\"><!-- --></A>"}
++ "<a href=\"#skip-navbar_top\" title=\"Skip navigation links\"></a><a name=\"navbar_top_firstrow\">" + NL +
++ "<!-- -->" + NL + "</a>"}
+ };
+ private static final String[][] NEGATED_TEST = NO_TEST;
+
+diff --git a/test/com/sun/javadoc/testNewLanguageFeatures/TestNewLanguageFeatures.java b/test/com/sun/javadoc/testNewLanguageFeatures/TestNewLanguageFeatures.java
+--- langtools/test/com/sun/javadoc/testNewLanguageFeatures/TestNewLanguageFeatures.java
++++ langtools/test/com/sun/javadoc/testNewLanguageFeatures/TestNewLanguageFeatures.java
+@@ -51,18 +51,18 @@
+ // ENUM TESTING
+ //=================================
+ //Make sure enum header is correct.
+- {BUG_ID + FS + "pkg" + FS + "Coin.html", "Enum Coin</H2>"},
++ {BUG_ID + FS + "pkg" + FS + "Coin.html", "Enum Coin</h2>"},
+ //Make sure enum signature is correct.
+- {BUG_ID + FS + "pkg" + FS + "Coin.html", "public enum "+
+- "<STRONG>Coin</STRONG>" + NL + "extends java.lang.Enum&lt;" +
+- "<A HREF=\"../pkg/Coin.html\" title=\"enum in pkg\">Coin</A>&gt;"
++ {BUG_ID + FS + "pkg" + FS + "Coin.html", "<pre>public enum <strong>Coin</strong>" + NL +
++ "extends java.lang.Enum&lt;<a href=\"../pkg/Coin.html\" " +
++ "title=\"enum in pkg\">Coin</a>&gt;</pre>"
+ },
+ //Check for enum constant section
+- {BUG_ID + FS + "pkg" + FS + "Coin.html", "<CAPTION CLASS=\"TableCaption\">" + NL +
+- "Enum Constant Summary</CAPTION>"},
++ {BUG_ID + FS + "pkg" + FS + "Coin.html", "<caption><span>Enum Constants" +
++ "</span><span class=\"tabEnd\">&nbsp;</span></caption>"},
+ //Detail for enum constant
+ {BUG_ID + FS + "pkg" + FS + "Coin.html",
+- "<STRONG><A HREF=\"../pkg/Coin.html#Dime\">Dime</A></STRONG>"},
++ "<strong><a href=\"../pkg/Coin.html#Dime\">Dime</a></strong>"},
+ //Automatically insert documentation for values() and valueOf().
+ {BUG_ID + FS + "pkg" + FS + "Coin.html",
+ "Returns an array containing the constants of this enum type,"},
+@@ -77,38 +77,39 @@
+ //=================================
+ //Make sure the header is correct.
+ {BUG_ID + FS + "pkg" + FS + "TypeParameters.html",
+- "Class TypeParameters&lt;E&gt;</H2>"},
++ "Class TypeParameters&lt;E&gt;</h2>"},
+ //Check class type parameters section.
+ {BUG_ID + FS + "pkg" + FS + "TypeParameters.html",
+- "<DT><STRONG>Type Parameters:</STRONG></DT><DD><CODE>E</CODE> - " +
++ "<dt><span class=\"strong\">Type Parameters:</span></dt><dd><code>E</code> - " +
+ "the type parameter for this class."},
+ //Type parameters in @see/@link
+ {BUG_ID + FS + "pkg" + FS + "TypeParameters.html",
+- "<DT><STRONG>See Also:</STRONG></DT><DD><A HREF=\"../pkg/TypeParameters.html\" " +
+- "title=\"class in pkg\"><CODE>TypeParameters</CODE></A></DD></DL>"},
++ "<dl><dt><span class=\"strong\">See Also:</span></dt><dd>" +
++ "<a href=\"../pkg/TypeParameters.html\" title=\"class in pkg\">" +
++ "<code>TypeParameters</code></a></dd></dl>"},
+ //Method that uses class type parameter.
+ {BUG_ID + FS + "pkg" + FS + "TypeParameters.html",
+- "(<A HREF=\"../pkg/TypeParameters.html\" title=\"type " +
+- "parameter in TypeParameters\">E</A>&nbsp;param)"},
++ "(<a href=\"../pkg/TypeParameters.html\" title=\"type " +
++ "parameter in TypeParameters\">E</a>&nbsp;param)"},
+ //Method type parameter section.
+ {BUG_ID + FS + "pkg" + FS + "TypeParameters.html",
+- "<STRONG>Type Parameters:</STRONG></DT><DD><CODE>T</CODE> - This is the first " +
+- "type parameter.</DD><DD><CODE>V</CODE> - This is the second type " +
++ "<span class=\"strong\">Type Parameters:</span></dt><dd><code>T</code> - This is the first " +
++ "type parameter.</dd><dd><code>V</code> - This is the second type " +
+ "parameter."},
+ //Signature of method with type parameters
+ {BUG_ID + FS + "pkg" + FS + "TypeParameters.html",
+- "public &lt;T extends java.util.List,V&gt; " +
+- "java.lang.String[] <STRONG>methodThatHasTypeParameters</STRONG>"},
++ "public&nbsp;&lt;T extends java.util.List,V&gt;&nbsp;" +
++ "java.lang.String[]&nbsp;methodThatHasTypeParameters"},
+ //Wildcard testing.
+ {BUG_ID + FS + "pkg" + FS + "Wildcards.html",
+- "<A HREF=\"../pkg/TypeParameters.html\" title=\"class in pkg\">" +
+- "TypeParameters</A>&lt;? super java.lang.String&gt;&nbsp;a"},
++ "<a href=\"../pkg/TypeParameters.html\" title=\"class in pkg\">" +
++ "TypeParameters</a>&lt;? super java.lang.String&gt;&nbsp;a"},
+ {BUG_ID + FS + "pkg" + FS + "Wildcards.html",
+- "<A HREF=\"../pkg/TypeParameters.html\" title=\"class in pkg\">" +
+- "TypeParameters</A>&lt;? extends java.lang.StringBuffer&gt;&nbsp;b"},
++ "<a href=\"../pkg/TypeParameters.html\" title=\"class in pkg\">" +
++ "TypeParameters</a>&lt;? extends java.lang.StringBuffer&gt;&nbsp;b"},
+ {BUG_ID + FS + "pkg" + FS + "Wildcards.html",
+- "<A HREF=\"../pkg/TypeParameters.html\" title=\"class in pkg\">" +
+- "TypeParameters</A>&nbsp;c"},
++ "<a href=\"../pkg/TypeParameters.html\" title=\"class in pkg\">" +
++ "TypeParameters</a>&nbsp;c"},
+ //Bad type parameter warnings.
+ {WARNING_OUTPUT, "warning - @param argument " +
+ "\"<BadClassTypeParam>\" is not a type parameter name."},
+@@ -117,18 +118,27 @@
+
+ //Signature of subclass that has type parameters.
+ {BUG_ID + FS + "pkg" + FS + "TypeParameterSubClass.html",
+- "public class <STRONG>TypeParameterSubClass&lt;T extends java.lang.String&gt;" +
+- "</STRONG>" + NL + "extends <A HREF=\"../pkg/TypeParameterSuperClass.html\" " +
+- "title=\"class in pkg\">TypeParameterSuperClass</A>&lt;T&gt;"},
++ "<pre>public class <strong>TypeParameterSubClass&lt;T extends " +
++ "java.lang.String&gt;</strong>" + NL + "extends " +
++ "<a href=\"../pkg/TypeParameterSuperClass.html\" title=\"class in pkg\">" +
++ "TypeParameterSuperClass</a>&lt;T&gt;</pre>"},
+
+ //Interface generic parameter substitution
+ //Signature of subclass that has type parameters.
+ {BUG_ID + FS + "pkg" + FS + "TypeParameters.html",
+- "<STRONG>All Implemented Interfaces:</STRONG></DT> <DD><A HREF=\"../pkg/SubInterface.html\" title=\"interface in pkg\">SubInterface</A>&lt;E&gt;, <A HREF=\"../pkg/SuperInterface.html\" title=\"interface in pkg\">SuperInterface</A>&lt;E&gt;</DD>"},
++ "<dl>" + NL + "<dt>All Implemented Interfaces:</dt>" + NL +
++ "<dd><a href=\"../pkg/SubInterface.html\" title=\"interface in pkg\">" +
++ "SubInterface</a>&lt;E&gt;, <a href=\"../pkg/SuperInterface.html\" " +
++ "title=\"interface in pkg\">SuperInterface</a>&lt;E&gt;</dd>" + NL +
++ "</dl>"},
+ {BUG_ID + FS + "pkg" + FS + "SuperInterface.html",
+- "<STRONG>All Known Subinterfaces:</STRONG></DT> <DD><A HREF=\"../pkg/SubInterface.html\" title=\"interface in pkg\">SubInterface</A>&lt;V&gt;</DD>"},
++ "<dl>" + NL + "<dt>All Known Subinterfaces:</dt>" + NL +
++ "<dd><a href=\"../pkg/SubInterface.html\" title=\"interface in pkg\">" +
++ "SubInterface</a>&lt;V&gt;</dd>" + NL + "</dl>"},
+ {BUG_ID + FS + "pkg" + FS + "SubInterface.html",
+- "<STRONG>All Superinterfaces:</STRONG></DT> <DD><A HREF=\"../pkg/SuperInterface.html\" title=\"interface in pkg\">SuperInterface</A>&lt;V&gt;</DD>"},
++ "<dl>" + NL + "<dt>All Superinterfaces:</dt>" + NL +
++ "<dd><a href=\"../pkg/SuperInterface.html\" title=\"interface in pkg\">" +
++ "SuperInterface</a>&lt;V&gt;</dd>" + NL + "</dl>"},
+
+ //=================================
+ // VAR ARG TESTING
+@@ -137,39 +147,40 @@
+ {BUG_ID + FS + "pkg" + FS + "VarArgs.html", "(int[][]...&nbsp;i)"},
+ {BUG_ID + FS + "pkg" + FS + "VarArgs.html", "(int[]...)"},
+ {BUG_ID + FS + "pkg" + FS + "VarArgs.html",
+- "<A HREF=\"../pkg/TypeParameters.html\" title=\"class in pkg\">" +
+- "TypeParameters</A>...&nbsp;t"},
++ "<a href=\"../pkg/TypeParameters.html\" title=\"class in pkg\">" +
++ "TypeParameters</a>...&nbsp;t"},
+
+ //=================================
+ // ANNOTATION TYPE TESTING
+ //=================================
+ //Make sure the summary links are correct.
+ {BUG_ID + FS + "pkg" + FS + "AnnotationType.html",
+- "SUMMARY:&nbsp;<A HREF=\"#annotation_type_required_element_summary\">" +
+- "REQUIRED</A>&nbsp;|&nbsp;<A HREF=\"#annotation_type_optional_element_summary\">" +
+- "OPTIONAL</A>"},
++ "<li>SUMMARY:&nbsp;</li>" + NL +
++ "<li><a href=\"#annotation_type_required_element_summary\">" +
++ "REQUIRED</a>&nbsp;|&nbsp;</li>" + NL + "<li>" +
++ "<a href=\"#annotation_type_optional_element_summary\">OPTIONAL</a></li>"},
+ //Make sure the detail links are correct.
+ {BUG_ID + FS + "pkg" + FS + "AnnotationType.html",
+- "DETAIL:&nbsp;<A HREF=\"#annotation_type_element_detail\">ELEMENT</A>"},
++ "<li>DETAIL:&nbsp;</li>" + NL +
++ "<li><a href=\"#annotation_type_element_detail\">ELEMENT</a></li>"},
+ //Make sure the heading is correct.
+ {BUG_ID + FS + "pkg" + FS + "AnnotationType.html",
+- "Annotation Type AnnotationType</H2>"},
++ "Annotation Type AnnotationType</h2>"},
+ //Make sure the signature is correct.
+ {BUG_ID + FS + "pkg" + FS + "AnnotationType.html",
+- "public @interface <STRONG>AnnotationType</STRONG>"},
++ "public @interface <strong>AnnotationType</strong>"},
+ //Make sure member summary headings are correct.
+ {BUG_ID + FS + "pkg" + FS + "AnnotationType.html",
+- "<CAPTION CLASS=\"TableCaption\">" + NL +
+- "Required Element Summary</CAPTION>"},
++ "<h3>Required Element Summary</h3>"},
+ {BUG_ID + FS + "pkg" + FS + "AnnotationType.html",
+- "<CAPTION CLASS=\"TableCaption\">" + NL +
+- "Optional Element Summary</CAPTION>"},
++ "<h3>Optional Element Summary</h3>"},
+ //Make sure element detail heading is correct
+ {BUG_ID + FS + "pkg" + FS + "AnnotationType.html",
+ "Element Detail"},
+ //Make sure default annotation type value is printed when necessary.
+ {BUG_ID + FS + "pkg" + FS + "AnnotationType.html",
+- "<STRONG>Default:</STRONG></DT><DD>\"unknown\"</DD>"},
++ "<dl>" + NL + "<dt>Default:</dt>" + NL + "<dd>\"unknown\"</dd>" + NL +
++ "</dl>"},
+
+ //=================================
+ // ANNOTATION TYPE USAGE TESTING
+@@ -177,51 +188,65 @@
+
+ //PACKAGE
+ {BUG_ID + FS + "pkg" + FS + "package-summary.html",
+- "<A HREF=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">@AnnotationType</A>(<A HREF=\"../pkg/AnnotationType.html#optional()\">optional</A>=\"Package Annotation\"," + NL +
+- " <A HREF=\"../pkg/AnnotationType.html#required()\">required</A>=1994)"},
++ "<a href=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">@AnnotationType</a>(<a href=\"../pkg/AnnotationType.html#optional()\">optional</a>=\"Package Annotation\"," + NL +
++ " <a href=\"../pkg/AnnotationType.html#required()\">required</a>=1994)"},
+
+ //CLASS
+ {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html",
+- "<FONT SIZE=\"-1\">" +
+- "<A HREF=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">@AnnotationType</A>(<A HREF=\"../pkg/AnnotationType.html#optional()\">optional</A>=\"Class Annotation\","+NL +
+- " <A HREF=\"../pkg/AnnotationType.html#required()\">required</A>=1994)"+NL +
+- "</FONT>public class <STRONG>AnnotationTypeUsage</STRONG>" + NL +
+- "extends java.lang.Object"},
++ "<pre><a href=\"../pkg/AnnotationType.html\" " +
++ "title=\"annotation in pkg\">@AnnotationType</a>(" +
++ "<a href=\"../pkg/AnnotationType.html#optional()\">optional</a>" +
++ "=\"Class Annotation\"," + NL +
++ " <a href=\"../pkg/AnnotationType.html#required()\">" +
++ "required</a>=1994)" + NL + "public class <strong>" +
++ "AnnotationTypeUsage</strong>" + NL + "extends java.lang.Object</pre>"},
+
+ //FIELD
+ {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html",
+- "<FONT SIZE=\"-1\">" +
+- "<A HREF=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">@AnnotationType</A>(<A HREF=\"../pkg/AnnotationType.html#optional()\">optional</A>=\"Field Annotation\","+NL +
+- " <A HREF=\"../pkg/AnnotationType.html#required()\">required</A>=1994)"+NL +
+- "</FONT>public int <STRONG>field</STRONG>"},
++ "<pre><a href=\"../pkg/AnnotationType.html\" " +
++ "title=\"annotation in pkg\">@AnnotationType</a>(" +
++ "<a href=\"../pkg/AnnotationType.html#optional()\">optional</a>" +
++ "=\"Field Annotation\"," + NL +
++ " <a href=\"../pkg/AnnotationType.html#required()\">" +
++ "required</a>=1994)" + NL + "public&nbsp;int field</pre>"},
+
+ //CONSTRUCTOR
+ {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html",
+- "<FONT SIZE=\"-1\">" +
+- "<A HREF=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">@AnnotationType</A>(<A HREF=\"../pkg/AnnotationType.html#optional()\">optional</A>=\"Constructor Annotation\","+NL +
+- " <A HREF=\"../pkg/AnnotationType.html#required()\">required</A>=1994)"+NL +
+- "</FONT>public <STRONG>AnnotationTypeUsage</STRONG>()"},
++ "<pre><a href=\"../pkg/AnnotationType.html\" " +
++ "title=\"annotation in pkg\">@AnnotationType</a>(" +
++ "<a href=\"../pkg/AnnotationType.html#optional()\">optional</a>" +
++ "=\"Constructor Annotation\"," + NL +
++ " <a href=\"../pkg/AnnotationType.html#required()\">" +
++ "required</a>=1994)" + NL + "public&nbsp;AnnotationTypeUsage()</pre>"},
+
+ //METHOD
+ {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html",
+- "<FONT SIZE=\"-1\">" +
+- "<A HREF=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">@AnnotationType</A>(<A HREF=\"../pkg/AnnotationType.html#optional()\">optional</A>=\"Method Annotation\","+NL +
+- " <A HREF=\"../pkg/AnnotationType.html#required()\">required</A>=1994)"+NL +
+- "</FONT>public void <STRONG>method</STRONG>()"},
++ "<pre><a href=\"../pkg/AnnotationType.html\" " +
++ "title=\"annotation in pkg\">@AnnotationType</a>(" +
++ "<a href=\"../pkg/AnnotationType.html#optional()\">optional</a>" +
++ "=\"Method Annotation\"," + NL +
++ " <a href=\"../pkg/AnnotationType.html#required()\">" +
++ "required</a>=1994)" + NL + "public&nbsp;void&nbsp;method()</pre>"},
+
+ //METHOD PARAMS
+ {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html",
+- "<PRE>" + NL +
+- "public void <STRONG>methodWithParams</STRONG>(<FONT SIZE=\"-1\"><A HREF=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">@AnnotationType</A>(<A HREF=\"../pkg/AnnotationType.html#optional()\">optional</A>=\"Parameter Annotation\",<A HREF=\"../pkg/AnnotationType.html#required()\">required</A>=1994)</FONT>" + NL +
+- " int&nbsp;documented," + NL +
+- " int&nbsp;undocmented)</PRE>"},
++ "<pre>public&nbsp;void&nbsp;methodWithParams(" +
++ "<a href=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">" +
++ "@AnnotationType</a>(<a href=\"../pkg/AnnotationType.html#optional()\">" +
++ "optional</a>=\"Parameter Annotation\",<a " +
++ "href=\"../pkg/AnnotationType.html#required()\">required</a>=1994)" + NL +
++ " int&nbsp;documented," + NL +
++ " int&nbsp;undocmented)</pre>"},
+
+ //CONSTRUCTOR PARAMS
+ {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html",
+- "<PRE>" + NL +
+- "public <STRONG>AnnotationTypeUsage</STRONG>(<FONT SIZE=\"-1\"><A HREF=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">@AnnotationType</A>(<A HREF=\"../pkg/AnnotationType.html#optional()\">optional</A>=\"Constructor Param Annotation\",<A HREF=\"../pkg/AnnotationType.html#required()\">required</A>=1994)</FONT>" + NL +
+- " int&nbsp;documented," + NL +
+- " int&nbsp;undocmented)</PRE>"},
++ "<pre>public&nbsp;AnnotationTypeUsage(<a " +
++ "href=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">" +
++ "@AnnotationType</a>(<a href=\"../pkg/AnnotationType.html#optional()\">" +
++ "optional</a>=\"Constructor Param Annotation\",<a " +
++ "href=\"../pkg/AnnotationType.html#required()\">required</a>=1994)" + NL +
++ " int&nbsp;documented," + NL +
++ " int&nbsp;undocmented)</pre>"},
+
+ //=================================
+ // ANNOTATION TYPE USAGE TESTING (All Different Types).
+@@ -229,59 +254,59 @@
+
+ //Integer
+ {BUG_ID + FS + "pkg1" + FS + "B.html",
+- "<A HREF=\"../pkg1/A.html#d()\">d</A>=3.14,"},
++ "<a href=\"../pkg1/A.html#d()\">d</a>=3.14,"},
+
+ //Double
+ {BUG_ID + FS + "pkg1" + FS + "B.html",
+- "<A HREF=\"../pkg1/A.html#d()\">d</A>=3.14,"},
++ "<a href=\"../pkg1/A.html#d()\">d</a>=3.14,"},
+
+ //Boolean
+ {BUG_ID + FS + "pkg1" + FS + "B.html",
+- "<A HREF=\"../pkg1/A.html#b()\">b</A>=true,"},
++ "<a href=\"../pkg1/A.html#b()\">b</a>=true,"},
+
+ //String
+ {BUG_ID + FS + "pkg1" + FS + "B.html",
+- "<A HREF=\"../pkg1/A.html#s()\">s</A>=\"sigh\","},
++ "<a href=\"../pkg1/A.html#s()\">s</a>=\"sigh\","},
+
+ //Class
+ {BUG_ID + FS + "pkg1" + FS + "B.html",
+- "<A HREF=\"../pkg1/A.html#c()\">c</A>=<A HREF=\"../pkg2/Foo.html\" title=\"class in pkg2\">Foo.class</A>,"},
++ "<a href=\"../pkg1/A.html#c()\">c</a>=<a href=\"../pkg2/Foo.html\" title=\"class in pkg2\">Foo.class</a>,"},
+
+ //Bounded Class
+ {BUG_ID + FS + "pkg1" + FS + "B.html",
+- "<A HREF=\"../pkg1/A.html#w()\">w</A>=<A HREF=\"../pkg/TypeParameterSubClass.html\" title=\"class in pkg\">TypeParameterSubClass.class</A>,"},
++ "<a href=\"../pkg1/A.html#w()\">w</a>=<a href=\"../pkg/TypeParameterSubClass.html\" title=\"class in pkg\">TypeParameterSubClass.class</a>,"},
+
+ //Enum
+ {BUG_ID + FS + "pkg1" + FS + "B.html",
+- "<A HREF=\"../pkg1/A.html#e()\">e</A>=<A HREF=\"../pkg/Coin.html#Penny\">Penny</A>,"},
++ "<a href=\"../pkg1/A.html#e()\">e</a>=<a href=\"../pkg/Coin.html#Penny\">Penny</a>,"},
+
+ //Annotation Type
+ {BUG_ID + FS + "pkg1" + FS + "B.html",
+- "<A HREF=\"../pkg1/A.html#a()\">a</A>=<A HREF=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">@AnnotationType</A>(<A HREF=\"../pkg/AnnotationType.html#optional()\">optional</A>=\"foo\",<A HREF=\"../pkg/AnnotationType.html#required()\">required</A>=1994),"},
++ "<a href=\"../pkg1/A.html#a()\">a</a>=<a href=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">@AnnotationType</a>(<a href=\"../pkg/AnnotationType.html#optional()\">optional</a>=\"foo\",<a href=\"../pkg/AnnotationType.html#required()\">required</a>=1994),"},
+
+ //String Array
+ {BUG_ID + FS + "pkg1" + FS + "B.html",
+- "<A HREF=\"../pkg1/A.html#sa()\">sa</A>={\"up\",\"down\"},"},
++ "<a href=\"../pkg1/A.html#sa()\">sa</a>={\"up\",\"down\"},"},
+
+ //Primitive
+ {BUG_ID + FS + "pkg1" + FS + "B.html",
+- "<A HREF=\"../pkg1/A.html#primitiveClassTest()\">primitiveClassTest</A>=boolean.class,"},
++ "<a href=\"../pkg1/A.html#primitiveClassTest()\">primitiveClassTest</a>=boolean.class,"},
+
+ //XXX: Add array test case after this if fixed:
+ //5020899: Incorrect internal representation of class-valued annotation elements
+
+ //Make sure that annotations are surrounded by <pre> and </pre>
+ {BUG_ID + FS + "pkg1" + FS + "B.html",
+- "<PRE><FONT SIZE=\"-1\"><A HREF=\"../pkg1/A.html\" title=\"annotation in pkg1\">@A</A>"},
++ "<pre><a href=\"../pkg1/A.html\" title=\"annotation in pkg1\">@A</a>"},
+ {BUG_ID + FS + "pkg1" + FS + "B.html",
+- "</FONT>public interface <STRONG>B</STRONG></PRE>"},
++ "public interface <strong>B</strong></pre>"},
+
+
+ //==============================================================
+ // Handle multiple bounds.
+ //==============================================================
+ {BUG_ID + FS + "pkg" + FS + "MultiTypeParameters.html",
+- "public &lt;T extends java.lang.Number & java.lang.Runnable&gt; T <STRONG>foo</STRONG>(T&nbsp;t)"},
++ "public&nbsp;&lt;T extends java.lang.Number & java.lang.Runnable&gt;&nbsp;T&nbsp;foo(T&nbsp;t)"},
+
+ //==============================================================
+ // Test Class-Use Documenation for Type Parameters.
+@@ -289,347 +314,356 @@
+
+ //ClassUseTest1: <T extends Foo & Foo2>
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo.html",
+- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
+- "Classes in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
+- "</A> with type parameters of type <A HREF=\"../../pkg2/Foo.html\" " +
+- "title=\"class in pkg2\">Foo</A></CAPTION>"
++ "<caption><span>Classes in <a href=\"../../pkg2/" +
++ "package-summary.html\">pkg2</a> with type parameters of " +
++ "type <a href=\"../../pkg2/Foo.html\" title=\"class in pkg2\">" +
++ "Foo</a></span><span class=\"tabEnd\">&nbsp;</span></caption>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo.html",
+- "<TD><CODE><STRONG><A HREF=\"../../pkg2/ClassUseTest1.html\" title=\"class in pkg2\">ClassUseTest1&lt;T extends Foo & Foo2&gt;</A></STRONG></CODE>"
++ "<td class=\"colLast\"><code><strong><a href=\"../../pkg2/" +
++ "ClassUseTest1.html\" title=\"class in pkg2\">ClassUseTest1" +
++ "&lt;T extends Foo & Foo2&gt;</a></strong></code>&nbsp;</td>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo.html",
+- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
+- "Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
+- "</A> with type parameters of type <A HREF=\"../../pkg2/Foo.html\" " +
+- "title=\"class in pkg2\">Foo</A></CAPTION>"
++ "<caption><span>Methods in <a href=\"../../pkg2/" +
++ "package-summary.html\">pkg2</a> with type parameters of " +
++ "type <a href=\"../../pkg2/Foo.html\" title=\"class in " +
++ "pkg2\">Foo</a></span><span class=\"tabEnd\">&nbsp;</span></caption>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo.html",
+- "<TD><CODE><STRONG>ClassUseTest1.</STRONG><STRONG><A HREF=\"../../pkg2/ClassUseTest1.html#method(T)\">method</A></STRONG>(T&nbsp;t)</CODE>"
++ "<td class=\"colLast\"><span class=\"strong\">ClassUseTest1." +
++ "</span><code><strong><a href=\"../../pkg2/" +
++ "ClassUseTest1.html#method(T)\">method</a></strong>" +
++ "(T&nbsp;t)</code>&nbsp;</td>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo.html",
+- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
+- "Fields in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
+- "</A> with type parameters of type <A HREF=\"../../pkg2/Foo.html\" " +
+- "title=\"class in pkg2\">Foo</A></CAPTION>"
++ "<caption><span>Fields in <a href=\"../../pkg2/" +
++ "package-summary.html\">pkg2</a> with type parameters of " +
++ "type <a href=\"../../pkg2/Foo.html\" title=\"class in pkg2\">" +
++ "Foo</a></span><span class=\"tabEnd\">&nbsp;</span></caption>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo.html",
+- "<A HREF=\"../../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest</A>&lt;<A HREF=\"../../pkg2/Foo.html\" title=\"class in pkg2\">Foo</A>&gt;</CODE></FONT></TD>"
++ "td class=\"colFirst\"><code><a href=\"../../pkg2/" +
++ "ParamTest.html\" title=\"class in pkg2\">ParamTest</a>" +
++ "&lt;<a href=\"../../pkg2/Foo.html\" title=\"class in pkg2\"" +
++ ">Foo</a>&gt;</code></td>"
+ },
+
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html",
+- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
+- "Fields in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
+- "</A> declared as <A HREF=\"../../pkg2/ParamTest.html\" " +
+- "title=\"class in pkg2\">ParamTest</A></CAPTION>"
++ "<caption><span>Fields in <a href=\"../../pkg2/" +
++ "package-summary.html\">pkg2</a> declared as <a href=\"../" +
++ "../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest" +
++ "</a></span><span class=\"tabEnd\">&nbsp;</span></caption>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html",
+- "<A HREF=\"../../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest</A>&lt;<A HREF=\"../../pkg2/Foo.html\" title=\"class in pkg2\">Foo</A>&gt;</CODE></FONT></TD>"
++ "<td class=\"colFirst\"><code><a href=\"../../pkg2/" +
++ "ParamTest.html\" title=\"class in pkg2\">ParamTest</a>&lt;<a " +
++ "href=\"../../pkg2/Foo.html\" title=\"class in pkg2\">Foo</a" +
++ ">&gt;</code></td>"
+ },
+
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo2.html",
+- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
+- "Classes in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
+- "</A> with type parameters of type <A HREF=\"../../pkg2/Foo2.html\" " +
+- "title=\"interface in pkg2\">Foo2</A></CAPTION>"
++ "<caption><span>Classes in <a href=\"../../pkg2/" +
++ "package-summary.html\">pkg2</a> with type parameters of " +
++ "type <a href=\"../../pkg2/Foo2.html\" title=\"interface " +
++ "in pkg2\">Foo2</a></span><span class=\"tabEnd\">&nbsp;" +
++ "</span></caption>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo2.html",
+- "<TD><CODE><STRONG><A HREF=\"../../pkg2/ClassUseTest1.html\" title=\"class in pkg2\">ClassUseTest1&lt;T extends Foo & Foo2&gt;</A></STRONG></CODE>"
++ "<td class=\"colLast\"><code><strong><a href=\"../../pkg2/" +
++ "ClassUseTest1.html\" title=\"class in pkg2\">" +
++ "ClassUseTest1&lt;T extends Foo & Foo2&gt;</a></strong>" +
++ "</code>&nbsp;</td>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo2.html",
+- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
+- "Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
+- "</A> with type parameters of type <A HREF=\"../../pkg2/Foo2.html\" " +
+- "title=\"interface in pkg2\">Foo2</A></CAPTION>"
++ "<caption><span>Methods in <a href=\"../../pkg2/" +
++ "package-summary.html\">pkg2</a> with type parameters of " +
++ "type <a href=\"../../pkg2/Foo2.html\" title=\"interface " +
++ "in pkg2\">Foo2</a></span><span class=\"tabEnd\">&nbsp;" +
++ "</span></caption>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo2.html",
+- "<TD><CODE><STRONG>ClassUseTest1.</STRONG><STRONG><A HREF=\"../../pkg2/ClassUseTest1.html#method(T)\">method</A></STRONG>(T&nbsp;t)</CODE>"
++ "<td class=\"colLast\"><span class=\"strong\">" +
++ "ClassUseTest1.</span><code><strong><a href=\"../../" +
++ "pkg2/ClassUseTest1.html#method(T)\">method</a></strong>" +
++ "(T&nbsp;t)</code>&nbsp;</td>"
+ },
+
+ //ClassUseTest2: <T extends ParamTest<Foo3>>
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html",
+- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
+- "Classes in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
+- "</A> with type parameters of type <A HREF=\"../../pkg2/ParamTest.html\" " +
+- "title=\"class in pkg2\">ParamTest</A></CAPTION>"
++ "<caption><span>Classes in <a href=\"../../pkg2/" +
++ "package-summary.html\">pkg2</a> with type parameters of " +
++ "type <a href=\"../../pkg2/ParamTest.html\" title=\"class " +
++ "in pkg2\">ParamTest</a></span><span class=\"tabEnd\">" +
++ "&nbsp;</span></caption>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html",
+- "<TD><CODE><STRONG><A HREF=\"../../pkg2/ClassUseTest2.html\" title=\"class in pkg2\">ClassUseTest2&lt;T extends ParamTest&lt;<A HREF=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">Foo3</A>&gt;&gt;</A></STRONG></CODE>"
++ "<td class=\"colLast\"><code><strong><a href=\"../../pkg2/" +
++ "ClassUseTest2.html\" title=\"class in pkg2\">ClassUseTest2&lt;T " +
++ "extends ParamTest&lt;<a href=\"../../pkg2/Foo3.html\" title=\"class " +
++ "in pkg2\">Foo3</a>&gt;&gt;</a></strong></code>&nbsp;</td>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html",
+- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
+- "Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
+- "</A> with type parameters of type <A HREF=\"../../pkg2/ParamTest.html\" " +
+- "title=\"class in pkg2\">ParamTest</A></CAPTION>"
++ "<caption><span>Methods in <a href=\"../../pkg2/" +
++ "package-summary.html\">pkg2</a> with type parameters of " +
++ "type <a href=\"../../pkg2/ParamTest.html\" title=\"class " +
++ "in pkg2\">ParamTest</a></span><span class=\"tabEnd\">" +
++ "&nbsp;</span></caption>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html",
+- "<TD><CODE><STRONG>ClassUseTest2.</STRONG><STRONG><A HREF=\"../../pkg2/ClassUseTest2.html#method(T)\">method</A></STRONG>(T&nbsp;t)</CODE>"
++ "<td class=\"colLast\"><span class=\"strong\">ClassUseTest2." +
++ "</span><code><strong><a href=\"../../pkg2/" +
++ "ClassUseTest2.html#method(T)\">method</a></strong>" +
++ "(T&nbsp;t)</code>&nbsp;</td>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html",
+- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
+- "Fields in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
+- "</A> declared as <A HREF=\"../../pkg2/ParamTest.html\" " +
+- "title=\"class in pkg2\">ParamTest</A></CAPTION>"
++ "<caption><span>Fields in <a href=\"../../pkg2/" +
++ "package-summary.html\">pkg2</a> declared as <a href=\"../" +
++ "../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest" +
++ "</a></span><span class=\"tabEnd\">&nbsp;</span></caption>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html",
+- "<A HREF=\"../../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest</A>&lt;<A HREF=\"../../pkg2/Foo.html\" title=\"class in pkg2\">Foo</A>&gt;</CODE></FONT></TD>"
++ "<td class=\"colFirst\"><code><a href=\"../../pkg2/" +
++ "ParamTest.html\" title=\"class in pkg2\">ParamTest</a>" +
++ "&lt;<a href=\"../../pkg2/Foo.html\" title=\"class in pkg2\">" +
++ "Foo</a>&gt;</code></td>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html",
+- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
+- "Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
+- "</A> with type parameters of type <A HREF=\"../../pkg2/ParamTest.html\" " +
+- "title=\"class in pkg2\">ParamTest</A></CAPTION>"
++ "<caption><span>Methods in <a href=\"../../pkg2/" +
++ "package-summary.html\">pkg2</a> with type parameters of " +
++ "type <a href=\"../../pkg2/ParamTest.html\" title=\"class " +
++ "in pkg2\">ParamTest</a></span><span class=\"tabEnd\">" +
++ "&nbsp;</span></caption>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest.html",
+- "&lt;T extends <A HREF=\"../../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest</A>&lt;<A HREF=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">Foo3</A>&gt;&gt;"
++ "<td class=\"colFirst\"><code>&lt;T extends <a href=\"../" +
++ "../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest" +
++ "</a>&lt;<a href=\"../../pkg2/Foo3.html\" title=\"class in " +
++ "pkg2\">Foo3</a>&gt;&gt;&nbsp;<br><a href=\"../../pkg2/" +
++ "ParamTest.html\" title=\"class in pkg2\">ParamTest</a>" +
++ "&lt;<a href=\"../../pkg2/Foo3.html\" title=\"class in " +
++ "pkg2\">Foo3</a>&gt;</code></td>"
+ },
+
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo3.html",
+- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
+- "Classes in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
+- "</A> with type parameters of type <A HREF=\"../../pkg2/Foo3.html\" " +
+- "title=\"class in pkg2\">Foo3</A></CAPTION>"
++ "<caption><span>Classes in <a href=\"../../pkg2/" +
++ "package-summary.html\">pkg2</a> with type parameters of " +
++ "type <a href=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">" +
++ "Foo3</a></span><span class=\"tabEnd\">&nbsp;</span></caption>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo3.html",
+- "<TD><CODE><STRONG><A HREF=\"../../pkg2/ClassUseTest2.html\" title=\"class in pkg2\">ClassUseTest2&lt;T extends ParamTest&lt;<A HREF=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">Foo3</A>&gt;&gt;</A></STRONG></CODE>"
++ "<td class=\"colLast\"><code><strong><a href=\"../../" +
++ "pkg2/ClassUseTest2.html\" title=\"class in pkg2\">" +
++ "ClassUseTest2&lt;T extends ParamTest&lt;<a href=\"../../" +
++ "pkg2/Foo3.html\" title=\"class in pkg2\">Foo3</a>&gt;&gt;" +
++ "</a></strong></code>&nbsp;</td>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo3.html",
+- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
+- "Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
+- "</A> with type parameters of type <A HREF=\"../../pkg2/Foo3.html\" " +
+- "title=\"class in pkg2\">Foo3</A></CAPTION>"
++ "<caption><span>Methods in <a href=\"../../pkg2/" +
++ "package-summary.html\">pkg2</a> with type parameters of " +
++ "type <a href=\"../../pkg2/Foo3.html\" title=\"class in " +
++ "pkg2\">Foo3</a></span><span class=\"tabEnd\">&nbsp;" +
++ "</span></caption>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo3.html",
+- "<TD><CODE><STRONG>ClassUseTest2.</STRONG><STRONG><A HREF=\"../../pkg2/ClassUseTest2.html#method(T)\">method</A></STRONG>(T&nbsp;t)</CODE>"
++ "<td class=\"colLast\"><span class=\"strong\">ClassUseTest2." +
++ "</span><code><strong><a href=\"../../pkg2/" +
++ "ClassUseTest2.html#method(T)\">method</a></strong>" +
++ "(T&nbsp;t)</code>&nbsp;</td>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo3.html",
+- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
+- "Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
+- "</A> that return types with arguments of type " +
+- "<A HREF=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">" +
+- "Foo3</A></CAPTION>"
++ "<caption><span>Methods in <a href=\"../../pkg2/" +
++ "package-summary.html\">pkg2</a> that return types with " +
++ "arguments of type <a href=\"../../pkg2/Foo3.html\" title" +
++ "=\"class in pkg2\">Foo3</a></span><span class=\"tabEnd\">" +
++ "&nbsp;</span></caption>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo3.html",
+- "&lt;T extends <A HREF=\"../../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest</A>&lt;<A HREF=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">Foo3</A>&gt;&gt;"
++ "<td class=\"colFirst\"><code>&lt;T extends <a href=\"../../" +
++ "pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest</a>&lt;" +
++ "<a href=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">Foo3" +
++ "</a>&gt;&gt;&nbsp;<br><a href=\"../../pkg2/ParamTest.html\" " +
++ "title=\"class in pkg2\">ParamTest</a>&lt;<a href=\"../../pkg2/" +
++ "Foo3.html\" title=\"class in pkg2\">Foo3</a>&gt;</code></td>"
+ },
+
+ //ClassUseTest3: <T extends ParamTest2<List<? extends Foo4>>>
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest2.html",
+- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
+- "Classes in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
+- "</A> with type parameters of type " +
+- "<A HREF=\"../../pkg2/ParamTest2.html\" title=\"class in pkg2\">" +
+- "ParamTest2</A></CAPTION>"
++ "<caption><span>Classes in <a href=\"../../pkg2/" +
++ "package-summary.html\">pkg2</a> with type parameters of " +
++ "type <a href=\"../../pkg2/ParamTest2.html\" title=\"class " +
++ "in pkg2\">ParamTest2</a></span><span class=\"tabEnd\">" +
++ "&nbsp;</span></caption>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest2.html",
+- "<TD><CODE><STRONG><A HREF=\"../../pkg2/ClassUseTest3.html\" title=\"class in pkg2\">ClassUseTest3&lt;T extends ParamTest2&lt;java.util.List&lt;? extends Foo4&gt;&gt;&gt;</A></STRONG></CODE>"
++ "<td class=\"colLast\"><code><strong><a href=\"../../pkg2/" +
++ "ClassUseTest3.html\" title=\"class in pkg2\">" +
++ "ClassUseTest3&lt;T extends ParamTest2&lt;java.util.List" +
++ "&lt;? extends Foo4&gt;&gt;&gt;</a></strong></code>&nbsp;</td>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest2.html",
+- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
+- "Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
+- "</A> with type parameters of type " +
+- "<A HREF=\"../../pkg2/ParamTest2.html\" title=\"class in pkg2\">" +
+- "ParamTest2</A></CAPTION>"
++ "<caption><span>Methods in <a href=\"../../pkg2/" +
++ "package-summary.html\">pkg2</a> with type parameters of " +
++ "type <a href=\"../../pkg2/ParamTest2.html\" title=\"class " +
++ "in pkg2\">ParamTest2</a></span><span class=\"tabEnd\">" +
++ "&nbsp;</span></caption>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest2.html",
+- "<TD><CODE><STRONG>ClassUseTest3.</STRONG><STRONG><A HREF=\"../../pkg2/ClassUseTest3.html#method(T)\">method</A></STRONG>(T&nbsp;t)</CODE>"
++ "<td class=\"colLast\"><span class=\"strong\">ClassUseTest3" +
++ ".</span><code><strong><a href=\"../../pkg2/ClassUseTest3." +
++ "html#method(T)\">method</a></strong>(T&nbsp;t)</code>&nbsp;</td>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest2.html",
+- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
+- "Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
+- "</A> with type parameters of type " +
+- "<A HREF=\"../../pkg2/ParamTest2.html\" title=\"class in pkg2\">" +
+- "ParamTest2</A></CAPTION>"
+- },
+- {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "ParamTest2.html",
+- "&lt;T extends <A HREF=\"../../pkg2/ParamTest2.html\" title=\"class in pkg2\">ParamTest2</A>&lt;java.util.List&lt;? extends <A HREF=\"../../pkg2/Foo4.html\" title=\"class in pkg2\">Foo4</A>&gt;&gt;&gt;"
++ "<td class=\"colFirst\"><code>&lt;T extends <a href=\"../" +
++ "../pkg2/ParamTest2.html\" title=\"class in pkg2\">" +
++ "ParamTest2</a>&lt;java.util.List&lt;? extends <a href=\".." +
++ "/../pkg2/Foo4.html\" title=\"class in pkg2\">Foo4</a>&gt;" +
++ "&gt;&gt;&nbsp;<br><a href=\"../../pkg2/ParamTest2.html\" " +
++ "title=\"class in pkg2\">ParamTest2</a>&lt;java.util.List" +
++ "&lt;? extends <a href=\"../../pkg2/Foo4.html\" title=\"" +
++ "class in pkg2\">Foo4</a>&gt;&gt;</code></td>"
+ },
+
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo4.html",
+- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
+- "Classes in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
+- "</A> with type parameters of type " +
+- "<A HREF=\"../../pkg2/Foo4.html\" title=\"class in pkg2\">" +
+- "Foo4</A></CAPTION>"
++ "<caption><span>Classes in <a href=\"../../pkg2/" +
++ "package-summary.html\">pkg2</a> with type parameters of " +
++ "type <a href=\"../../pkg2/Foo4.html\" title=\"class in " +
++ "pkg2\">Foo4</a></span><span class=\"tabEnd\">&nbsp;" +
++ "</span></caption>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo4.html",
+- "<TD><CODE><STRONG><A HREF=\"../../pkg2/ClassUseTest3.html\" title=\"class in pkg2\">ClassUseTest3&lt;T extends ParamTest2&lt;java.util.List&lt;? extends Foo4&gt;&gt;&gt;</A></STRONG></CODE>"
++ "<td class=\"colLast\"><code><strong><a href=\"../../" +
++ "pkg2/ClassUseTest3.html\" title=\"class in pkg2\">" +
++ "ClassUseTest3&lt;T extends ParamTest2&lt;java.util.List" +
++ "&lt;? extends Foo4&gt;&gt;&gt;</a></strong></code>&nbsp;</td>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo4.html",
+- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
+- "Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
+- "</A> with type parameters of type <A HREF=\"../../pkg2/Foo4.html\" " +
+- "title=\"class in pkg2\">Foo4</A></CAPTION>"
++ "<caption><span>Methods in <a href=\"../../pkg2/" +
++ "package-summary.html\">pkg2</a> with type parameters of " +
++ "type <a href=\"../../pkg2/Foo4.html\" title=\"class in " +
++ "pkg2\">Foo4</a></span><span class=\"tabEnd\">&nbsp;</span></caption>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo4.html",
+- "<TD><CODE><STRONG>ClassUseTest3.</STRONG><STRONG><A HREF=\"../../pkg2/ClassUseTest3.html#method(T)\">method</A></STRONG>(T&nbsp;t)</CODE>"
++ "<td class=\"colLast\"><span class=\"strong\">ClassUseTest3." +
++ "</span><code><strong><a href=\"../../pkg2/ClassUseTest3." +
++ "html#method(T)\">method</a></strong>(T&nbsp;t)</code>" +
++ "&nbsp;</td>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo4.html",
+- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
+- "Methods in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
+- "</A> that return types with arguments of type " +
+- "<A HREF=\"../../pkg2/Foo4.html\" title=\"class in pkg2\">" +
+- "Foo4</A></CAPTION>"
++ "<caption><span>Methods in <a href=\"../../pkg2/" +
++ "package-summary.html\">pkg2</a> that return types with " +
++ "arguments of type <a href=\"../../pkg2/Foo4.html\" " +
++ "title=\"class in pkg2\">Foo4</a></span><span class=\"" +
++ "tabEnd\">&nbsp;</span></caption>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo4.html",
+- "&lt;T extends <A HREF=\"../../pkg2/ParamTest2.html\" title=\"class in pkg2\">ParamTest2</A>&lt;java.util.List&lt;? extends <A HREF=\"../../pkg2/Foo4.html\" title=\"class in pkg2\">Foo4</A>&gt;&gt;&gt;"
++ "<td class=\"colFirst\"><code>&lt;T extends <a href=\"../" +
++ "../pkg2/ParamTest2.html\" title=\"class in pkg2\">" +
++ "ParamTest2</a>&lt;java.util.List&lt;? extends <a href=\".." +
++ "/../pkg2/Foo4.html\" title=\"class in pkg2\">Foo4</a>&gt;" +
++ "&gt;&gt;&nbsp;<br><a href=\"../../pkg2/ParamTest2.html\" " +
++ "title=\"class in pkg2\">ParamTest2</a>&lt;java.util.List" +
++ "&lt;? extends <a href=\"../../pkg2/Foo4.html\" title=\"" +
++ "class in pkg2\">Foo4</a>&gt;&gt;</code></td>"
+ },
+
+ //Type parameters in constructor and method args
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo4.html",
+- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
+- "Method parameters in <A HREF=\"../../pkg2/package-summary.html\">pkg2" +
+- "</A> with type arguments of type <A HREF=\"../../pkg2/Foo4.html\" " +
+- "title=\"class in pkg2\">Foo4</A></CAPTION>" + NL +
+- "<TR>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
+- " NOWRAP>Modifier and Type" +
+- "</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
+- " NOWRAP>Method and Description</TH>" + NL +
+- "</TR>" + NL +
+- "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL +
+- "<TD ALIGN=\"right\" VALIGN=\"top\" WIDTH=\"1%\"><FONT SIZE=\"-1\">" + NL +
+- "<CODE>&nbsp;void</CODE></FONT></TD>" + NL +
+- "<TD><CODE><STRONG>ClassUseTest3.</STRONG><STRONG>" +
+- "<A HREF=\"../../pkg2/ClassUseTest3.html#method(java.util.Set)\">" +
+- "method</A></STRONG>(java.util.Set&lt;<A HREF=\"../../pkg2/Foo4.html\" " +
+- "title=\"class in pkg2\">Foo4</A>&gt;&nbsp;p)</CODE>"
++ "<caption><span>Method parameters in <a href=\"../../pkg2/" +
++ "package-summary.html\">pkg2</a> with type arguments of " +
++ "type <a href=\"../../pkg2/Foo4.html\" title=\"class in " +
++ "pkg2\">Foo4</a></span><span class=\"tabEnd\">&nbsp;" +
++ "</span></caption>" + NL + "<tr>" + NL +
++ "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>" + NL +
++ "<th class=\"colLast\" scope=\"col\">Method and Description</th>" + NL +
++ "</tr>" + NL + "<tbody>" + NL + "<tr class=\"altColor\">" + NL +
++ "<td class=\"colFirst\"><code>void</code></td>" + NL +
++ "<td class=\"colLast\"><span class=\"strong\">ClassUseTest3." +
++ "</span><code><strong><a href=\"../../pkg2/ClassUseTest3." +
++ "html#method(java.util.Set)\">method</a></strong>(java." +
++ "util.Set&lt;<a href=\"../../pkg2/Foo4.html\" title=\"" +
++ "class in pkg2\">Foo4</a>&gt;&nbsp;p)</code>&nbsp;</td>" + NL +
++ "</tr>" + NL + "</tbody>"
+ },
+ {BUG_ID + FS + "pkg2" + FS + "class-use" + FS + "Foo4.html",
+- "<CAPTION CLASS=\"TableSubCaption\">" + NL +
+- "Constructor parameters in <A HREF=\"../../pkg2/package-summary.html\">" +
+- "pkg2</A> with type arguments of type <A HREF=\"../../pkg2/Foo4.html\" " +
+- "title=\"class in pkg2\">Foo4</A></CAPTION>" + NL +
+- "<TR>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
+- " NOWRAP>Constructor and Description" +
+- "</TH>" + NL + "</TR>" + NL +
+- "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL +
+- "<TD><CODE><STRONG><A HREF=\"../../pkg2/ClassUseTest3.html#ClassUseTest3" +
+- "(java.util.Set)\">ClassUseTest3</A></STRONG>(java.util.Set&lt;" +
+- "<A HREF=\"../../pkg2/Foo4.html\" title=\"class in pkg2\">" +
+- "Foo4</A>&gt;&nbsp;p)</CODE>"
++ "<caption><span>Constructor parameters in <a href=\"../../" +
++ "pkg2/package-summary.html\">pkg2</a> with type arguments " +
++ "of type <a href=\"../../pkg2/Foo4.html\" title=\"class in " +
++ "pkg2\">Foo4</a></span><span class=\"tabEnd\">&nbsp;" +
++ "</span></caption>"
+ },
+
+ //=================================
+ // Annotatation Type Usage
+ //=================================
+ {BUG_ID + FS + "pkg" + FS + "class-use" + FS + "AnnotationType.html",
+- "Packages with annotations of type " +
+- "<A HREF=\"../../pkg/AnnotationType.html\" " +
+- "title=\"annotation in pkg\">AnnotationType</A></CAPTION>" + NL +
+- "<TR>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
+- " NOWRAP>Package" +
+- "</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
+- " NOWRAP>Description</TH>" + NL + "</TR>" + NL +
+- "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL +
+- "<TD><A HREF=\"../../pkg/package-summary.html\"><STRONG>pkg" +
+- "</STRONG></A></TD>"
++ "<caption><span>Packages with annotations of type <a href=\"" +
++ "../../pkg/AnnotationType.html\" title=\"annotation in pkg\">" +
++ "AnnotationType</a></span><span class=\"tabEnd\">&nbsp;" +
++ "</span></caption>"
+ },
+
+ {BUG_ID + FS + "pkg" + FS + "class-use" + FS + "AnnotationType.html",
+- "Classes in <A HREF=\"../../pkg/package-summary.html\">pkg" +
+- "</A> with annotations of type <A HREF=\"../../pkg/AnnotationType.html\" " +
+- "title=\"annotation in pkg\">AnnotationType</A></CAPTION>" + NL +
+- "<TR>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
+- " NOWRAP>Modifier and Type" +
+- "</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
+- " NOWRAP>Class and Description</TH>" + NL +
+- "</TR>" + NL +
+- "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL +
+- "<TD ALIGN=\"right\" VALIGN=\"top\" WIDTH=\"1%\"><FONT SIZE=\"-1\">" + NL +
+- "<CODE>&nbsp;class</CODE></FONT></TD>" + NL +
+- "<TD><CODE><STRONG><A HREF=\"../../pkg/AnnotationTypeUsage.html\" " +
+- "title=\"class in pkg\">AnnotationTypeUsage</A></STRONG></CODE>"
++ "<caption><span>Classes in <a href=\"../../pkg/" +
++ "package-summary.html\">pkg</a> with annotations of type " +
++ "<a href=\"../../pkg/AnnotationType.html\" title=\"" +
++ "annotation in pkg\">AnnotationType</a></span><span class" +
++ "=\"tabEnd\">&nbsp;</span></caption>"
+ },
+
+ {BUG_ID + FS + "pkg" + FS + "class-use" + FS + "AnnotationType.html",
+- "Fields in <A HREF=\"../../pkg/package-summary.html\">pkg" +
+- "</A> with annotations of type <A HREF=\"../../pkg/AnnotationType.html\" " +
+- "title=\"annotation in pkg\">AnnotationType</A></CAPTION>" + NL +
+- "<TR>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
+- " NOWRAP>Modifier and Type" +
+- "</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
+- " NOWRAP>Field and Description</TH>" + NL +
+- "</TR>" + NL +
+- "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL +
+- "<TD ALIGN=\"right\" VALIGN=\"top\" WIDTH=\"1%\"><FONT SIZE=\"-1\">" + NL +
+- "<CODE>&nbsp;int</CODE></FONT></TD>" + NL +
+- "<TD><CODE><STRONG>AnnotationTypeUsage.</STRONG><STRONG>" +
+- "<A HREF=\"../../pkg/AnnotationTypeUsage.html#field\">field" +
+- "</A></STRONG></CODE>"
++ "<caption><span>Fields in <a href=\"../../pkg/" +
++ "package-summary.html\">pkg</a> with annotations of type " +
++ "<a href=\"../../pkg/AnnotationType.html\" title=\"annotation " +
++ "in pkg\">AnnotationType</a></span><span class=\"tabEnd\">" +
++ "&nbsp;</span></caption>"
+ },
+
+ {BUG_ID + FS + "pkg" + FS + "class-use" + FS + "AnnotationType.html",
+- "Methods in <A HREF=\"../../pkg/package-summary.html\">pkg" +
+- "</A> with annotations of type <A HREF=\"../../pkg/AnnotationType.html\" " +
+- "title=\"annotation in pkg\">AnnotationType</A></CAPTION>" + NL +
+- "<TR>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
+- " NOWRAP>Modifier and Type" +
+- "</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
+- " NOWRAP>Method and Description</TH>" + NL +
+- "</TR>" + NL +
+- "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL +
+- "<TD ALIGN=\"right\" VALIGN=\"top\" WIDTH=\"1%\"><FONT SIZE=\"-1\">" + NL +
+- "<CODE>&nbsp;void</CODE></FONT></TD>" + NL +
+- "<TD><CODE><STRONG>AnnotationTypeUsage.</STRONG><STRONG>" +
+- "<A HREF=\"../../pkg/AnnotationTypeUsage.html#method()\">" +
+- "method</A></STRONG>()</CODE>"
++ "<caption><span>Methods in <a href=\"../../pkg/" +
++ "package-summary.html\">pkg</a> with annotations of type " +
++ "<a href=\"../../pkg/AnnotationType.html\" title=\"annotation " +
++ "in pkg\">AnnotationType</a></span><span class=\"tabEnd\">" +
++ "&nbsp;</span></caption>"
+ },
+
+ {BUG_ID + FS + "pkg" + FS + "class-use" + FS + "AnnotationType.html",
+- "Method parameters in <A HREF=\"../../pkg/package-summary.html\">pkg" +
+- "</A> with annotations of type <A HREF=\"../../pkg/AnnotationType.html\" " +
+- "title=\"annotation in pkg\">AnnotationType</A></CAPTION>" + NL +
+- "<TR>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
+- " NOWRAP>Modifier and Type" +
+- "</TH>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
+- " NOWRAP>Method and Description</TH>" + NL +
+- "</TR>" + NL +
+- "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL +
+- "<TD ALIGN=\"right\" VALIGN=\"top\" WIDTH=\"1%\"><FONT SIZE=\"-1\">" + NL +
+- "<CODE>&nbsp;void</CODE></FONT></TD>" + NL +
+- "<TD><CODE><STRONG>AnnotationTypeUsage.</STRONG><STRONG>" +
+- "<A HREF=\"../../pkg/AnnotationTypeUsage.html#methodWithParams" +
+- "(int, int)\">methodWithParams</A></STRONG>(int&nbsp;documented," + NL +
+- " int&nbsp;undocmented)</CODE>"
++ "<caption><span>Method parameters in <a href=\"../../pkg/" +
++ "package-summary.html\">pkg</a> with annotations of type " +
++ "<a href=\"../../pkg/AnnotationType.html\" title=\"annotation " +
++ "in pkg\">AnnotationType</a></span><span class=\"tabEnd\">" +
++ "&nbsp;</span></caption>"
+ },
+
+ {BUG_ID + FS + "pkg" + FS + "class-use" + FS + "AnnotationType.html",
+- "Constructors in <A HREF=\"../../pkg/package-summary.html\">pkg" +
+- "</A> with annotations of type <A HREF=\"../../pkg/AnnotationType.html\" " +
+- "title=\"annotation in pkg\">AnnotationType</A></CAPTION>" + NL +
+- "<TR>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
+- " NOWRAP>Constructor and Description" +
+- "</TH>" + NL + "</TR>" + NL +
+- "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL +
+- "<TD><CODE><STRONG><A HREF=\"../../pkg/" +
+- "AnnotationTypeUsage.html#AnnotationTypeUsage()\">" +
+- "AnnotationTypeUsage</A></STRONG>()</CODE>"
++ "<caption><span>Constructors in <a href=\"../../pkg/" +
++ "package-summary.html\">pkg</a> with annotations of type " +
++ "<a href=\"../../pkg/AnnotationType.html\" title=\"annotation " +
++ "in pkg\">AnnotationType</a></span><span class=\"tabEnd\">" +
++ "&nbsp;</span></caption>"
+ },
+
+ {BUG_ID + FS + "pkg" + FS + "class-use" + FS + "AnnotationType.html",
+- "Constructor parameters in <A HREF=\"../../pkg/package-summary.html\">pkg" +
+- "</A> with annotations of type <A HREF=\"../../pkg/AnnotationType.html\" " +
+- "title=\"annotation in pkg\">AnnotationType</A></CAPTION>" + NL +
+- "<TR>" + NL + "<TH CLASS=\"TableHeader\" SCOPE=\"col\"" +
+- " NOWRAP>Constructor and Description" +
+- "</TH>" + NL + "</TR>" + NL +
+- "<TR BGCOLOR=\"white\" CLASS=\"TableRowColor\">" + NL +
+- "<TD><CODE><STRONG><A HREF=\"../../pkg/" +
+- "AnnotationTypeUsage.html#AnnotationTypeUsage(int, int)\">" +
+- "AnnotationTypeUsage</A></STRONG>(int&nbsp;documented," + NL +
+- " int&nbsp;undocmented)</CODE>"
++ "<caption><span>Constructor parameters in <a href=\"../../" +
++ "pkg/package-summary.html\">pkg</a> with annotations of " +
++ "type <a href=\"../../pkg/AnnotationType.html\" title=\"" +
++ "annotation in pkg\">AnnotationType</a></span><span class=\"" +
++ "tabEnd\">&nbsp;</span></caption>"
+ },
+
+ //=================================
+ // TYPE PARAMETER IN INDEX
+ //=================================
+ {BUG_ID + FS + "index-all.html",
+- "<A HREF=\"./pkg2/Foo.html#method(java.util.Vector)\"><STRONG>method(Vector&lt;Object&gt;)</STRONG></A>"
++ "<span class=\"strong\"><a href=\"./pkg2/Foo.html#method(java.util.Vector)\">" +
++ "method(Vector&lt;Object&gt;)</a></span>"
+ },
+ //=================================
+ // TYPE PARAMETER IN INDEX
+ //=================================
+ {BUG_ID + FS + "index-all.html",
+- "<A HREF=\"./pkg2/Foo.html#method(java.util.Vector)\"><STRONG>method(Vector&lt;Object&gt;)</STRONG></A>"
++ "<span class=\"strong\"><a href=\"./pkg2/Foo.html#method(java.util.Vector)\">" +
++ "method(Vector&lt;Object&gt;)</a></span>"
+ },
+ };
+ private static final String[][] NEGATED_TEST = {
+@@ -637,15 +671,15 @@
+ // ENUM TESTING
+ //=================================
+ //NO constructor section
+- {BUG_ID + FS + "pkg" + FS + "Coin.html", "<STRONG>Constructor Summary</STRONG>"},
++ {BUG_ID + FS + "pkg" + FS + "Coin.html", "<span class=\"strong\">Constructor Summary</span>"},
+ //=================================
+ // TYPE PARAMETER TESTING
+ //=================================
+ //No type parameters in class frame.
+ {BUG_ID + FS + "allclasses-frame.html",
+- "<A HREF=\"../pkg/TypeParameters.html\" title=\"class in pkg\">" +
+- "TypeParameters</A>&lt;<A HREF=\"../pkg/TypeParameters.html\" " +
+- "title=\"type parameter in TypeParameters\">E</A>&gt;"
++ "<a href=\"../pkg/TypeParameters.html\" title=\"class in pkg\">" +
++ "TypeParameters</a>&lt;<a href=\"../pkg/TypeParameters.html\" " +
++ "title=\"type parameter in TypeParameters\">E</a>&gt;"
+ },
+
+ //==============================================================
+@@ -654,31 +688,27 @@
+
+ //CLASS
+ {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html",
+- "<FONT SIZE=\"-1\">" + NL +
+- "<A HREF=\"../pkg/AnnotationTypeUndocumented.html\" title=\"annotation in pkg\">@AnnotationTypeUndocumented</A>(<A HREF=\"../pkg/AnnotationType.html#optional\">optional</A>=\"Class Annotation\"," + NL +
+- " <A HREF=\"../pkg/AnnotationType.html#required\">required</A>=1994)" + NL +
+- "</FONT>public class <STRONG>AnnotationTypeUsage</STRONG></DT><DT>extends java.lang.Object</DT></DL>"},
++ "<a href=\"../pkg/AnnotationTypeUndocumented.html\" title=\"annotation in pkg\">@AnnotationTypeUndocumented</a>(<a href=\"../pkg/AnnotationType.html#optional\">optional</a>=\"Class Annotation\"," + NL +
++ " <a href=\"../pkg/AnnotationType.html#required\">required</a>=1994)" + NL +
++ "public class <strong>AnnotationTypeUsage</strong></dt><dt>extends java.lang.Object</dt>"},
+
+ //FIELD
+ {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html",
+- "<FONT SIZE=\"-1\">" + NL +
+- "<A HREF=\"../pkg/AnnotationTypeUndocumented.html\" title=\"annotation in pkg\">@AnnotationTypeUndocumented</A>(<A HREF=\"../pkg/AnnotationType.html#optional\">optional</A>=\"Field Annotation\"," + NL +
+- " <A HREF=\"../pkg/AnnotationType.html#required\">required</A>=1994)" + NL +
+- "</FONT>public int <STRONG>field</STRONG>"},
++ "<a href=\"../pkg/AnnotationTypeUndocumented.html\" title=\"annotation in pkg\">@AnnotationTypeUndocumented</a>(<a href=\"../pkg/AnnotationType.html#optional\">optional</a>=\"Field Annotation\"," + NL +
++ " <a href=\"../pkg/AnnotationType.html#required\">required</a>=1994)" + NL +
++ "public int <strong>field</strong>"},
+
+ //CONSTRUCTOR
+ {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html",
+- "<FONT SIZE=\"-1\">" + NL +
+- "<A HREF=\"../pkg/AnnotationTypeUndocumented.html\" title=\"annotation in pkg\">@AnnotationTypeUndocumented</A>(<A HREF=\"../pkg/AnnotationType.html#optional\">optional</A>=\"Constructor Annotation\"," + NL +
+- " <A HREF=\"../pkg/AnnotationType.html#required\">required</A>=1994)" + NL +
+- "</FONT>public <STRONG>AnnotationTypeUsage</STRONG>()"},
++ "<a href=\"../pkg/AnnotationTypeUndocumented.html\" title=\"annotation in pkg\">@AnnotationTypeUndocumented</a>(<a href=\"../pkg/AnnotationType.html#optional\">optional</a>=\"Constructor Annotation\"," + NL +
++ " <a href=\"../pkg/AnnotationType.html#required\">required</a>=1994)" + NL +
++ "public <strong>AnnotationTypeUsage</strong>()"},
+
+ //METHOD
+ {BUG_ID + FS + "pkg" + FS + "AnnotationTypeUsage.html",
+- "<FONT SIZE=\"-1\">" + NL +
+- "<A HREF=\"../pkg/AnnotationTypeUndocumented.html\" title=\"annotation in pkg\">@AnnotationTypeUndocumented</A>(<A HREF=\"../pkg/AnnotationType.html#optional\">optional</A>=\"Method Annotation\"," + NL +
+- " <A HREF=\"../pkg/AnnotationType.html#required\">required</A>=1994)" + NL +
+- "</FONT>public void <STRONG>method</STRONG>()"},
++ "<a href=\"../pkg/AnnotationTypeUndocumented.html\" title=\"annotation in pkg\">@AnnotationTypeUndocumented</a>(<a href=\"../pkg/AnnotationType.html#optional\">optional</a>=\"Method Annotation\"," + NL +
++ " <a href=\"../pkg/AnnotationType.html#required\">required</a>=1994)" + NL +
++ "public void <strong>method</strong>()"},
+
+ //=================================
+ // Make sure annotation types do not
+diff --git a/test/com/sun/javadoc/testOverridenMethods/TestMultiInheritence.java b/test/com/sun/javadoc/testOverridenMethods/TestMultiInheritence.java
+--- langtools/test/com/sun/javadoc/testOverridenMethods/TestMultiInheritence.java
++++ langtools/test/com/sun/javadoc/testOverridenMethods/TestMultiInheritence.java
+@@ -46,27 +46,34 @@
+ //Method foo() is inherited from BOTH I2 and I3
+ private static final String[][] TEST = {
+ {BUG_ID + FS + "pkg3" + FS + "I1.html",
+- "Methods inherited from interface pkg3." + "<A HREF=\"../pkg3/I2.html\" title=\"interface in pkg3\">I2</A>"},
++ "Methods inherited from interface&nbsp;pkg3." +
++ "<a href=\"../pkg3/I2.html\" title=\"interface in pkg3\">" +
++ "I2</a>"},
+ {BUG_ID + FS + "pkg3" + FS +"I1.html",
+- "Methods inherited from interface pkg3." +
+- "<A HREF=\"../pkg3/I3.html\" title=\"interface in pkg3\">I3</A>"},
++ "Methods inherited from interface&nbsp;pkg3." +
++ "<a href=\"../pkg3/I3.html\" title=\"interface in pkg3\">" +
++ "I3</a>"},
+ {BUG_ID + FS + "pkg3" + FS + "I0.html",
+- "Methods inherited from interface pkg3." +
+- "<A HREF=\"../pkg3/I2.html\" title=\"interface in pkg3\">I2</A>"},
++ "Methods inherited from interface&nbsp;pkg3." +
++ "<a href=\"../pkg3/I2.html\" title=\"interface in pkg3\">" +
++ "I2</a>"},
+ {BUG_ID + FS + "pkg3" + FS +"I0.html",
+- "Methods inherited from interface pkg3." +
+- "<A HREF=\"../pkg3/I3.html\" title=\"interface in pkg3\">I3</A>"},
++ "Methods inherited from interface&nbsp;pkg3." +
++ "<a href=\"../pkg3/I3.html\" title=\"interface in pkg3\">" +
++ "I3</a>"},
+ };
+
+ //Method foo() is NOT inherited from I4 because it is overriden by
+ //I3.
+ private static final String[][] NEGATED_TEST = {
+ {BUG_ID + FS + "pkg3" + FS + "I1.html",
+- "Methods inherited from interface pkg3." +
+- "<A HREF=\"../pkg3/I4.html\" title=\"interface in pkg3\">I4</A>"},
++ "Methods inherited from interface&nbsp;pkg3." +
++ "<a href=\"../pkg3/I4.html\" title=\"interface in pkg3\">" +
++ "I4</a>"},
+ {BUG_ID + FS + "pkg3" + FS + "I0.html",
+- "Methods inherited from interface pkg3." +
+- "<A HREF=\"../pkg3/I4.html\" title=\"interface in pkg3\">I4</A>"},
++ "Methods inherited from interface&nbsp;pkg3." +
++ "<a href=\"../pkg3/I4.html\" title=\"interface in pkg3\">" +
++ "I4</a>"},
+ };
+
+ /**
+diff --git a/test/com/sun/javadoc/testOverridenMethods/TestOverridenMethodDocCopy.java b/test/com/sun/javadoc/testOverridenMethods/TestOverridenMethodDocCopy.java
+--- langtools/test/com/sun/javadoc/testOverridenMethods/TestOverridenMethodDocCopy.java
++++ langtools/test/com/sun/javadoc/testOverridenMethods/TestOverridenMethodDocCopy.java
+@@ -46,9 +46,9 @@
+ //Input for string search tests.
+ private static final String[][] TEST = {
+ {BUG_ID + FS + "pkg1" + FS + "SubClass.html",
+- "<STRONG>Description copied from class: <CODE>" +
+- "<A HREF=\"../pkg1/BaseClass.html#overridenMethodWithDocsToCopy()\">" +
+- "BaseClass</A></CODE></STRONG>"
++ "<strong>Description copied from class:&nbsp;<code>" +
++ "<a href=\"../pkg1/BaseClass.html#overridenMethodWithDocsToCopy()\">" +
++ "BaseClass</a></code></strong>"
+ }
+ };
+ private static final String[][] NEGATED_TEST = NO_TEST;
+diff --git a/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethods.java b/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethods.java
+--- langtools/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethods.java
++++ langtools/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethods.java
+@@ -40,11 +40,13 @@
+ private static final String[][] TEST = {
+ //The public method should be overriden
+ {BUG_ID + FS + "pkg1" + FS + "SubClass.html",
+- "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#publicMethod"},
++ "<dt><strong>Overrides:</strong></dt>" + NL +
++ "<dd><code><a href=\"../pkg1/BaseClass.html#publicMethod"},
+
+ //The public method in different package should be overriden
+ {BUG_ID + FS + "pkg2" + FS + "SubClass.html",
+- "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#publicMethod"}
++ "<dt><strong>Overrides:</strong></dt>" + NL +
++ "<dd><code><a href=\"../pkg1/BaseClass.html#publicMethod"}
+ };
+
+ private static final String[][] NEGATED_TEST = {
+@@ -52,20 +54,23 @@
+ //The package private method should be overriden since the base and sub class are in the same
+ //package. However, the link should not show up because the package private methods are not documented.
+ {BUG_ID + FS + "pkg1" + FS + "SubClass.html",
+- "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#packagePrivateMethod"},
++ "<dt><strong>Overrides:</strong></dt>" + NL +
++ "<dd><code><a href=\"../pkg1/BaseClass.html#packagePrivateMethod"},
+
+ //The private method in should not be overriden
+ {BUG_ID + FS + "pkg1" + FS + "SubClass.html",
+- "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#privateMethod"},
++ "<dt><strong>Overrides:</strong></dt>" + NL +
++ "<dd><code><a href=\"../pkg1/BaseClass.html#privateMethod"},
+
+ //The private method in different package should not be overriden
+ {BUG_ID + FS + "pkg2" + FS + "SubClass.html",
+- "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#privateMethod"},
++ "<dt><strong>Overrides:</strong></dt>" + NL +
++ "<dd><code><a href=\"../pkg1/BaseClass.html#privateMethod"},
+
+ //The package private method should not be overriden since the base and sub class are in
+ //different packages.
+ {BUG_ID + FS + "pkg2" + FS + "SubClass.html",
+- "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#packagePrivateMethod"}
++ "Overrides:</strong></dt><dd><code><a href=\"../pkg1/BaseClass.html#packagePrivateMethod"}
+ };
+
+ private static final String[] ARGS =
+diff --git a/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethodsWithPackageFlag.java b/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethodsWithPackageFlag.java
+--- langtools/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethodsWithPackageFlag.java
++++ langtools/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethodsWithPackageFlag.java
+@@ -40,32 +40,44 @@
+ private static final String[][] TEST = {
+ //The public method should be overriden
+ {BUG_ID + FS + "pkg1" + FS + "SubClass.html",
+- "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#publicMethod"},
++ "<dt><strong>Overrides:</strong></dt>" + NL +
++ "<dd><code><a href=\"../pkg1/BaseClass.html#publicMethod()\">" +
++ "publicMethod</a></code>&nbsp;in class&nbsp;<code>" +
++ "<a href=\"../pkg1/BaseClass.html\" title=\"class in pkg1\">BaseClass</a></code></dd>"},
+
+ //The public method in different package should be overriden
+ {BUG_ID + FS + "pkg2" + FS + "SubClass.html",
+- "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#publicMethod"},
++ "<dt><strong>Overrides:</strong></dt>" + NL +
++ "<dd><code><a href=\"../pkg1/BaseClass.html#publicMethod()\">" +
++ "publicMethod</a></code>&nbsp;in class&nbsp;<code>" +
++ "<a href=\"../pkg1/BaseClass.html\" title=\"class in pkg1\">BaseClass</a></code></dd>"},
+
+ //The package private method should be overriden since the base and sub class are in the same
+ //package.
+ {BUG_ID + FS + "pkg1" + FS + "SubClass.html",
+- "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#packagePrivateMethod"}
++ "<dt><strong>Overrides:</strong></dt>" + NL +
++ "<dd><code><a href=\"../pkg1/BaseClass.html#packagePrivateMethod()\">" +
++ "packagePrivateMethod</a></code>&nbsp;in class&nbsp;<code>" +
++ "<a href=\"../pkg1/BaseClass.html\" title=\"class in pkg1\">BaseClass</a></code></dd>"}
+ };
+
+ private static final String[][] NEGATED_TEST = {
+
+ //The private method in should not be overriden
+ {BUG_ID + FS + "pkg1" + FS + "SubClass.html",
+- "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#privateMethod"},
++ "<dt><strong>Overrides:</strong></dt>" + NL +
++ "<dd><code><a href=\"../pkg1/BaseClass.html#privateMethod()\">"},
+
+ //The private method in different package should not be overriden
+ {BUG_ID + FS + "pkg2" + FS + "SubClass.html",
+- "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#privateMethod"},
++ "<dt><strong>Overrides:</strong></dt>" + NL +
++ "<dd><code><a href=\"../pkg1/BaseClass.html#privateMethod()\">"},
+
+ //The package private method should not be overriden since the base and sub class are in
+ //different packages.
+ {BUG_ID + FS + "pkg2" + FS + "SubClass.html",
+- "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#packagePrivateMethod"},
++ "<dt><strong>Overrides:</strong></dt>" + NL +
++ "<dd><code><a href=\"../pkg1/BaseClass.html#packagePrivateMethod()\">"},
+ };
+
+ private static final String[] ARGS =
+diff --git a/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethodsWithPrivateFlag.java b/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethodsWithPrivateFlag.java
+--- langtools/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethodsWithPrivateFlag.java
++++ langtools/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethodsWithPrivateFlag.java
+@@ -40,32 +40,38 @@
+ private static final String[][] TEST = {
+ //The public method should be overriden
+ {BUG_ID + FS + "pkg1" + FS + "SubClass.html",
+- "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#publicMethod"},
++ "<dt><strong>Overrides:</strong></dt>" + NL +
++ "<dd><code><a href=\"../pkg1/BaseClass.html#publicMethod"},
+
+ //The package private method should be overriden since the base and sub class are in the same
+ //package.
+ {BUG_ID + FS + "pkg1" + FS + "SubClass.html",
+- "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#packagePrivateMethod"},
++ "<dt><strong>Overrides:</strong></dt>" + NL +
++ "<dd><code><a href=\"../pkg1/BaseClass.html#packagePrivateMethod"},
+
+ //The public method in different package should be overriden
+ {BUG_ID + FS + "pkg2" + FS + "SubClass.html",
+- "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#publicMethod"},
++ "<dt><strong>Overrides:</strong></dt>" + NL +
++ "<dd><code><a href=\"../pkg1/BaseClass.html#publicMethod"},
+ };
+
+ private static final String[][] NEGATED_TEST = {
+
+ //The private method in should not be overriden
+ {BUG_ID + FS + "pkg1" + FS + "SubClass.html",
+- "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#privateMethod"},
++ "<dt><strong>Overrides:</strong></dt>" + NL +
++ "<dd><code><a href=\"../pkg1/BaseClass.html#privateMethod"},
+
+ //The private method in different package should not be overriden
+ {BUG_ID + FS + "pkg2" + FS + "SubClass.html",
+- "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#privateMethod"},
++ "<dt><strong>Overrides:</strong></dt>" + NL +
++ "<dd><code><a href=\"../pkg1/BaseClass.html#privateMethod"},
+
+ //The package private method should not be overriden since the base and sub class are in
+ //different packages.
+ {BUG_ID + FS + "pkg2" + FS + "SubClass.html",
+- "Overrides:</STRONG></DT><DD><CODE><A HREF=\"../pkg1/BaseClass.html#packagePrivateMethod"}
++ "<dt><strong>Overrides:</strong></dt>" + NL +
++ "<dd><code><a href=\"../pkg1/BaseClass.html#packagePrivateMethod"}
+
+
+ };
+diff --git a/test/com/sun/javadoc/testPackagePage/TestPackagePage.java b/test/com/sun/javadoc/testPackagePage/TestPackagePage.java
+--- langtools/test/com/sun/javadoc/testPackagePage/TestPackagePage.java
++++ langtools/test/com/sun/javadoc/testPackagePage/TestPackagePage.java
+@@ -43,37 +43,32 @@
+ },
+ //With just one package, all general pages link to the single package page.
+ {BUG_ID + "-1" + FS + "com" + FS + "pkg" + FS + "C.html",
+- "<A HREF=\"../../com/pkg/package-summary.html\">" +
+- "<FONT CLASS=\"NavBarFont1\"><STRONG>Package</STRONG></FONT></A>"
++ "<a href=\"../../com/pkg/package-summary.html\">Package</a>"
+ },
+ {BUG_ID + "-1" + FS + "com" + FS + "pkg" + FS + "package-tree.html",
+- "<A HREF=\"../../com/pkg/package-summary.html\">" +
+- "<FONT CLASS=\"NavBarFont1\"><STRONG>Package</STRONG></FONT></A>"
++ "<li><a href=\"../../com/pkg/package-summary.html\">Package</a></li>"
+ },
+ {BUG_ID + "-1" + FS + "deprecated-list.html",
+- "<A HREF=\"com/pkg/package-summary.html\">" +
+- "<FONT CLASS=\"NavBarFont1\"><STRONG>Package</STRONG></FONT></A>"
++ "<li><a href=\"com/pkg/package-summary.html\">Package</a></li>"
+ },
+ {BUG_ID + "-1" + FS + "index-all.html",
+- "<A HREF=\"./com/pkg/package-summary.html\">" +
+- "<FONT CLASS=\"NavBarFont1\"><STRONG>Package</STRONG></FONT></A>"
++ "<li><a href=\"./com/pkg/package-summary.html\">Package</a></li>"
+ },
+ {BUG_ID + "-1" + FS + "help-doc.html",
+- "<A HREF=\"com/pkg/package-summary.html\">" +
+- "<FONT CLASS=\"NavBarFont1\"><STRONG>Package</STRONG></FONT></A>"
++ "<li><a href=\"com/pkg/package-summary.html\">Package</a></li>"
+ },
+ };
+
+ private static final String[][] TEST2 = {
+ //With multiple packages, there is no package link in general pages.
+ {BUG_ID + "-2" + FS + "deprecated-list.html",
+- " <FONT CLASS=\"NavBarFont1\">Package</FONT>&nbsp;"
++ "<li>Package</li>"
+ },
+ {BUG_ID + "-2" + FS + "index-all.html",
+- " <FONT CLASS=\"NavBarFont1\">Package</FONT>&nbsp;"
++ "<li>Package</li>"
+ },
+ {BUG_ID + "-2" + FS + "help-doc.html",
+- " <FONT CLASS=\"NavBarFont1\">Package</FONT>&nbsp;"
++ "<li>Package</li>"
+ },
+ };
+
+diff --git a/test/com/sun/javadoc/testParamTaglet/TestParamTaglet.java b/test/com/sun/javadoc/testParamTaglet/TestParamTaglet.java
+--- langtools/test/com/sun/javadoc/testParamTaglet/TestParamTaglet.java
++++ langtools/test/com/sun/javadoc/testParamTaglet/TestParamTaglet.java
+@@ -48,20 +48,20 @@
+ private static final String[][] TEST = {
+ //Regular param tags.
+ {BUG_ID + FS + "pkg" + FS + "C.html",
+- "<STRONG>Parameters:</STRONG></DT><DD><CODE>param1</CODE> - testing 1 2 3.</DD>" +
+- "<DD><CODE>param2</CODE> - testing 1 2 3."
++ "<span class=\"strong\">Parameters:</span></dt><dd><code>param1</code> - testing 1 2 3.</dd>" +
++ "<dd><code>param2</code> - testing 1 2 3."
+ },
+ //Param tags that don't match with any real parameters.
+ {BUG_ID + FS + "pkg" + FS + "C.html",
+- "<STRONG>Parameters:</STRONG></DT><DD><CODE><I>p1</I></CODE> - testing 1 2 3.</DD>" +
+- "<DD><CODE><I>p2</I></CODE> - testing 1 2 3."
++ "<span class=\"strong\">Parameters:</span></dt><dd><code><I>p1</I></code> - testing 1 2 3.</dd>" +
++ "<dd><code><I>p2</I></code> - testing 1 2 3."
+ },
+ //{@inherit} doc misuse does not cause doclet to throw exception.
+ // Param is printed with nothing inherited.
+ //XXX: in the future when Configuration is available during doc inheritence,
+ //print a warning for this mistake.
+ {BUG_ID + FS + "pkg" + FS + "C.html",
+- "<CODE><I>inheritBug</I></CODE> -"
++ "<code><I>inheritBug</I></code> -"
+ },
+
+ };
+diff --git a/test/com/sun/javadoc/testPrivateClasses/TestPrivateClasses.java b/test/com/sun/javadoc/testPrivateClasses/TestPrivateClasses.java
+--- langtools/test/com/sun/javadoc/testPrivateClasses/TestPrivateClasses.java
++++ langtools/test/com/sun/javadoc/testPrivateClasses/TestPrivateClasses.java
+@@ -58,50 +58,50 @@
+ private static final String[][] TEST1 = {
+ // Field inheritence from non-public superclass.
+ {BUG_ID + "-1" + FS + "pkg" + FS + "PublicChild.html",
+- "<A HREF=\"../pkg/PublicChild.html#fieldInheritedFromParent\">" +
+- "fieldInheritedFromParent</A>"
++ "<a href=\"../pkg/PublicChild.html#fieldInheritedFromParent\">" +
++ "fieldInheritedFromParent</a>"
+ },
+
+ // Method inheritence from non-public superclass.
+ {BUG_ID + "-1" + FS + "pkg" + FS + "PublicChild.html",
+- "<A HREF=\"../pkg/PublicChild.html#methodInheritedFromParent(int)\">" +
+- "methodInheritedFromParent</A>"
++ "<a href=\"../pkg/PublicChild.html#methodInheritedFromParent(int)\">" +
++ "methodInheritedFromParent</a>"
+ },
+
+ // Field inheritence from non-public superinterface.
+ {BUG_ID + "-1" + FS + "pkg" + FS + "PublicInterface.html",
+- "<A HREF=\"../pkg/PublicInterface.html#fieldInheritedFromInterface\">" +
+- "fieldInheritedFromInterface</A>"
++ "<a href=\"../pkg/PublicInterface.html#fieldInheritedFromInterface\">" +
++ "fieldInheritedFromInterface</a>"
+ },
+
+ // Method inheritence from non-public superinterface.
+ {BUG_ID + "-1" + FS + "pkg" + FS + "PublicInterface.html",
+- "<A HREF=\"../pkg/PublicInterface.html#methodInterface(int)\">" +
+- "methodInterface</A>"
++ "<a href=\"../pkg/PublicInterface.html#methodInterface(int)\">" +
++ "methodInterface</a>"
+ },
+
+ // private class does not show up in tree
+ {BUG_ID + "-1" + FS + "pkg" + FS + "PublicChild.html",
+- "<PRE>" + NL +
+- "java.lang.Object" + NL +
+- " <IMG SRC=\"../resources/inherit.gif\" " +
+- "ALT=\"extended by \"><STRONG>pkg.PublicChild</STRONG>" + NL +
+- "</PRE>"
++ "<ul class=\"inheritance\">" + NL + "<li>java.lang.Object</li>" + NL +
++ "<li>" + NL + "<ul class=\"inheritance\">" + NL + "<li>pkg.PublicChild</li>" + NL +
++ "</ul>" + NL + "</li>" + NL + "</ul>"
+ },
+
+ // Method is documented as though it is declared in the inheriting method.
+ {BUG_ID + "-1" + FS + "pkg" + FS + "PublicChild.html",
+- "public void <STRONG>methodInheritedFromParent</STRONG>(int&nbsp;p1)"
++ "<pre>public&nbsp;void&nbsp;methodInheritedFromParent(int&nbsp;p1)"
+ },
+
+ //Make sure implemented interfaces from private superclass are inherited
+ {BUG_ID + "-1" + FS + "pkg" + FS + "PublicInterface.html",
+- "<STRONG>All Known Implementing Classes:</STRONG></DT> <DD><A HREF=\"../pkg/PublicChild.html\" " +
+- "title=\"class in pkg\">PublicChild</A>"},
++ "<dl>" + NL + "<dt>All Known Implementing Classes:</dt>" + NL +
++ "<dd><a href=\"../pkg/PublicChild.html\" title=\"class in pkg\">" +
++ "PublicChild</a></dd>" + NL + "</dl>"},
+
+ {BUG_ID + "-1" + FS + "pkg" + FS + "PublicChild.html",
+- "<STRONG>All Implemented Interfaces:</STRONG></DT> <DD><A HREF=\"../pkg/PublicInterface.html\" " +
+- "title=\"interface in pkg\">PublicInterface</A>"},
++ "<dl>" + NL + "<dt>All Implemented Interfaces:</dt>" + NL +
++ "<dd><a href=\"../pkg/PublicInterface.html\" title=\"interface in pkg\">" +
++ "PublicInterface</a></dd>" + NL + "</dl>"},
+
+ //Generic interface method test.
+ {BUG_ID + "-1" + FS + "pkg2" + FS + "C.html",
+@@ -110,12 +110,12 @@
+ private static final String[][] NEGATED_TEST1 = {
+ // Should not document that a method overrides method from private class.
+ {BUG_ID + "-1" + FS + "pkg" + FS + "PublicChild.html",
+- "<STRONG>Overrides:</STRONG>"},
++ "<strong>Overrides:</strong>"},
+ // Should not document that a method specified by private interface.
+ {BUG_ID + "-1" + FS + "pkg" + FS + "PublicChild.html",
+- "<STRONG>Specified by:</STRONG>"},
++ "<strong>Specified by:</strong>"},
+ {BUG_ID + "-1" + FS + "pkg" + FS + "PublicInterface.html",
+- "<STRONG>Specified by:</STRONG>"},
++ "<strong>Specified by:</strong>"},
+ // Should not mention that any documentation was copied.
+ {BUG_ID + "-1" + FS + "pkg" + FS + "PublicChild.html",
+ "Description copied from"},
+@@ -137,64 +137,64 @@
+ //Do not inherit private interface method with generic parameters.
+ //This method has been implemented.
+ {BUG_ID + "-1" + FS + "pkg2" + FS + "C.html",
+- "<STRONG><A HREF=\"../pkg2/I.html#hello(T)\">hello</A></STRONG>"},
++ "<strong><a href=\"../pkg2/I.html#hello(T)\">hello</a></strong>"},
+ };
+
+ // Test output when -private flag is used.
+ private static final String[][] TEST2 = {
+ // Field inheritence from non-public superclass.
+ {BUG_ID + "-2" + FS + "pkg" + FS + "PublicChild.html",
+- "Fields inherited from class " +
+- "pkg.<A HREF=\"../pkg/PrivateParent.html\" " +
+- "title=\"class in pkg\">PrivateParent</A>"
++ "Fields inherited from class&nbsp;pkg." +
++ "<a href=\"../pkg/PrivateParent.html\" title=\"class in pkg\">" +
++ "PrivateParent</a>"
+ },
+ {BUG_ID + "-2" + FS + "pkg" + FS + "PublicChild.html",
+- "<A HREF=\"../pkg/PrivateParent.html#fieldInheritedFromParent\">" +
+- "fieldInheritedFromParent</A>"
++ "<a href=\"../pkg/PrivateParent.html#fieldInheritedFromParent\">" +
++ "fieldInheritedFromParent</a>"
+ },
+ // Field inheritence from non-public superinterface.
+ {BUG_ID + "-2" + FS + "pkg" + FS + "PublicInterface.html",
+- "Fields inherited from interface " +
+- "pkg.<A HREF=\"../pkg/PrivateInterface.html\" " +
+- "title=\"interface in pkg\">PrivateInterface</A>"
++ "Fields inherited from interface&nbsp;pkg." +
++ "<a href=\"../pkg/PrivateInterface.html\" title=\"interface in pkg\">" +
++ "PrivateInterface</a>"
+ },
+ {BUG_ID + "-2" + FS + "pkg" + FS + "PublicInterface.html",
+- "<A HREF=\"../pkg/PrivateInterface.html#fieldInheritedFromInterface\">" +
+- "fieldInheritedFromInterface</A>"
++ "<a href=\"../pkg/PrivateInterface.html#fieldInheritedFromInterface\">" +
++ "fieldInheritedFromInterface</a>"
+ },
+ // Method inheritence from non-public superclass.
+ {BUG_ID + "-2" + FS + "pkg" + FS + "PublicChild.html",
+- "Methods inherited from class " +
+- "pkg.<A HREF=\"../pkg/PrivateParent.html\" " +
+- "title=\"class in pkg\">PrivateParent</A>"
++ "Methods inherited from class&nbsp;pkg." +
++ "<a href=\"../pkg/PrivateParent.html\" title=\"class in pkg\">" +
++ "PrivateParent</a>"
+ },
+ {BUG_ID + "-2" + FS + "pkg" + FS + "PublicChild.html",
+- "<A HREF=\"../pkg/PrivateParent.html#methodInheritedFromParent(int)\">" +
+- "methodInheritedFromParent</A>"
++ "<a href=\"../pkg/PrivateParent.html#methodInheritedFromParent(int)\">" +
++ "methodInheritedFromParent</a>"
+ },
+ // Should document that a method overrides method from private class.
+ {BUG_ID + "-2" + FS + "pkg" + FS + "PublicChild.html",
+- "<STRONG>Overrides:</STRONG></DT><DD><CODE>" +
+- "<A HREF=\"../pkg/PrivateParent.html#methodOverridenFromParent(char[], int, T, V, java.util.List)\">" +
+- "methodOverridenFromParent</A></CODE> in class <CODE>" +
+- "<A HREF=\"../pkg/PrivateParent.html\" title=\"class in pkg\">" +
+- "PrivateParent</A></CODE></DD>" + NL + "</DL>"},
++ "<dt><strong>Overrides:</strong></dt>" + NL +
++ "<dd><code><a href=\"../pkg/PrivateParent.html#methodOverridenFromParent(char[], int, T, V, java.util.List)\">" +
++ "methodOverridenFromParent</a></code>&nbsp;in class&nbsp;<code>" +
++ "<a href=\"../pkg/PrivateParent.html\" title=\"class in pkg\">" +
++ "PrivateParent</a></code></dd>"},
+ // Should document that a method is specified by private interface.
+ {BUG_ID + "-2" + FS + "pkg" + FS + "PublicChild.html",
+- "<STRONG>Specified by:</STRONG></DT><DD><CODE>" +
+- "<A HREF=\"../pkg/PrivateInterface.html#methodInterface(int)\">" +
+- "methodInterface</A></CODE> in interface <CODE>" +
+- "<A HREF=\"../pkg/PrivateInterface.html\" title=\"interface in pkg\">" +
+- "PrivateInterface</A></CODE></DD>" + NL + "</DL>" + NL + "</DD>"},
++ "<dt><strong>Specified by:</strong></dt>" + NL +
++ "<dd><code><a href=\"../pkg/PrivateInterface.html#methodInterface(int)\">" +
++ "methodInterface</a></code>&nbsp;in interface&nbsp;<code>" +
++ "<a href=\"../pkg/PrivateInterface.html\" title=\"interface in pkg\">" +
++ "PrivateInterface</a></code></dd>"},
+ // Method inheritence from non-public superinterface.
+ {BUG_ID + "-2" + FS + "pkg" + FS + "PublicInterface.html",
+- "Methods inherited from interface " +
+- "pkg.<A HREF=\"../pkg/PrivateInterface.html\" " +
+- "title=\"interface in pkg\">PrivateInterface</A>"
++ "Methods inherited from interface&nbsp;pkg." +
++ "<a href=\"../pkg/PrivateInterface.html\" title=\"interface in pkg\">" +
++ "PrivateInterface</a>"
+ },
+ {BUG_ID + "-2" + FS + "pkg" + FS + "PrivateInterface.html",
+- "<A HREF=\"../pkg/PrivateInterface.html#methodInterface(int)\">" +
+- "methodInterface</A>"
++ "<a href=\"../pkg/PrivateInterface.html#methodInterface(int)\">" +
++ "methodInterface</a>"
+ },
+ // Should mention that any documentation was copied.
+ {BUG_ID + "-2" + FS + "pkg" + FS + "PublicChild.html",
+@@ -209,26 +209,31 @@
+
+ //Make sure implemented interfaces from private superclass are inherited
+ {BUG_ID + "-2" + FS + "pkg" + FS + "PublicInterface.html",
+- "<STRONG>All Known Implementing Classes:</STRONG></DT> <DD><A HREF=\"../pkg/PrivateParent.html\" " +
+- "title=\"class in pkg\">PrivateParent</A>, " +
+- "<A HREF=\"../pkg/PublicChild.html\" title=\"class in pkg\">PublicChild</A>"},
++ "<dl>" + NL + "<dt>All Known Implementing Classes:</dt>" + NL +
++ "<dd><a href=\"../pkg/PrivateParent.html\" title=\"class in pkg\">" +
++ "PrivateParent</a>, " +
++ "<a href=\"../pkg/PublicChild.html\" title=\"class in pkg\">PublicChild" +
++ "</a></dd>" + NL + "</dl>"},
+
+ {BUG_ID + "-2" + FS + "pkg" + FS + "PublicChild.html",
+- "<STRONG>All Implemented Interfaces:</STRONG></DT> <DD><A HREF=\"../pkg/PrivateInterface.html\" " +
+- "title=\"interface in pkg\">PrivateInterface</A>, " +
+- "<A HREF=\"../pkg/PublicInterface.html\" title=\"interface in pkg\">" +
+- "PublicInterface</A>"},
++ "<dl>" + NL + "<dt>All Implemented Interfaces:</dt>" + NL +
++ "<dd><a href=\"../pkg/PrivateInterface.html\" title=\"interface in pkg\">" +
++ "PrivateInterface</a>, " +
++ "<a href=\"../pkg/PublicInterface.html\" title=\"interface in pkg\">" +
++ "PublicInterface</a></dd>" + NL + "</dl>"},
+
+ //Since private flag is used, we can document that private interface method
+ //with generic parameters has been implemented.
+ {BUG_ID + "-2" + FS + "pkg2" + FS + "C.html",
+- "<STRONG>Description copied from interface: " +
+- "<CODE><A HREF=\"../pkg2/I.html#hello(T)\">I</A></CODE></STRONG>"},
++ "<strong>Description copied from interface:&nbsp;<code>" +
++ "<a href=\"../pkg2/I.html#hello(T)\">I</a></code></strong>"},
+
+ {BUG_ID + "-2" + FS + "pkg2" + FS + "C.html",
+- "<STRONG>Specified by:</STRONG></DT><DD><CODE><A HREF=\"../pkg2/I.html#hello(T)\">" +
+- "hello</A></CODE> in interface <CODE><A HREF=\"../pkg2/I.html\" " +
+- "title=\"interface in pkg2\">I</A>"},
++ "<dt><strong>Specified by:</strong></dt>" + NL +
++ "<dd><code><a href=\"../pkg2/I.html#hello(T)\">hello</a></code>" +
++ "&nbsp;in interface&nbsp;<code>" +
++ "<a href=\"../pkg2/I.html\" title=\"interface in pkg2\">I</a>" +
++ "&lt;java.lang.String&gt;</code></dd>"},
+ };
+ private static final String[][] NEGATED_TEST2 = NO_TEST;
+
+diff --git a/test/com/sun/javadoc/testSerializedForm/TestSerializedForm.java b/test/com/sun/javadoc/testSerializedForm/TestSerializedForm.java
+--- langtools/test/com/sun/javadoc/testSerializedForm/TestSerializedForm.java
++++ langtools/test/com/sun/javadoc/testSerializedForm/TestSerializedForm.java
+@@ -47,11 +47,11 @@
+
+ private static final String[][] TEST = {
+ {BUG_ID + FS + "serialized-form.html",
+- "protected java.lang.Object <STRONG>readResolve</STRONG>()"},
++ "protected&nbsp;java.lang.Object&nbsp;readResolve()"},
+ {BUG_ID + FS + "serialized-form.html",
+- "protected java.lang.Object <STRONG>writeReplace</STRONG>()"},
++ "protected&nbsp;java.lang.Object&nbsp;writeReplace()"},
+ {BUG_ID + FS + "serialized-form.html",
+- "protected java.lang.Object <STRONG>readObjectNoData</STRONG>()"},
++ "protected&nbsp;java.lang.Object&nbsp;readObjectNoData()"},
+ {BUG_ID + FS + "serialized-form.html",
+ "See Also"},
+ };
+diff --git a/test/com/sun/javadoc/testSerializedFormDeprecationInfo/TestSerializedFormDeprecationInfo.java b/test/com/sun/javadoc/testSerializedFormDeprecationInfo/TestSerializedFormDeprecationInfo.java
+--- langtools/test/com/sun/javadoc/testSerializedFormDeprecationInfo/TestSerializedFormDeprecationInfo.java
++++ langtools/test/com/sun/javadoc/testSerializedFormDeprecationInfo/TestSerializedFormDeprecationInfo.java
+@@ -41,58 +41,47 @@
+ // Test for normal run of javadoc. The serialized-form.html should
+ // display the inline comments, tags and deprecation information if any.
+ private static final String[][] TEST_CMNT_DEPR = {
+- {BUG_ID + FS + "serialized-form.html", "<DL>" + NL + "<DD><DL>" + NL +
+- "<DT><STRONG>Throws:</STRONG></DT>" + NL + "<DD><CODE>" +
+- "java.io.IOException</CODE></DD><DT><STRONG>See Also:</STRONG>" +
+- "</DT><DD><A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
+- "<CODE>C1.setUndecorated(boolean)</CODE></A></DD></DL>" + NL +
+- "</DD>" + NL + "</DL>"},
+- {BUG_ID + FS + "serialized-form.html", "<DL>" + NL +
+- "<DD><STRONG>Deprecated.</STRONG>&nbsp;<I>As of JDK version " +
+- "1.5, replaced by" + NL +
+- " <A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
+- "<CODE>setUndecorated(boolean)</CODE></A>.</I></DD>" +
+- "<DD>This field indicates whether the C1 is undecorated." + NL +
+- "<P>" + NL + "</DD>" + NL + "<DD>&nbsp;</DD>" + NL +
+- "<DD><DL>" + NL + "<DT><STRONG>Since:</STRONG></DT>" + NL +
+- " <DD>1.4</DD>" + NL + "<DT><STRONG>See Also:</STRONG>" +
+- "</DT><DD><A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
+- "<CODE>C1.setUndecorated(boolean)</CODE></A></DD></DL>" + NL +
+- "</DD>" + NL + "</DL>"},
+- {BUG_ID + FS + "serialized-form.html", "<DL>" + NL +
+- "<DD><STRONG>Deprecated.</STRONG>&nbsp;<I>As of JDK version" +
+- " 1.5, replaced by" + NL +
+- " <A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
+- "<CODE>setUndecorated(boolean)</CODE></A>.</I>" + NL + "<P>" + NL +
+- "</DD><DD>Reads the object stream." + NL + "<P>" + NL +
+- "</DD>" + NL + "<DD><DL>" + NL + "<DT><STRONG>Throws:" +
+- "</STRONG></DT>" + NL + "<DD><CODE><code>" +
+- "IOException</code></CODE></DD>" + NL +
+- "<DD><CODE>java.io.IOException</CODE></DD></DL>" + NL +
+- "</DD>" + NL + "</DL>"},
+- {BUG_ID + FS + "serialized-form.html", "<DL>" + NL +
+- "<DD><STRONG>Deprecated.</STRONG>&nbsp;</DD><DD>" +
+- "The name for this class." + NL + "<P>" + NL + "</DD>" + NL +
+- "<DD>&nbsp;</DD>" + NL + "</DL>"}};
++ {BUG_ID + FS + "serialized-form.html", "<dl>" +
++ "<dt><span class=\"strong\">Throws:</span></dt>" + NL + "<dd><code>" +
++ "java.io.IOException</code></dd><dt><span class=\"strong\">See Also:</span>" +
++ "</dt><dd><a href=\"pkg1/C1.html#setUndecorated(boolean)\">" +
++ "<code>C1.setUndecorated(boolean)</code></a></dd></dl>"},
++ {BUG_ID + FS + "serialized-form.html", "<span class=\"strong\">Deprecated.</span>" +
++ "&nbsp;<i>As of JDK version 1.5, replaced by" + NL +
++ " <a href=\"pkg1/C1.html#setUndecorated(boolean)\">" +
++ "<code>setUndecorated(boolean)</code></a>.</i></div>" + NL +
++ "<div class=\"block\">This field indicates whether the C1 " +
++ "is undecorated.</div>" + NL + "&nbsp;" + NL +
++ "<dl><dt><span class=\"strong\">Since:</span></dt>" + NL +
++ " <dd>1.4</dd>" + NL + "<dt><span class=\"strong\">See Also:</span>" +
++ "</dt><dd><a href=\"pkg1/C1.html#setUndecorated(boolean)\">" +
++ "<code>C1.setUndecorated(boolean)</code></a></dd></dl>"},
++ {BUG_ID + FS + "serialized-form.html", "<span class=\"strong\">Deprecated.</span>" +
++ "&nbsp;<i>As of JDK version 1.5, replaced by" + NL +
++ " <a href=\"pkg1/C1.html#setUndecorated(boolean)\">" +
++ "<code>setUndecorated(boolean)</code></a>.</i></div>" + NL +
++ "<div class=\"block\">Reads the object stream.</div>" + NL +
++ "<dl><dt><span class=\"strong\">Throws:</span></dt>" + NL + "<dd><code><code>" +
++ "IOException</code></code></dd>" + NL +
++ "<dd><code>java.io.IOException</code></dd></dl>"},
++ {BUG_ID + FS + "serialized-form.html", "<span class=\"strong\">Deprecated.</span>" +
++ "&nbsp;</div>" + NL + "<div class=\"block\">" +
++ "The name for this class.</div>"}};
+
+ // Test with -nocomment option. The serialized-form.html should
+ // not display the inline comments and tags but should display deprecation
+ // information if any.
+ private static final String[][] TEST_NOCMNT = {
+- {BUG_ID + FS + "serialized-form.html", "<PRE>" + NL + "boolean <STRONG>" +
+- "undecorated</STRONG></PRE>" + NL + "<DL>" + NL + "<DD><STRONG>" +
+- "Deprecated.</STRONG>&nbsp;<I>As of JDK version 1.5, replaced by" + NL +
+- " <A HREF=\"pkg1/C1.html#setUndecorated(boolean)\"><CODE>" +
+- "setUndecorated(boolean)</CODE></A>.</I></DD></DL>"},
+- {BUG_ID + FS + "serialized-form.html", "<DL>" + NL + "<DD><STRONG>" +
+- "Deprecated.</STRONG>&nbsp;<I>As of JDK version" +
++ {BUG_ID + FS + "serialized-form.html", "<pre>boolean undecorated</pre>" + NL +
++ "<div class=\"block\"><span class=\"strong\">Deprecated.</span>&nbsp;<i>" +
++ "As of JDK version 1.5, replaced by" + NL +
++ " <a href=\"pkg1/C1.html#setUndecorated(boolean)\"><code>" +
++ "setUndecorated(boolean)</code></a>.</i></div>" + NL + "</li>"},
++ {BUG_ID + FS + "serialized-form.html", "<span class=\"strong\">" +
++ "Deprecated.</span>&nbsp;<i>As of JDK version" +
+ " 1.5, replaced by" + NL +
+- " <A HREF=\"pkg1/C1.html#setUndecorated(boolean)\">" +
+- "<CODE>setUndecorated(boolean)</CODE></A>.</I>" + NL + "<P>" + NL +
+- "</DD></DL>"},
+- {BUG_ID + FS + "serialized-form.html", "<PRE>" + NL + "int <STRONG>" +
+- "publicKey</STRONG></PRE>" + NL + "<DL>" + NL + "<DD><STRONG>" +
+- "Deprecated.</STRONG>&nbsp;</DD></DL>"}};
++ " <a href=\"pkg1/C1.html#setUndecorated(boolean)\">" +
++ "<code>setUndecorated(boolean)</code></a>.</i></div>" + NL + "</li>"}};
+
+ // Test with -nodeprecated option. The serialized-form.html should
+ // ignore the -nodeprecated tag and display the deprecation info. This
+diff --git a/test/com/sun/javadoc/testSimpleTag/TestSimpleTag.java b/test/com/sun/javadoc/testSimpleTag/TestSimpleTag.java
+--- langtools/test/com/sun/javadoc/testSimpleTag/TestSimpleTag.java
++++ langtools/test/com/sun/javadoc/testSimpleTag/TestSimpleTag.java
+@@ -42,13 +42,13 @@
+ private static final String[][] TEST =
+ new String[][] {
+ {"./" + BUG_ID + "/C.html",
+- "<STRONG>Todo:</STRONG>"},
++ "<span class=\"strong\">Todo:</span>"},
+ {"./" + BUG_ID + "/C.html",
+- "<STRONG>EJB Beans:</STRONG>"},
++ "<span class=\"strong\">EJB Beans:</span>"},
+ {"./" + BUG_ID + "/C.html",
+- "<STRONG>Regular Tag:</STRONG>"},
++ "<span class=\"strong\">Regular Tag:</span>"},
+ {"./" + BUG_ID + "/C.html",
+- "<STRONG>Back-Slash-Tag:</STRONG>"},
++ "<span class=\"strong\">Back-Slash-Tag:</span>"},
+ };
+
+ private static final String[] ARGS = new String[] {
+diff --git a/test/com/sun/javadoc/testStylesheet/TestStylesheet.java b/test/com/sun/javadoc/testStylesheet/TestStylesheet.java
+--- langtools/test/com/sun/javadoc/testStylesheet/TestStylesheet.java
++++ langtools/test/com/sun/javadoc/testStylesheet/TestStylesheet.java
+@@ -45,32 +45,24 @@
+ //Input for string search tests.
+ private static final String[][] TEST = {
+ {BUG_ID + FS + "stylesheet.css",
+- "body { background-color: #FFFFFF; color:#000000 }"},
++ "/* Javadoc style sheet */"},
+ {BUG_ID + FS + "stylesheet.css",
+- ".TableHeadingColor { background: #CCCCFF; color:#000000 }"},
++ "/*" + NL + "Overall document style" + NL + "*/"},
+ {BUG_ID + FS + "stylesheet.css",
+- ".TableSubHeadingColor { background: #EEEEFF; color:#000000 }"},
++ "/*" + NL + "Heading styles" + NL + "*/"},
+ {BUG_ID + FS + "stylesheet.css",
+- ".TableRowColor { background: #FFFFFF; color:#000000 }"},
++ "/*" + NL + "Navigation bar styles" + NL + "*/"},
+ {BUG_ID + FS + "stylesheet.css",
+- ".FrameTitleFont { font-size: 100%; font-family: Helvetica, Arial, sans-serif; color:#000000 }"},
++ "body {" + NL + " font-family:Helvetica, Arial, sans-serif;" + NL +
++ " color:#000000;" + NL + "}"},
+ {BUG_ID + FS + "stylesheet.css",
+- ".FrameHeadingFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif; color:#000000 }"},
+- {BUG_ID + FS + "stylesheet.css",
+- ".FrameItemFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif; color:#000000 }"},
+- {BUG_ID + FS + "stylesheet.css",
+- ".NavBarCell1 { background-color:#EEEEFF; color:#000000}"},
+- {BUG_ID + FS + "stylesheet.css",
+- ".NavBarCell1Rev { background-color:#00008B; color:#FFFFFF}"},
+- {BUG_ID + FS + "stylesheet.css",
+- ".NavBarFont1 { font-family: Arial, Helvetica, sans-serif; color:#000000;color:#000000;}"},
+- {BUG_ID + FS + "stylesheet.css",
+- ".NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;color:#FFFFFF;}"},
+- {BUG_ID + FS + "stylesheet.css",
+- ".NavBarCell2 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF; color:#000000}"},
+- {BUG_ID + FS + "stylesheet.css",
+- ".NavBarCell3 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF; color:#000000}"},
+-
++ "dl dd ul li {" + NL + " list-style:none;" + NL +
++ " margin:10px 0 10px 0;" + NL + "}"},
++ // Test whether a link to the stylesheet file is inserted properly
++ // in the class documentation.
++ {BUG_ID + FS + "pkg" + FS + "A.html",
++ "<link rel=\"stylesheet\" type=\"text/css\" " +
++ "href=\"../stylesheet.css\" title=\"Style\">"}
+ };
+ private static final String[][] NEGATED_TEST = NO_TEST;
+
+diff --git a/test/com/sun/javadoc/testSummaryHeading/TestSummaryHeading.java b/test/com/sun/javadoc/testSummaryHeading/TestSummaryHeading.java
+--- langtools/test/com/sun/javadoc/testSummaryHeading/TestSummaryHeading.java
++++ langtools/test/com/sun/javadoc/testSummaryHeading/TestSummaryHeading.java
+@@ -46,8 +46,7 @@
+
+ //Input for string search tests.
+ private static final String[][] TEST = {
+- {BUG_ID + FS + "C.html", "<CAPTION CLASS=\"TableCaption\">" + NL +
+- "Method Summary</CAPTION>"}
++ {BUG_ID + FS + "C.html", "<h3>Method Summary</h3>"}
+ };
+ private static final String[][] NEGATED_TEST = NO_TEST;
+
+diff --git a/test/com/sun/javadoc/testSuperclassInSerialForm/TestSuperClassInSerialForm.java b/test/com/sun/javadoc/testSuperclassInSerialForm/TestSuperClassInSerialForm.java
+--- langtools/test/com/sun/javadoc/testSuperclassInSerialForm/TestSuperClassInSerialForm.java
++++ langtools/test/com/sun/javadoc/testSuperclassInSerialForm/TestSuperClassInSerialForm.java
+@@ -39,7 +39,7 @@
+
+ private static final String[][] TEST = {
+ {BUG_ID + FS + "serialized-form.html",
+- "<A HREF=\"pkg/SubClass.html\" title=\"class in pkg\">pkg.SubClass</A> extends <A HREF=\"pkg/SuperClass.html\" title=\"class in pkg\">SuperClass</A>"}
++ "<a href=\"pkg/SubClass.html\" title=\"class in pkg\">pkg.SubClass</a> extends <a href=\"pkg/SuperClass.html\" title=\"class in pkg\">SuperClass</a>"}
+ };
+
+ private static final String[][] NEGATED_TEST = NO_TEST;
+diff --git a/test/com/sun/javadoc/testTagInheritence/TestTagInheritence.java b/test/com/sun/javadoc/testTagInheritence/TestTagInheritence.java
+--- langtools/test/com/sun/javadoc/testTagInheritence/TestTagInheritence.java
++++ langtools/test/com/sun/javadoc/testTagInheritence/TestTagInheritence.java
+@@ -59,12 +59,12 @@
+ //First sentence test (6253614)
+ tests[tests.length - 2][0] =BUG_ID + FS + "firstSentence" + FS +
+ "B.html";
+- tests[tests.length - 2][1] = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;First sentence.</TD>";
++ tests[tests.length - 2][1] = "<div class=\"block\">First sentence.</div>";
+
+ //Another first sentence test (6253604)
+ tests[tests.length - 1][0] =BUG_ID + FS + "firstSentence2" + FS +
+ "C.html";
+- tests[tests.length - 1][1] = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;First sentence.</TD>";
++ tests[tests.length - 1][1] = "<div class=\"block\">First sentence.</div>";
+
+ TestTagInheritence tester = new TestTagInheritence();
+ run(tester, ARGS, tests, NO_TEST);
+diff --git a/test/com/sun/javadoc/testTaglets/TestTaglets.java b/test/com/sun/javadoc/testTaglets/TestTaglets.java
+--- langtools/test/com/sun/javadoc/testTaglets/TestTaglets.java
++++ langtools/test/com/sun/javadoc/testTaglets/TestTaglets.java
+@@ -55,13 +55,15 @@
+
+ //Input for string search tests.
+ private static final String[][] TEST_4654308 = new String[][] {
+- {"4654308" + FS + "C.html", "<B>Foo:</B><DD>my only method is " + "<A HREF=\"C.html#method()\"><CODE>here</CODE></A>"}
++ {"4654308" + FS + "C.html", "<span class=\"strong\">Foo:</span></dt>" +
++ "<dd>my only method is <a href=\"C.html#method()\"><code>here" +
++ "</code></a></dd></dl>"}
+ };
+ private static final String[][] NEGATED_TEST_4654308 = NO_TEST;
+
+ private static final String[][] TEST_4767038 = new String[][] {
+ {"4767038" + FS + "Child.html",
+- "&nbsp;This is the first sentence.</TD>"}
++ "This is the first sentence."}
+ };
+ private static final String[][] NEGATED_TEST_4767038 = NO_TEST;
+
+diff --git a/test/com/sun/javadoc/testTaglets/taglets/Foo.java b/test/com/sun/javadoc/testTaglets/taglets/Foo.java
+--- langtools/test/com/sun/javadoc/testTaglets/taglets/Foo.java
++++ langtools/test/com/sun/javadoc/testTaglets/taglets/Foo.java
+@@ -50,9 +50,9 @@
+ */
+ public TagletOutput getTagletOutput(Tag tag, TagletWriter writer) {
+ ArrayList inlineTags = new ArrayList();
+- inlineTags.add(new TextTag(tag.holder(), "<DT><B>Foo:</B><DD>"));
++ inlineTags.add(new TextTag(tag.holder(), "<dt><span class=\"strong\">Foo:</span></dt><dd>"));
+ inlineTags.addAll(Arrays.asList(tag.inlineTags()));
+- inlineTags.add(new TextTag(tag.holder(), "</DD>"));
++ inlineTags.add(new TextTag(tag.holder(), "</dd>"));
+ return writer.commentTagsToOutput(tag,
+ (Tag[]) inlineTags.toArray(new Tag[] {}));
+ }
+diff --git a/test/com/sun/javadoc/testThrowsHead/TestThrowsHead.java b/test/com/sun/javadoc/testThrowsHead/TestThrowsHead.java
+--- langtools/test/com/sun/javadoc/testThrowsHead/TestThrowsHead.java
++++ langtools/test/com/sun/javadoc/testThrowsHead/TestThrowsHead.java
+@@ -38,7 +38,7 @@
+
+ private static final String BUG_ID = "4530727";
+ private static final String[][] TEST = {
+- {BUG_ID + FS + "C.html", "<DT><STRONG>Throws:</STRONG>"}
++ {BUG_ID + FS + "C.html", "<dt><span class=\"strong\">Throws:</span>"}
+ };
+ private static final String[][] NEGATED_TEST = NO_TEST;
+ private static final String[] ARGS = new String[] {
+diff --git a/test/com/sun/javadoc/testThrowsTag/TestThrowsTag.java b/test/com/sun/javadoc/testThrowsTag/TestThrowsTag.java
+--- langtools/test/com/sun/javadoc/testThrowsTag/TestThrowsTag.java
++++ langtools/test/com/sun/javadoc/testThrowsTag/TestThrowsTag.java
+@@ -46,14 +46,14 @@
+ //Input for string search tests.
+ private static final String[][] TEST = {
+ {BUG_ID + FS + "pkg" + FS + "C.html",
+- "<DD><CODE><A HREF=\"../pkg/T1.html\" title=\"class in pkg\">T1</A></CODE> - the first throws tag.</DD>" + NL +
+- "<DD><CODE><A HREF=\"../pkg/T2.html\" title=\"class in pkg\">T2</A></CODE> - the second throws tag.</DD>" + NL +
+- "<DD><CODE><A HREF=\"../pkg/T3.html\" title=\"class in pkg\">T3</A></CODE> - the third throws tag.</DD>" + NL +
+- "<DD><CODE><A HREF=\"../pkg/T4.html\" title=\"class in pkg\">T4</A></CODE> - the fourth throws tag.</DD>" + NL +
+- "<DD><CODE><A HREF=\"../pkg/T5.html\" title=\"class in pkg\">T5</A></CODE> - the first inherited throws tag.</DD>" + NL +
+- "<DD><CODE><A HREF=\"../pkg/T6.html\" title=\"class in pkg\">T6</A></CODE> - the second inherited throws tag.</DD>" + NL +
+- "<DD><CODE><A HREF=\"../pkg/T7.html\" title=\"class in pkg\">T7</A></CODE> - the third inherited throws tag.</DD>" + NL +
+- "<DD><CODE><A HREF=\"../pkg/T8.html\" title=\"class in pkg\">T8</A></CODE> - the fourth inherited throws tag.</DD>"
++ "<dd><code><a href=\"../pkg/T1.html\" title=\"class in pkg\">T1</a></code> - the first throws tag.</dd>" + NL +
++ "<dd><code><a href=\"../pkg/T2.html\" title=\"class in pkg\">T2</a></code> - the second throws tag.</dd>" + NL +
++ "<dd><code><a href=\"../pkg/T3.html\" title=\"class in pkg\">T3</a></code> - the third throws tag.</dd>" + NL +
++ "<dd><code><a href=\"../pkg/T4.html\" title=\"class in pkg\">T4</a></code> - the fourth throws tag.</dd>" + NL +
++ "<dd><code><a href=\"../pkg/T5.html\" title=\"class in pkg\">T5</a></code> - the first inherited throws tag.</dd>" + NL +
++ "<dd><code><a href=\"../pkg/T6.html\" title=\"class in pkg\">T6</a></code> - the second inherited throws tag.</dd>" + NL +
++ "<dd><code><a href=\"../pkg/T7.html\" title=\"class in pkg\">T7</a></code> - the third inherited throws tag.</dd>" + NL +
++ "<dd><code><a href=\"../pkg/T8.html\" title=\"class in pkg\">T8</a></code> - the fourth inherited throws tag.</dd>"
+ },
+ };
+ private static final String[][] NEGATED_TEST = NO_TEST;
+diff --git a/test/com/sun/javadoc/testTitleInHref/TestTitleInHref.java b/test/com/sun/javadoc/testTitleInHref/TestTitleInHref.java
+--- langtools/test/com/sun/javadoc/testTitleInHref/TestTitleInHref.java
++++ langtools/test/com/sun/javadoc/testTitleInHref/TestTitleInHref.java
+@@ -38,13 +38,13 @@
+
+ private static final String[][] TEST = {
+ //Test to make sure that the title shows up in a class link.
+- {BUG_ID + FS + "pkg" + FS + "Links.html", "<A HREF=\"../pkg/Class.html\" title=\"class in pkg\">"},
++ {BUG_ID + FS + "pkg" + FS + "Links.html", "<a href=\"../pkg/Class.html\" title=\"class in pkg\">"},
+
+ //Test to make sure that the title shows up in an interface link.
+- {BUG_ID + FS + "pkg" + FS + "Links.html", "<A HREF=\"../pkg/Interface.html\" title=\"interface in pkg\">"},
++ {BUG_ID + FS + "pkg" + FS + "Links.html", "<a href=\"../pkg/Interface.html\" title=\"interface in pkg\">"},
+
+ //Test to make sure that the title shows up in cross link shows up
+- {BUG_ID + FS + "pkg" + FS + "Links.html", "<A HREF=\"http://java.sun.com/j2se/1.4/docs/api/java/io/File.html?is-external=true\" title=\"class or interface in java.io\"><CODE>This is a cross link to class File</CODE></A>"},
++ {BUG_ID + FS + "pkg" + FS + "Links.html", "<a href=\"http://java.sun.com/j2se/1.4/docs/api/java/io/File.html?is-external=true\" title=\"class or interface in java.io\"><code>This is a cross link to class File</code></a>"},
+
+ };
+
+diff --git a/test/com/sun/javadoc/testTypeParams/TestTypeParameters.java b/test/com/sun/javadoc/testTypeParams/TestTypeParameters.java
+--- langtools/test/com/sun/javadoc/testTypeParams/TestTypeParameters.java
++++ langtools/test/com/sun/javadoc/testTypeParams/TestTypeParameters.java
+@@ -49,16 +49,17 @@
+ private static final String[][] TEST =
+ {
+ {BUG_ID + FS + "pkg" + FS + "C.html",
+- "<CODE>&lt;W extends java.lang.String,V extends java.util.List&gt; " + NL +
+- "<BR>" + NL +
+- "java.lang.Object</CODE>"},
++ "<td class=\"colFirst\"><code>&lt;W extends java.lang.String,V extends " +
++ "java.util.List&gt;&nbsp;<br>java.lang.Object</code></td>"},
+ {BUG_ID + FS + "pkg" + FS + "C.html",
+- "<CODE>&lt;T&gt; java.lang.Object</CODE>"},
++ "<code>&lt;T&gt;&nbsp;java.lang.Object</code>"},
+ {BUG_ID + FS + "pkg" + FS + "package-summary.html",
+ "C&lt;E extends Parent&gt;"},
+ //Nested type parameters
+ {BUG_ID + FS + "pkg" + FS + "C.html",
+- "<A NAME=\"formatDetails(java.util.Collection, java.util.Collection)\"><!-- --></A>"},
++ "<a name=\"formatDetails(java.util.Collection, java.util.Collection)\">" + NL +
++ "<!-- -->" + NL +
++ "</a>"},
+
+ };
+ private static final String[][] NEGATED_TEST = NO_TEST;
+diff --git a/test/com/sun/javadoc/testUnnamedPackage/TestUnnamedPackage.java b/test/com/sun/javadoc/testUnnamedPackage/TestUnnamedPackage.java
+--- langtools/test/com/sun/javadoc/testUnnamedPackage/TestUnnamedPackage.java
++++ langtools/test/com/sun/javadoc/testUnnamedPackage/TestUnnamedPackage.java
+@@ -46,7 +46,7 @@
+ //Input for string search tests.
+ private static final String[][] TEST = {
+ {BUG_ID + FS + "package-summary.html",
+- "<H2>"+NL+"Package &lt;Unnamed&gt;"+NL+"</H2>"
++ "<h1 title=\"Package\" class=\"title\">Package&nbsp;&lt;Unnamed&gt;</h1>"
+ },
+ {BUG_ID + FS + "package-summary.html",
+ "This is a package comment for the unnamed package."
+@@ -55,12 +55,12 @@
+ "This is a class in the unnamed package."
+ },
+ {BUG_ID + FS + "package-tree.html",
+- "<H2>"+NL+"Hierarchy For Package &lt;Unnamed&gt;"+NL+"</H2>"
++ "<h1 class=\"title\">Hierarchy For Package &lt;Unnamed&gt;</h1>"
+ },
+ {BUG_ID + FS + "index-all.html",
+ "title=\"class in &lt;Unnamed&gt;\""
+ },
+- {BUG_ID + FS + "C.html", "<A HREF=\"package-summary.html\">"}
++ {BUG_ID + FS + "C.html", "<a href=\"package-summary.html\">"}
+ };
+ private static final String[][] NEGATED_TEST = {
+ {ERROR_OUTPUT, "BadSource"},
+diff --git a/test/com/sun/javadoc/testValueTag/TestValueTag.java b/test/com/sun/javadoc/testValueTag/TestValueTag.java
+--- langtools/test/com/sun/javadoc/testValueTag/TestValueTag.java
++++ langtools/test/com/sun/javadoc/testValueTag/TestValueTag.java
+@@ -52,44 +52,44 @@
+ "Result: \"Test 1 passes\""},
+ //Retrieve value of constant in same class.
+ {BUG_ID + FS + "pkg1" + FS + "Class1.html",
+- "Result: <A HREF=\"../pkg1/Class1.html#TEST_2_PASSES\">\"Test 2 passes\"</A>"},
++ "Result: <a href=\"../pkg1/Class1.html#TEST_2_PASSES\">\"Test 2 passes\"</a>"},
+ {BUG_ID + FS + "pkg1" + FS + "Class1.html",
+- "Result: <A HREF=\"../pkg1/Class1.html#TEST_3_PASSES\">\"Test 3 passes\"</A>"},
++ "Result: <a href=\"../pkg1/Class1.html#TEST_3_PASSES\">\"Test 3 passes\"</a>"},
+ {BUG_ID + FS + "pkg1" + FS + "Class1.html",
+- "Result: <A HREF=\"../pkg1/Class1.html#TEST_4_PASSES\">\"Test 4 passes\"</A>"},
++ "Result: <a href=\"../pkg1/Class1.html#TEST_4_PASSES\">\"Test 4 passes\"</a>"},
+ {BUG_ID + FS + "pkg1" + FS + "Class1.html",
+- "Result: <A HREF=\"../pkg1/Class1.html#TEST_5_PASSES\">\"Test 5 passes\"</A>"},
++ "Result: <a href=\"../pkg1/Class1.html#TEST_5_PASSES\">\"Test 5 passes\"</a>"},
+ {BUG_ID + FS + "pkg1" + FS + "Class1.html",
+- "Result: <A HREF=\"../pkg1/Class1.html#TEST_6_PASSES\">\"Test 6 passes\"</A>"},
++ "Result: <a href=\"../pkg1/Class1.html#TEST_6_PASSES\">\"Test 6 passes\"</a>"},
+ //Retrieve value of constant in different class.
+ {BUG_ID + FS + "pkg1" + FS + "Class2.html",
+- "Result: <A HREF=\"../pkg1/Class1.html#TEST_7_PASSES\">\"Test 7 passes\"</A>"},
++ "Result: <a href=\"../pkg1/Class1.html#TEST_7_PASSES\">\"Test 7 passes\"</a>"},
+ {BUG_ID + FS + "pkg1" + FS + "Class2.html",
+- "Result: <A HREF=\"../pkg1/Class1.html#TEST_8_PASSES\">\"Test 8 passes\"</A>"},
++ "Result: <a href=\"../pkg1/Class1.html#TEST_8_PASSES\">\"Test 8 passes\"</a>"},
+ {BUG_ID + FS + "pkg1" + FS + "Class2.html",
+- "Result: <A HREF=\"../pkg1/Class1.html#TEST_9_PASSES\">\"Test 9 passes\"</A>"},
++ "Result: <a href=\"../pkg1/Class1.html#TEST_9_PASSES\">\"Test 9 passes\"</a>"},
+ {BUG_ID + FS + "pkg1" + FS + "Class2.html",
+- "Result: <A HREF=\"../pkg1/Class1.html#TEST_10_PASSES\">\"Test 10 passes\"</A>"},
++ "Result: <a href=\"../pkg1/Class1.html#TEST_10_PASSES\">\"Test 10 passes\"</a>"},
+ {BUG_ID + FS + "pkg1" + FS + "Class2.html",
+- "Result: <A HREF=\"../pkg1/Class1.html#TEST_11_PASSES\">\"Test 11 passes\"</A>"},
++ "Result: <a href=\"../pkg1/Class1.html#TEST_11_PASSES\">\"Test 11 passes\"</a>"},
+ //Retrieve value of constant in different package
+ {BUG_ID + FS + "pkg1" + FS + "Class2.html",
+- "Result: <A HREF=\"../pkg2/Class3.html#TEST_12_PASSES\">\"Test 12 passes\"</A>"},
++ "Result: <a href=\"../pkg2/Class3.html#TEST_12_PASSES\">\"Test 12 passes\"</a>"},
+ {BUG_ID + FS + "pkg1" + FS + "Class2.html",
+- "Result: <A HREF=\"../pkg2/Class3.html#TEST_13_PASSES\">\"Test 13 passes\"</A>"},
++ "Result: <a href=\"../pkg2/Class3.html#TEST_13_PASSES\">\"Test 13 passes\"</a>"},
+ {BUG_ID + FS + "pkg1" + FS + "Class2.html",
+- "Result: <A HREF=\"../pkg2/Class3.html#TEST_14_PASSES\">\"Test 14 passes\"</A>"},
++ "Result: <a href=\"../pkg2/Class3.html#TEST_14_PASSES\">\"Test 14 passes\"</a>"},
+ {BUG_ID + FS + "pkg1" + FS + "Class2.html",
+- "Result: <A HREF=\"../pkg2/Class3.html#TEST_15_PASSES\">\"Test 15 passes\"</A>"},
++ "Result: <a href=\"../pkg2/Class3.html#TEST_15_PASSES\">\"Test 15 passes\"</a>"},
+ {BUG_ID + FS + "pkg1" + FS + "Class2.html",
+- "Result: <A HREF=\"../pkg2/Class3.html#TEST_16_PASSES\">\"Test 16 passes\"</A>"},
++ "Result: <a href=\"../pkg2/Class3.html#TEST_16_PASSES\">\"Test 16 passes\"</a>"},
+ //Retrieve value of constant from a package page
+ {BUG_ID + FS + "pkg2" + FS + "package-summary.html",
+- "Result: <A HREF=\"../pkg2/Class3.html#TEST_17_PASSES\">\"Test 17 passes\"</A>"},
++ "Result: <a href=\"../pkg2/Class3.html#TEST_17_PASSES\">\"Test 17 passes\"</a>"},
+ //Test @value tag used with custom tag.
+ {BUG_ID + FS + "pkg1" + FS + "CustomTagUsage.html",
+- "<DT><STRONG>Todo:</STRONG></DT>" + NL +
+- " <DD>the value of this constant is 55.</DD>"},
++ "<dt><span class=\"strong\">Todo:</span></dt>" + NL +
++ " <dd>the value of this constant is 55.</dd>"},
+ //Test @value warning printed when used with non-constant.
+ {WARNING_OUTPUT,"warning - @value tag (which references nonConstant) " +
+ "can only be used in constants."
+diff --git a/test/com/sun/javadoc/testWarnings/TestWarnings.java b/test/com/sun/javadoc/testWarnings/TestWarnings.java
+--- langtools/test/com/sun/javadoc/testWarnings/TestWarnings.java
++++ langtools/test/com/sun/javadoc/testWarnings/TestWarnings.java
+@@ -65,9 +65,9 @@
+ };
+
+ private static final String[][] TEST2 = {
+- {BUG_ID + FS + "pkg" + FS + "X.html", "<A HREF=\"../pkg/X.html#m()\"><CODE>m()</CODE></A><br/>"},
+- {BUG_ID + FS + "pkg" + FS + "X.html", "<A HREF=\"../pkg/X.html#X()\"><CODE>X()</CODE></A><br/>"},
+- {BUG_ID + FS + "pkg" + FS + "X.html", "<A HREF=\"../pkg/X.html#f\"><CODE>f</CODE></A><br/>"},
++ {BUG_ID + FS + "pkg" + FS + "X.html", "<a href=\"../pkg/X.html#m()\"><code>m()</code></a><br/>"},
++ {BUG_ID + FS + "pkg" + FS + "X.html", "<a href=\"../pkg/X.html#X()\"><code>X()</code></a><br/>"},
++ {BUG_ID + FS + "pkg" + FS + "X.html", "<a href=\"../pkg/X.html#f\"><code>f</code></a><br/>"},
+ };
+
+ private static final String[][] NEGATED_TEST2 = NO_TEST;