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 index a7cad980bbcba2c3639d8c6e02e7ae4cd175e252..0809e1847056cb24d2a6c1d977a93f9423c35ab9 100644 --- a/src/share/classes/com/sun/tools/doclets/formats/html/AbstractIndexWriter.java +++ b/src/share/classes/com/sun/tools/doclets/formats/html/AbstractIndexWriter.java @@ -25,12 +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.*; + /** * Generate Index for all the Member Names with Indexing in * Unicode Order. This class is a base class for {@link SingleIndexWriter} and @@ -100,18 +100,22 @@ public class AbstractIndexWriter extends HtmlDocletWriter { h2(); strong(unicode.toString()); h2End(); - dl(); - for (int i = 0; i < memberlist.size(); i++) { - Doc element = memberlist.get(i); - if (element instanceof MemberDoc) { - printDescription((MemberDoc)element); - } else if (element instanceof ClassDoc) { - printDescription((ClassDoc)element); - } else if (element instanceof PackageDoc) { - printDescription((PackageDoc)element); + int memberListSize = memberlist.size(); + // Display the list only if there are elements to be displayed. + if (memberListSize > 0) { + dl(); + for (int i = 0; i < memberListSize; i++) { + Doc element = memberlist.get(i); + if (element instanceof MemberDoc) { + printDescription((MemberDoc)element); + } else if (element instanceof ClassDoc) { + printDescription((ClassDoc)element); + } else if (element instanceof PackageDoc) { + printDescription((PackageDoc)element); + } } + dlEnd(); } - dlEnd(); hr(); } @@ -126,8 +130,10 @@ public class AbstractIndexWriter extends HtmlDocletWriter { printPackageLink(pkg, Util.getPackageName(pkg), true); print(" - "); print(configuration.getText("doclet.package") + " " + pkg.name()); + dtEnd(); dd(); printSummaryComment(pkg); + ddEnd(); } /** @@ -140,8 +146,10 @@ public class AbstractIndexWriter extends HtmlDocletWriter { printLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_INDEX, cd, true)); print(" - "); printClassInfo(cd); + dtEnd(); dd(); printComment(cd); + ddEnd(); } /** @@ -178,8 +186,10 @@ public class AbstractIndexWriter extends HtmlDocletWriter { println(" - "); printMemberDesc(member); println(); + dtEnd(); dd(); printComment(member); + ddEnd(); println(); } 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 index 268dbe009fbd8123809ba0828231594989487834..d6c298f13da38da08cac80a8456afddde28c4bde 100644 --- a/src/share/classes/com/sun/tools/doclets/formats/html/AbstractMemberWriter.java +++ b/src/share/classes/com/sun/tools/doclets/formats/html/AbstractMemberWriter.java @@ -25,12 +25,12 @@ package com.sun.tools.doclets.formats.html; -import com.sun.tools.doclets.internal.toolkit.util.*; -import com.sun.tools.doclets.internal.toolkit.taglets.*; +import java.lang.reflect.Modifier; +import java.util.*; import com.sun.javadoc.*; -import java.util.*; -import java.lang.reflect.Modifier; +import com.sun.tools.doclets.internal.toolkit.util.*; +import com.sun.tools.doclets.internal.toolkit.taglets.*; /** * The base class for member writers. @@ -38,6 +38,7 @@ import java.lang.reflect.Modifier; * @author Robert Field * @author Atul M Dambalkar * @author Jamie Ho (Re-write) + * @author Bhavesh Patel (Modified) */ public abstract class AbstractMemberWriter { @@ -232,10 +233,26 @@ public abstract class AbstractMemberWriter { } } + /** + * Print the deprecated output for the given member. + * + * @param member the member being documented. + */ + protected void printDeprecated(ProgramElementDoc member) { + String output = (new DeprecatedTaglet()).getTagletOutput(member, + writer.getTagletWriterInstance(false)).toString().trim(); + if (!output.isEmpty()) { + writer.printMemberDetailsListStartTag(); + writer.print(output); + } + } + protected void printComment(ProgramElementDoc member) { if (member.inlineTags().length > 0) { + writer.printMemberDetailsListStartTag(); writer.dd(); writer.printInlineComment(member); + writer.ddEnd(); } } @@ -266,6 +283,14 @@ public abstract class AbstractMemberWriter { writer.printTags(member); } + /** + * Write the member footer. + */ + protected void printMemberFooter() { + writer.printMemberDetailsListEndTag(); + assert !writer.getMemberDetailsListPrinted(); + } + /** * Forward to containing writer */ 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 index 570f27542dd308d1240463162cbf0bf842b1eab7..1442e3ccf0cb09f97375ee3e3c34ea9ec2cf1c3d 100644 --- a/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeOptionalMemberWriterImpl.java +++ b/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeOptionalMemberWriterImpl.java @@ -25,11 +25,11 @@ package com.sun.tools.doclets.formats.html; -import com.sun.tools.doclets.internal.toolkit.*; -import com.sun.javadoc.*; - import java.io.*; +import com.sun.javadoc.*; +import com.sun.tools.doclets.internal.toolkit.*; + /** * Writes annotation type optional member documentation in HTML format. * @@ -63,14 +63,20 @@ public class AnnotationTypeOptionalMemberWriterImpl extends * {@inheritDoc} */ public void writeDefaultValueInfo(MemberDoc member) { - writer.dl(); - writer.dt(); - writer.strong(ConfigurationImpl.getInstance(). - getText("doclet.Default")); - writer.dd(); - writer.print(((AnnotationTypeElementDoc) member).defaultValue()); - writer.ddEnd(); - writer.dlEnd(); + 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(); + } } /** 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 index 801ec8a241d6fbf20fbd9e9d45d8237925f6275e..01e517ce426199e5ef1064393e995c5cd4433d92 100644 --- a/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeRequiredMemberWriterImpl.java +++ b/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeRequiredMemberWriterImpl.java @@ -25,12 +25,11 @@ package com.sun.tools.doclets.formats.html; -import com.sun.tools.doclets.internal.toolkit.*; -import com.sun.tools.doclets.internal.toolkit.taglets.*; -import com.sun.javadoc.*; - import java.io.*; +import com.sun.javadoc.*; +import com.sun.tools.doclets.internal.toolkit.*; + /** * Writes annotation type required member documentation in HTML format. * @@ -134,17 +133,14 @@ public class AnnotationTypeRequiredMemberWriterImpl extends AbstractMemberWriter strong(member.name()); } writer.preEnd(); - writer.dl(); + assert !writer.getMemberDetailsListPrinted(); } /** * {@inheritDoc} */ public void writeComments(MemberDoc member) { - if (member.inlineTags().length > 0) { - writer.dd(); - writer.printInlineComment(member); - } + printComment(member); } /** @@ -160,7 +156,7 @@ public class AnnotationTypeRequiredMemberWriterImpl extends AbstractMemberWriter * Write the annotation type member footer. */ public void writeMemberFooter() { - writer.dlEnd(); + printMemberFooter(); } /** @@ -267,9 +263,7 @@ public class AnnotationTypeRequiredMemberWriterImpl extends AbstractMemberWriter * {@inheritDoc} */ public void writeDeprecated(MemberDoc member) { - print(((TagletOutputImpl) - (new DeprecatedTaglet()).getTagletOutput(member, - writer.getTagletWriterInstance(false))).toString()); + printDeprecated(member); } private Type getType(MemberDoc member) { 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 index fc2527db89b7824b6cd4051d7d0f4c57a3dac1e7..594ce856a05f40c2168c7b68157f7a730e8e7378 100644 --- a/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeWriterImpl.java +++ b/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeWriterImpl.java @@ -25,10 +25,10 @@ package com.sun.tools.doclets.formats.html; +import com.sun.javadoc.*; 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.javadoc.*; /** * Generate the Class Information Page. @@ -165,8 +165,6 @@ public class AnnotationTypeWriterImpl extends SubWriterHolderWriter * {@inheritDoc} */ public void writeAnnotationTypeSignature(String modifiers) { - dl(); - dt(); preNoNewLine(); writeAnnotationInfo(annotationType); print(modifiers); @@ -178,7 +176,6 @@ public class AnnotationTypeWriterImpl extends SubWriterHolderWriter } else { strong(name); } - dlEnd(); preEnd(); p(); } @@ -334,6 +331,7 @@ public class AnnotationTypeWriterImpl extends SubWriterHolderWriter } else { strongText("doclet.Enclosing_Class"); } + dtEnd(); dd(); printLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_CLASS, outerClass, false)); 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 index c15f76367dcb746c7cc856c7f0a4c2cd06a65404..8044b42dcbfb2715178d5bc967d7150ef242d0c0 100644 --- a/src/share/classes/com/sun/tools/doclets/formats/html/ClassWriterImpl.java +++ b/src/share/classes/com/sun/tools/doclets/formats/html/ClassWriterImpl.java @@ -25,12 +25,12 @@ package com.sun.tools.doclets.formats.html; +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.internal.toolkit.builders.*; -import com.sun.javadoc.*; - -import java.util.*; import com.sun.tools.doclets.internal.toolkit.taglets.*; /** @@ -171,8 +171,6 @@ public class ClassWriterImpl extends SubWriterHolderWriter */ public void writeClassSignature(String modifiers) { boolean isInterface = classDoc.isInterface(); - dl(); - dt(); preNoNewLine(); writeAnnotationInfo(classDoc); print(modifiers); @@ -191,7 +189,7 @@ public class ClassWriterImpl extends SubWriterHolderWriter Type superclass = Util.getFirstVisibleSuperClass(classDoc, configuration()); if (superclass != null) { - dt(); + println(); print("extends "); printLink(new LinkInfoImpl( LinkInfoImpl.CONTEXT_CLASS_SIGNATURE_PARENT_NAME, @@ -208,7 +206,7 @@ public class ClassWriterImpl extends SubWriterHolderWriter continue; } if (counter == 0) { - dt(); + println(); print(isInterface? "extends " : "implements "); } else { print(", "); @@ -219,7 +217,6 @@ public class ClassWriterImpl extends SubWriterHolderWriter counter++; } } - dlEnd(); preEnd(); p(); } @@ -342,6 +339,7 @@ public class ClassWriterImpl extends SubWriterHolderWriter TagletOutput output = (new ParamTaglet()).getTagletOutput(classDoc, getTagletWriterInstance(false)); print(output.toString()); + dtEnd(); dlEnd(); } } @@ -360,8 +358,10 @@ public class ClassWriterImpl extends SubWriterHolderWriter dl(); dt(); strongText("doclet.Subclasses"); + dtEnd(); writeClassLinks(LinkInfoImpl.CONTEXT_SUBCLASSES, subclasses); + dlEnd(); } } } @@ -376,8 +376,10 @@ public class ClassWriterImpl extends SubWriterHolderWriter dl(); dt(); strongText("doclet.Subinterfaces"); + dtEnd(); writeClassLinks(LinkInfoImpl.CONTEXT_SUBINTERFACES, subInterfaces); + dlEnd(); } } } @@ -398,8 +400,10 @@ public class ClassWriterImpl extends SubWriterHolderWriter dl(); dt(); strongText("doclet.Implementing_Classes"); + dtEnd(); writeClassLinks(LinkInfoImpl.CONTEXT_IMPLEMENTED_CLASSES, implcl); + dlEnd(); } } @@ -414,8 +418,10 @@ public class ClassWriterImpl extends SubWriterHolderWriter dl(); dt(); strongText("doclet.All_Implemented_Interfaces"); + dtEnd(); writeClassLinks(LinkInfoImpl.CONTEXT_IMPLEMENTED_INTERFACES, interfaceArray); + dlEnd(); } } @@ -430,8 +436,10 @@ public class ClassWriterImpl extends SubWriterHolderWriter dl(); dt(); strongText("doclet.All_Superinterfaces"); + dtEnd(); writeClassLinks(LinkInfoImpl.CONTEXT_SUPER_INTERFACES, interfaceArray); + dlEnd(); } } @@ -455,7 +463,6 @@ public class ClassWriterImpl extends SubWriterHolderWriter } } ddEnd(); - dlEnd(); } protected void navLinkTree() { @@ -574,6 +581,7 @@ public class ClassWriterImpl extends SubWriterHolderWriter } else { strongText("doclet.Enclosing_Class"); } + dtEnd(); dd(); printLink(new LinkInfoImpl(LinkInfoImpl.CONTEXT_CLASS, outerClass, false)); 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 index 72d2e7ca4c5f5e200ebd68dbc601cdc59dec4151..cb5adbdeeaf73ab86754c8517530204c582de6d2 100644 --- a/src/share/classes/com/sun/tools/doclets/formats/html/ConstructorWriterImpl.java +++ b/src/share/classes/com/sun/tools/doclets/formats/html/ConstructorWriterImpl.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.tools.doclets.internal.toolkit.taglets.*; -import com.sun.javadoc.*; -import java.util.*; -import java.io.*; /** * Writes constructor documentation. @@ -149,7 +149,7 @@ public class ConstructorWriterImpl extends AbstractExecutableMemberWriter writeParameters(constructor); writeExceptions(constructor); writer.preEnd(); - writer.dl(); + assert !writer.getMemberDetailsListPrinted(); } /** @@ -158,12 +158,7 @@ public class ConstructorWriterImpl extends AbstractExecutableMemberWriter * @param constructor the constructor being documented. */ public void writeDeprecated(ConstructorDoc constructor) { - String output = ((TagletOutputImpl) - (new DeprecatedTaglet()).getTagletOutput(constructor, - writer.getTagletWriterInstance(false))).toString(); - if (output != null && output.trim().length() > 0) { - writer.print(output); - } + printDeprecated(constructor); } /** @@ -172,10 +167,7 @@ public class ConstructorWriterImpl extends AbstractExecutableMemberWriter * @param constructor the constructor being documented. */ public void writeComments(ConstructorDoc constructor) { - if (constructor.inlineTags().length > 0) { - writer.dd(); - writer.printInlineComment(constructor); - } + printComment(constructor); } /** @@ -191,7 +183,7 @@ public class ConstructorWriterImpl extends AbstractExecutableMemberWriter * Write the constructor footer. */ public void writeConstructorFooter() { - writer.dlEnd(); + printMemberFooter(); } /** 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 index 226d9086eeba1312302cd2b03e9a0840b2a6cddb..1d5b4ffbd299db5b520d12061698d31970484d3b 100644 --- a/src/share/classes/com/sun/tools/doclets/formats/html/EnumConstantWriterImpl.java +++ b/src/share/classes/com/sun/tools/doclets/formats/html/EnumConstantWriterImpl.java @@ -25,12 +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.taglets.*; import com.sun.tools.doclets.internal.toolkit.util.*; -import com.sun.javadoc.*; - -import java.io.*; /** * Writes enum constant documentation in HTML format. @@ -146,26 +145,21 @@ public class EnumConstantWriterImpl extends AbstractMemberWriter strong(enumConstant.name()); } writer.preEnd(); - writer.dl(); + assert !writer.getMemberDetailsListPrinted(); } /** * {@inheritDoc} */ public void writeDeprecated(FieldDoc enumConstant) { - print(((TagletOutputImpl) - (new DeprecatedTaglet()).getTagletOutput(enumConstant, - writer.getTagletWriterInstance(false))).toString()); + printDeprecated(enumConstant); } /** * {@inheritDoc} */ public void writeComments(FieldDoc enumConstant) { - if (enumConstant.inlineTags().length > 0) { - writer.dd(); - writer.printInlineComment(enumConstant); - } + printComment(enumConstant); } /** @@ -179,7 +173,7 @@ public class EnumConstantWriterImpl extends AbstractMemberWriter * {@inheritDoc} */ public void writeEnumConstantFooter() { - writer.dlEnd(); + printMemberFooter(); } /** 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 index cf37e9ad958391151b5d02c041b35ae6e8f68252..bd97166b8ab2c7a6daa12e0ffdf1af267108478d 100644 --- a/src/share/classes/com/sun/tools/doclets/formats/html/FieldWriterImpl.java +++ b/src/share/classes/com/sun/tools/doclets/formats/html/FieldWriterImpl.java @@ -25,12 +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.taglets.*; import com.sun.tools.doclets.internal.toolkit.util.*; -import com.sun.javadoc.*; - -import java.io.*; /** * Writes field documentation in HTML format. @@ -156,7 +155,7 @@ public class FieldWriterImpl extends AbstractMemberWriter strong(field.name()); } writer.preEnd(); - writer.dl(); + assert !writer.getMemberDetailsListPrinted(); } /** @@ -165,9 +164,7 @@ public class FieldWriterImpl extends AbstractMemberWriter * @param field the field being documented. */ public void writeDeprecated(FieldDoc field) { - print(((TagletOutputImpl) - (new DeprecatedTaglet()).getTagletOutput(field, - writer.getTagletWriterInstance(false))).toString()); + printDeprecated(field); } /** @@ -178,10 +175,12 @@ public class FieldWriterImpl extends AbstractMemberWriter public void writeComments(FieldDoc field) { 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(); } else { String classlink = writer.codeText( writer.getDocLink(LinkInfoImpl.CONTEXT_FIELD_DOC_COPY, @@ -196,6 +195,7 @@ public class FieldWriterImpl extends AbstractMemberWriter writer.ddEnd(); writer.dd(); writer.printInlineComment(field); + writer.ddEnd(); } } } @@ -213,7 +213,7 @@ public class FieldWriterImpl extends AbstractMemberWriter * Write the field footer. */ public void writeFieldFooter() { - writer.dlEnd(); + printMemberFooter(); } /** 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 index 352eeb7010b44511c77b05eb7f2689e1716cf6a2..8f15eee3ab6c0299fd399a451ab1fd5a031b5b4f 100644 --- a/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java +++ b/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java @@ -24,17 +24,16 @@ */ package com.sun.tools.doclets.formats.html; -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.*; -import com.sun.javadoc.*; import java.io.*; import java.text.SimpleDateFormat; 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.*; /** * Class for the Html Format Code Generation specific to JavaDoc. @@ -44,6 +43,7 @@ import java.util.*; * @since 1.2 * @author Atul M Dambalkar * @author Robert Field + * @author Bhavesh Patel (Modified) */ public class HtmlDocletWriter extends HtmlDocWriter { @@ -205,7 +205,13 @@ public class HtmlDocletWriter extends HtmlDocWriter { private void printMethodInfo(MethodDoc method) { ClassDoc[] intfacs = method.containingClass().interfaces(); MethodDoc overriddenMethod = method.overriddenMethod(); - if (intfacs.length > 0 || overriddenMethod != null) { + // Check whether there is any implementation or overridden info to be + // printed. If no overridden or implementation info needs to be + // printed, do not print this section. + if ((intfacs.length > 0 && + new ImplementedMethods(method, this.configuration).build().length > 0) || + overriddenMethod != null) { + printMemberDetailsListStartTag(); dd(); printTagsInfoHeader(); MethodWriterImpl.printImplementsInfo(this, method); @@ -216,7 +222,6 @@ public class HtmlDocletWriter extends HtmlDocWriter { printTagsInfoFooter(); ddEnd(); } - dd(); } protected void printTags(Doc doc) { @@ -230,41 +235,35 @@ public class HtmlDocletWriter extends HtmlDocWriter { TagletWriter.genTagOuput(configuration.tagletManager, doc, configuration.tagletManager.getCustomTags(doc), getTagletWriterInstance(false), output); - if (output.toString().trim().length() > 0) { - printTagsInfoHeader(); - print(output.toString()); - printTagsInfoFooter(); - } else if (! (doc instanceof ConstructorDoc || - doc instanceof RootDoc || doc instanceof ClassDoc)) { - //To be consistent with 1.4.2 output. - //I hate to do this but we have to pass the diff test to prove - //nothing has broken. + 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(); } } /** - * Check whether there are any tags to be printed. + * Check whether there are any tags for Serialization Overview + * section to be printed. * - * @param doc the Doc object to check for tags. + * @param field the FieldDoc object to check for tags. * @return true if there are tags to be printed else return false. */ - protected boolean hasTagsToPrint(Doc doc) { - if (doc instanceof MethodDoc) { - ClassDoc[] intfacs = ((MethodDoc)doc).containingClass().interfaces(); - MethodDoc overriddenMethod = ((MethodDoc)doc).overriddenMethod(); - if ((intfacs.length > 0 && - new ImplementedMethods((MethodDoc)doc, this.configuration).build().length > 0) || - overriddenMethod != null) { - return true; - } - } + protected boolean hasSerializationOverviewTags(FieldDoc field) { TagletOutputImpl output = new TagletOutputImpl(""); - TagletWriter.genTagOuput(configuration.tagletManager, doc, - configuration.tagletManager.getCustomTags(doc), + TagletWriter.genTagOuput(configuration.tagletManager, field, + configuration.tagletManager.getCustomTags(field), getTagletWriterInstance(false), output); - return (output.toString().trim().isEmpty()); + return (!output.toString().trim().isEmpty()); } /** 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 index 3e84b00dbb6da998ddc5b20ea64f518696c86039..15508ed643b4509da428114d95a0a8b1b81d88d2 100644 --- a/src/share/classes/com/sun/tools/doclets/formats/html/HtmlSerialFieldWriter.java +++ b/src/share/classes/com/sun/tools/doclets/formats/html/HtmlSerialFieldWriter.java @@ -25,11 +25,12 @@ package com.sun.tools.doclets.formats.html; +import java.util.*; + +import com.sun.javadoc.*; 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.javadoc.*; -import java.util.*; /** * Generate serialized form for serializable fields. @@ -37,6 +38,7 @@ import java.util.*; * serialField is processed. * * @author Joe Fialli + * @author Bhavesh Patel (Modified) */ public class HtmlSerialFieldWriter extends FieldWriterImpl implements SerializedFormWriter.SerialFieldWriter { @@ -75,7 +77,7 @@ public class HtmlSerialFieldWriter extends FieldWriterImpl writer.println(); if (heading.equals( configuration().getText("doclet.Serialized_Form_class"))) { - writer.dl(); + assert !writer.getMemberDetailsListPrinted(); } } else { writer.printTableHeadingBackground(heading); @@ -102,7 +104,7 @@ public class HtmlSerialFieldWriter extends FieldWriterImpl print(fieldDimensions + ' '); strong(fieldName); writer.preEnd(); - writer.dl(); + assert !writer.getMemberDetailsListPrinted(); } /** @@ -111,9 +113,7 @@ public class HtmlSerialFieldWriter extends FieldWriterImpl * @param field the field to document. */ public void writeMemberDeprecatedInfo(FieldDoc field) { - print(((TagletOutputImpl) - (new DeprecatedTaglet()).getTagletOutput(field, - writer.getTagletWriterInstance(false))).toString()); + printDeprecated(field); } /** @@ -123,14 +123,17 @@ public class HtmlSerialFieldWriter extends FieldWriterImpl */ public void writeMemberDescription(FieldDoc field) { if (field.inlineTags().length > 0) { + writer.printMemberDetailsListStartTag(); writer.dd(); writer.printInlineComment(field); + writer.ddEnd(); } Tag[] tags = field.tags("serial"); if (tags.length > 0) { - writer.dt(); + writer.printMemberDetailsListStartTag(); writer.dd(); writer.printInlineComment(field, tags[0]); + writer.ddEnd(); } } @@ -140,9 +143,14 @@ public class HtmlSerialFieldWriter extends FieldWriterImpl * @param serialFieldTag the field to document (represented by tag). */ public void writeMemberDescription(SerialFieldTag serialFieldTag) { - writer.dd(); - writer.print(serialFieldTag.description()); - writer.dlEnd(); + String serialFieldTagDesc = serialFieldTag.description().trim(); + if (!serialFieldTagDesc.isEmpty()) { + writer.dl(); + writer.dd(); + writer.print(serialFieldTagDesc); + writer.ddEnd(); + writer.dlEnd(); + } } /** @@ -151,33 +159,57 @@ public class HtmlSerialFieldWriter extends FieldWriterImpl * @param field the field to document. */ public void writeMemberTags(FieldDoc field) { - writer.dl(); TagletOutputImpl output = new TagletOutputImpl(""); TagletWriter.genTagOuput(configuration().tagletManager, field, configuration().tagletManager.getCustomTags(field), writer.getTagletWriterInstance(false), output); - if (output.toString().length() > 0) { - print(output.toString()); + String outputString = output.toString().trim(); + if (!outputString.isEmpty()) { + writer.printMemberDetailsListStartTag(); + writer.dd(); + writer.dl(); + print(outputString); + writer.dlEnd(); + writer.ddEnd(); } - writer.dlEnd(); - } - public void writeMemberFooter(FieldDoc member) { - writer.dlEnd(); } /** - * Check to see if member details should be printed. If + * Check to see if overview details should be printed. If * nocomment option set or if there is no text to be printed - * for deprecation info, inline comment, no serial tag or inline tags, - * do not print member details. + * for deprecation info, comment or tags, do not print overview details. + * + * @param field the field to check overview details for. + * @return true if overview details need to be printed */ - public boolean shouldPrintMemberDetails(FieldDoc field) { - if (!configuration().nocomment) - if((field.inlineTags().length > 0) || - (field.tags("serial").length > 0) || (writer.hasTagsToPrint(field))) + public boolean shouldPrintOverview(FieldDoc field) { + if (!configuration().nocomment) { + if(!field.commentText().isEmpty() || + writer.hasSerializationOverviewTags(field)) return true; - if (!Util.isDeprecated(field)) + } + if (field.tags("deprecated").length > 0) 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 index 9c0daf8e8cfd681b94f59b8e0b496227a972a386..083ee7f25cd1fd619385187e1ecd0dc1aa1fe114 100644 --- a/src/share/classes/com/sun/tools/doclets/formats/html/HtmlSerialMethodWriter.java +++ b/src/share/classes/com/sun/tools/doclets/formats/html/HtmlSerialMethodWriter.java @@ -25,9 +25,9 @@ package com.sun.tools.doclets.formats.html; +import com.sun.javadoc.*; import com.sun.tools.doclets.internal.toolkit.*; import com.sun.tools.doclets.internal.toolkit.taglets.*; -import com.sun.javadoc.*; /** * Generate serialized form for Serializable/Externalizable methods. @@ -66,14 +66,12 @@ public class HtmlSerialMethodWriter extends MethodWriterImpl implements writeSignature(member); } - public void writeMemberFooter(MethodDoc member) { - writer.dlEnd(); + public void writeMemberFooter() { + printMemberFooter(); } public void writeDeprecatedMemberInfo(MethodDoc member) { - print(((TagletOutputImpl) - (new DeprecatedTaglet()).getTagletOutput(member, - writer.getTagletWriterInstance(false))).toString()); + printDeprecated(member); } public void writeMemberDescription(MethodDoc member) { @@ -81,23 +79,27 @@ public class HtmlSerialMethodWriter extends MethodWriterImpl implements } public void writeMemberTags(MethodDoc member) { - writer.dd(); - writer.dl(); TagletOutputImpl output = new TagletOutputImpl(""); TagletManager tagletManager = ConfigurationImpl.getInstance().tagletManager; TagletWriter.genTagOuput(tagletManager, member, tagletManager.getSerializedFormTags(), writer.getTagletWriterInstance(false), output); - print(output.toString()); + String outputString = output.toString().trim(); + if (!outputString.isEmpty()) { + writer.printMemberDetailsListStartTag(); + writer.dd(); + writer.dl(); + print(outputString); + writer.dlEnd(); + writer.ddEnd(); + } MethodDoc method = member; if (method.name().compareTo("writeExternal") == 0 && method.tags("serialData").length == 0) { serialWarning(member.position(), "doclet.MissingSerialDataTag", method.containingClass().qualifiedName(), method.name()); } - writer.ddEnd(); - writer.dlEnd(); } protected void printTypeLinkNoDimension(Type type) { 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 index 7a4da14b0d687b47ed23f50c771d8716a799c548..a74283179b3cdea305e0e659fa0223c7f96bedcf 100644 --- a/src/share/classes/com/sun/tools/doclets/formats/html/MethodWriterImpl.java +++ b/src/share/classes/com/sun/tools/doclets/formats/html/MethodWriterImpl.java @@ -25,13 +25,13 @@ 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.tools.doclets.internal.toolkit.taglets.*; -import java.io.*; -import com.sun.javadoc.*; - /** * Writes method documentation in HTML format. * @@ -172,7 +172,7 @@ public class MethodWriterImpl extends AbstractExecutableMemberWriter writeParameters(method); writeExceptions(method); writer.preEnd(); - writer.dl(); + assert !writer.getMemberDetailsListPrinted(); } /** @@ -181,12 +181,7 @@ public class MethodWriterImpl extends AbstractExecutableMemberWriter * @param method the method being documented. */ public void writeDeprecated(MethodDoc method) { - String output = ((TagletOutputImpl) - (new DeprecatedTaglet()).getTagletOutput(method, - writer.getTagletWriterInstance(false))).toString(); - if (output != null && output.trim().length() > 0) { - writer.print(output); - } + printDeprecated(method); } /** @@ -197,11 +192,13 @@ public class MethodWriterImpl extends AbstractExecutableMemberWriter public void writeComments(Type holder, MethodDoc method) { ClassDoc holderClassDoc = holder.asClassDoc(); if (method.inlineTags().length > 0) { + writer.printMemberDetailsListStartTag(); if (holder.asClassDoc().equals(classdoc) || (! (holderClassDoc.isPublic() || Util.isLinkable(holderClassDoc, configuration())))) { writer.dd(); writer.printInlineComment(method); + writer.ddEnd(); } else { String classlink = writer.codeText( writer.getDocLink(LinkInfoImpl.CONTEXT_METHOD_DOC_COPY, @@ -217,6 +214,7 @@ public class MethodWriterImpl extends AbstractExecutableMemberWriter writer.ddEnd(); writer.dd(); writer.printInlineComment(method); + writer.ddEnd(); } } } @@ -234,8 +232,7 @@ public class MethodWriterImpl extends AbstractExecutableMemberWriter * Write the method footer. */ public void writeMethodFooter() { - writer.ddEnd(); - writer.dlEnd(); + printMemberFooter(); } /** @@ -318,6 +315,7 @@ public class MethodWriterImpl extends AbstractExecutableMemberWriter String name = method.name(); writer.dt(); writer.strongText(label); + writer.dtEnd(); writer.dd(); String methLink = writer.codeText( writer.getLink( @@ -326,6 +324,7 @@ public class MethodWriterImpl extends AbstractExecutableMemberWriter writer.getAnchor(method), name, false) )); writer.printText("doclet.in_class", methLink, overriddenTypeLink); + writer.ddEnd(); } } @@ -364,11 +363,13 @@ public class MethodWriterImpl extends AbstractExecutableMemberWriter 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(); } } 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 index 2b3d2ea37092ba13cd73d1777778c2a01f0cb56a..23803455ad16e45b10b10004423b9b08b7f25b60 100644 --- a/src/share/classes/com/sun/tools/doclets/formats/html/NestedClassWriterImpl.java +++ b/src/share/classes/com/sun/tools/doclets/formats/html/NestedClassWriterImpl.java @@ -25,11 +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.*; /** * Writes nested class documentation in HTML format. @@ -129,7 +129,6 @@ public class NestedClassWriterImpl extends AbstractMemberWriter writer.println(""); } writer.anchor(nestedClass.name()); - writer.dl(); writer.h3(); writer.print(nestedClass.name()); writer.h3End(); 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 index 638c6d4d75fb7a5f5d90105bfc77ca8c77948204..12f6d4e046609cc8a81012a113545bcd11aba58e 100644 --- a/src/share/classes/com/sun/tools/doclets/formats/html/PackageTreeWriter.java +++ b/src/share/classes/com/sun/tools/doclets/formats/html/PackageTreeWriter.java @@ -25,10 +25,11 @@ package com.sun.tools.doclets.formats.html; -import com.sun.tools.doclets.internal.toolkit.util.*; -import com.sun.javadoc.*; import java.io.*; +import com.sun.javadoc.*; +import com.sun.tools.doclets.internal.toolkit.util.*; + /** * 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. @@ -145,8 +146,10 @@ public class PackageTreeWriter extends AbstractTreeWriter { dl(); dt(); strongText("doclet.Package_Hierarchies"); + dtEnd(); dd(); navLinkMainTree(configuration.getText("doclet.All_Packages")); + ddEnd(); dlEnd(); hr(); } 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 index 353937f630a7bace663c48f80b98404642a525da..e83e6f9bdfe0dff6915d74962c20683b42bdfdfb 100644 --- a/src/share/classes/com/sun/tools/doclets/formats/html/TagletWriterImpl.java +++ b/src/share/classes/com/sun/tools/doclets/formats/html/TagletWriterImpl.java @@ -25,17 +25,18 @@ package com.sun.tools.doclets.formats.html; +import com.sun.javadoc.*; import com.sun.tools.doclets.internal.toolkit.*; import com.sun.tools.doclets.internal.toolkit.builders.SerializedFormBuilder; import com.sun.tools.doclets.internal.toolkit.taglets.*; import com.sun.tools.doclets.internal.toolkit.util.*; -import com.sun.javadoc.*; /** * The taglet writer that writes HTML. * * @since 1.5 * @author Jamie Ho + * @author Bhavesh Patel (Modified) */ public class TagletWriterImpl extends TagletWriter { @@ -99,11 +100,12 @@ public class TagletWriterImpl extends TagletWriter { output.append(DocletConstants.NL + "

" + DocletConstants.NL); } + output.append(""); } else { if (Util.isDeprecated(member.containingClass())) { output.append("

" + ConfigurationImpl.getInstance(). - getText("doclet.Deprecated") + " "); + getText("doclet.Deprecated") + " 
"); } } } @@ -123,7 +125,7 @@ public class TagletWriterImpl extends TagletWriter { public TagletOutput getParamHeader(String header) { StringBuffer result = new StringBuffer(); result.append("
"); - result.append("" + header + ""); + result.append("" + header + "
"); return new TagletOutputImpl(result.toString()); } @@ -132,7 +134,7 @@ public class TagletWriterImpl extends TagletWriter { */ public TagletOutput paramTagOutput(ParamTag paramTag, String paramName) { TagletOutput result = new TagletOutputImpl("
" + paramName + "" - + " - " + htmlWriter.commentTagsToString(paramTag, null, paramTag.inlineTags(), false)); + + " - " + htmlWriter.commentTagsToString(paramTag, null, paramTag.inlineTags(), false) + "
"); return result; } @@ -142,9 +144,9 @@ public class TagletWriterImpl extends TagletWriter { public TagletOutput returnTagOutput(Tag returnTag) { TagletOutput result = new TagletOutputImpl(DocletConstants.NL + "
" + "" + htmlWriter.configuration.getText("doclet.Returns") + - "" + "
" + + "" + "" + "
" + htmlWriter.commentTagsToString(returnTag, null, returnTag.inlineTags(), - false)); + false) + "
"); return result; } @@ -174,22 +176,21 @@ public class TagletWriterImpl extends TagletWriter { } if (holder.isClass() && ((ClassDoc)holder).isSerializable()) { //Automatically add link to serialized form page for serializable classes. - if (!(SerializedFormBuilder.serialInclude(holder) && + if ((SerializedFormBuilder.serialInclude(holder) && SerializedFormBuilder.serialInclude(((ClassDoc)holder).containingPackage()))) { - return result.equals("") ? null : new TagletOutputImpl(result); + result = addSeeHeader(result); + result += htmlWriter.getHyperLink(htmlWriter.relativePath + "serialized-form.html", + ((ClassDoc)holder).qualifiedName(), htmlWriter.configuration.getText("doclet.Serialized_Form"), false); } - result = addSeeHeader(result); - result += htmlWriter.getHyperLink(htmlWriter.relativePath + "serialized-form.html", - ((ClassDoc)holder).qualifiedName(), htmlWriter.configuration.getText("doclet.Serialized_Form"), false); } - return result.equals("") ? null : new TagletOutputImpl(result); + return result.equals("") ? null : new TagletOutputImpl(result + ""); } private String addSeeHeader(String result) { if (result != null && result.length() > 0) { return result + ", " + DocletConstants.NL; } else { - return "
" + htmlWriter.configuration().getText("doclet.See_Also") + "
"; + return "
" + htmlWriter.configuration().getText("doclet.See_Also") + "
"; } } @@ -205,7 +206,8 @@ public class TagletWriterImpl extends TagletWriter { } result += htmlWriter.commentTagsToString(simpleTags[i], null, simpleTags[i].inlineTags(), false); } - return new TagletOutputImpl(result + "
" + DocletConstants.NL); + result += "" + DocletConstants.NL; + return new TagletOutputImpl(result); } /** @@ -222,7 +224,7 @@ public class TagletWriterImpl extends TagletWriter { */ public TagletOutput getThrowsHeader() { return new TagletOutputImpl(DocletConstants.NL + "
" + "" + - htmlWriter.configuration().getText("doclet.Throws") + ""); + htmlWriter.configuration().getText("doclet.Throws") + "
"); } /** @@ -241,6 +243,7 @@ public class TagletWriterImpl extends TagletWriter { if (text != null && text.toString().length() > 0) { result += " - " + text; } + result += ""; return new TagletOutputImpl(result); } @@ -250,7 +253,7 @@ public class TagletWriterImpl extends TagletWriter { public TagletOutput throwsTagOutput(Type throwsType) { return new TagletOutputImpl(DocletConstants.NL + "
" + htmlWriter.codeText(htmlWriter.getLink( - new LinkInfoImpl(LinkInfoImpl.CONTEXT_MEMBER, throwsType)))); + new LinkInfoImpl(LinkInfoImpl.CONTEXT_MEMBER, throwsType))) + "
"); } /** 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 index 669cd1c86a11a7d8186c56268fed2435e5936b8d..7760df955d953ba4cabee43625c648cea8c46b91 100644 --- a/src/share/classes/com/sun/tools/doclets/formats/html/TreeWriter.java +++ b/src/share/classes/com/sun/tools/doclets/formats/html/TreeWriter.java @@ -25,9 +25,11 @@ package com.sun.tools.doclets.formats.html; -import com.sun.tools.doclets.internal.toolkit.util.*; -import com.sun.javadoc.*; import java.io.*; + +import com.sun.javadoc.*; +import com.sun.tools.doclets.internal.toolkit.util.*; + /** * Generate Class Hierarchy page for all the Classes in this run. Use * ClassTree for building the Tree. The name of @@ -120,6 +122,7 @@ public class TreeWriter extends AbstractTreeWriter { dl(); dt(); strongText("doclet.Package_Hierarchies"); + dtEnd(); dd(); for (int i = 0; i < packages.length; i++) { if (packages[i].name().length() == 0) { @@ -131,6 +134,7 @@ public class TreeWriter extends AbstractTreeWriter { print(", "); } } + ddEnd(); dlEnd(); hr(); } 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 index d4cdd39b1cecbb70b09d8fa0250b5dcd1ed09f72..64cfd6aba92964c056b1298a8d09c79232617583 100644 --- 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 @@ -244,6 +244,31 @@ public abstract class HtmlDocWriter extends HtmlWriter { return ""; } + /** + * Keep track of member details list. Print the definition list start tag + * if it is not printed yet. + */ + public void printMemberDetailsListStartTag () { + if (!getMemberDetailsListPrinted()) { + dl(); + memberDetailsListPrinted = true; + } + } + + /** + * Print the definition list end tag if the list start tag was printed. + */ + public void printMemberDetailsListEndTag () { + if (getMemberDetailsListPrinted()) { + dlEnd(); + memberDetailsListPrinted = false; + } + } + + public boolean getMemberDetailsListPrinted() { + return memberDetailsListPrinted; + } + /** * Print the frameset version of the Html file header. * Called only when generating an HTML frameset file. 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 index cdafe1be907a98398d7d0c570ee4e3a1675efdab..60e4c2fb0ac1e3e8de7781b81da9397f88c146eb 100644 --- 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 @@ -25,9 +25,10 @@ package com.sun.tools.doclets.formats.html.markup; +import java.io.*; + import com.sun.tools.doclets.internal.toolkit.*; import com.sun.tools.doclets.internal.toolkit.util.*; -import java.io.*; /** * Class for the Html format code generation. @@ -60,6 +61,11 @@ public class HtmlWriter extends PrintWriter { */ protected Configuration configuration; + /** + * The flag to indicate whether a member details list is printed or not. + */ + protected boolean memberDetailsListPrinted; + /** * Constructor. * @@ -79,6 +85,7 @@ public class HtmlWriter extends PrintWriter { super(Util.genWriter(configuration, path, filename, docencoding)); this.configuration = configuration; htmlFilename = filename; + this.memberDetailsListPrinted = false; } /** @@ -529,7 +536,14 @@ public class HtmlWriter extends PrintWriter { } /** - * Print <DT> tag. + * Print </DT> tag. + */ + public void dtEnd() { + print(""); + } + + /** + * Print <DD> tag. */ public void dd() { print("
"); 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 index d1de4df22dd2c466883ec3bf8e056a491eb62ab9..9104a5e4b8f3e9d74352c5d66e1fcfc217656fdf 100644 --- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/SerializedFormWriter.java +++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/SerializedFormWriter.java @@ -25,9 +25,10 @@ package com.sun.tools.doclets.internal.toolkit; -import com.sun.javadoc.*; import java.io.*; +import com.sun.javadoc.*; + /** * The interface for writing serialized form output. * @@ -147,22 +148,27 @@ public interface SerializedFormWriter { String fieldDimensions, String fieldName); /** - * Write the footer. - * - * @param member the member to write the header for. + * Write the member footer. */ - public void writeMemberFooter(FieldDoc member); + public void writeMemberFooter(); /** - * Check to see if member details should be printed. If + * Check to see if overview details should be printed. If * nocomment option set or if there is no text to be printed - * for deprecation info, inline comment, no serial tag or inline tags, - * do not print member details. + * for deprecation info, inline comment or tags, + * do not print overview details. * - * @param member the member to check details for. - * @return true if details need to be printed + * @param field the field to check overview details for. + * @return true if overview details need to be printed */ - public boolean shouldPrintMemberDetails(FieldDoc member); + public boolean shouldPrintOverview(FieldDoc field); + + /** + * Write the footer. + * + * @param heading the heading that was written. + */ + public void writeFooter (String heading); } /** @@ -193,10 +199,8 @@ public interface SerializedFormWriter { /** * Write the footer. - * - * @param member the member to write the header for. */ - public void writeMemberFooter(MethodDoc member); + public void writeMemberFooter(); /** * Write the deprecated information for this member. 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 index 1434bc0cd0ad91f9ad8b9f394c6a444e4ad390f0..8275da40dfa04b69d34e6284fb6f900bbd17ac85 100644 --- 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 @@ -25,13 +25,14 @@ package com.sun.tools.doclets.internal.toolkit.builders; -import com.sun.tools.doclets.internal.toolkit.util.*; -import com.sun.tools.doclets.internal.toolkit.*; -import com.sun.javadoc.*; import java.io.*; import java.lang.reflect.*; import java.util.*; +import com.sun.javadoc.*; +import com.sun.tools.doclets.internal.toolkit.util.*; +import com.sun.tools.doclets.internal.toolkit.*; + /** * Builds the serialized form. * @@ -40,6 +41,7 @@ import java.util.*; * Do not use it as an API * * @author Jamie Ho + * @author Bhavesh Patel (Modified) * @since 1.5 */ public class SerializedFormBuilder extends AbstractBuilder { @@ -379,7 +381,7 @@ public class SerializedFormBuilder extends AbstractBuilder { * Build the method footer. */ public void buildMethodFooter() { - methodWriter.writeMemberFooter((MethodDoc) currentMember); + methodWriter.writeMemberFooter(); } /** @@ -405,15 +407,18 @@ public class SerializedFormBuilder extends AbstractBuilder { 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)) { + if (fieldWriter.shouldPrintOverview(serialPersistentField)) { fieldWriter.writeHeader( - configuration.getText("doclet.Serialized_Form_class")); + 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")); } } } @@ -476,11 +481,11 @@ public class SerializedFormBuilder extends AbstractBuilder { } /** - * Build the field footer. + * Build the field sub footer. */ - public void buildFieldFooter() { + public void buildFieldSubFooter() { if (! currentClass.definesSerializableFields()) { - fieldWriter.writeMemberFooter((FieldDoc) currentMember); + fieldWriter.writeMemberFooter(); } } 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 index 8eaa2d77abcfb5edea60300417de5644cb9edebf..9c4d93a176117fd6ec404b47ab67bdef8b8f9388 100644 --- 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 @@ -1,205 +1,205 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
" + NL + "" + NL + ""}, // Method inheritence from non-public superinterface. {BUG_ID + "-2" + FS + "pkg" + FS + "PublicInterface.html", "Methods inherited from interface " + @@ -209,12 +209,12 @@ public class TestPrivateClasses extends JavadocTester { //Make sure implemented interfaces from private superclass are inherited {BUG_ID + "-2" + FS + "pkg" + FS + "PublicInterface.html", - "All Known Implementing Classes:
All Known Implementing Classes:
PrivateParent, " + "PublicChild"}, {BUG_ID + "-2" + FS + "pkg" + FS + "PublicChild.html", - "All Implemented Interfaces:
All Implemented Interfaces:
PrivateInterface, " + "" + "PublicInterface"}, @@ -226,7 +226,7 @@ public class TestPrivateClasses extends JavadocTester { "I"}, {BUG_ID + "-2" + FS + "pkg2" + FS + "C.html", - "Specified by:
" + + "Specified by:
" + "hello in interface I"}, }; diff --git a/test/com/sun/javadoc/testSerializedFormDeprecationInfo/TestSerializedFormDeprecationInfo.java b/test/com/sun/javadoc/testSerializedFormDeprecationInfo/TestSerializedFormDeprecationInfo.java index d4f5294ba44a59578f8604f5ce22f3885abc54a3..4c5d39bba1e29353e3da903454b3cc514def0e53 100644 --- a/test/com/sun/javadoc/testSerializedFormDeprecationInfo/TestSerializedFormDeprecationInfo.java +++ b/test/com/sun/javadoc/testSerializedFormDeprecationInfo/TestSerializedFormDeprecationInfo.java @@ -41,39 +41,39 @@ public class TestSerializedFormDeprecationInfo extends JavadocTester { // 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", "
" + NL + "
" + NL + NL + - "
Throws:" + NL + "
" + - "java.io.IOException
See Also:" + - "
" + - "C1.setUndecorated(boolean)
" + NL + - "
" + NL + "
"}, + {BUG_ID + FS + "serialized-form.html", "
" + NL + "
" + NL + + "
Throws:
" + NL + "
" + + "java.io.IOException
See Also:" + + "
" + + "C1.setUndecorated(boolean)
" + NL + + "
" + NL + "
"}, {BUG_ID + FS + "serialized-form.html", "
" + NL + - "
Deprecated. As of JDK version" + - " 1.5, replaced by" + NL + + "
Deprecated. As of JDK version " + + "1.5, replaced by" + NL + " " + - "setUndecorated(boolean)." + + "setUndecorated(boolean).
" + "
This field indicates whether the C1 is undecorated." + NL + - "

" + NL + "

 
" + NL + - "
Since:
" + NL + + "

" + NL + "

" + NL + "
 
" + NL + + "
" + NL + "
Since:
" + NL + "
1.4
" + NL + "
See Also:" + - "
" + - "C1.setUndecorated(boolean)
" + NL + - "
"}, + "
" + + "C1.setUndecorated(boolean)
" + NL + + "" + NL + ""}, {BUG_ID + FS + "serialized-form.html", "
" + NL + "
Deprecated. As of JDK version" + " 1.5, replaced by" + NL + " " + "setUndecorated(boolean)." + NL + "

" + NL + - "

Reads the object stream." + NL + "

" + NL + - "

" + NL + NL + "
Throws:" + - "" + NL + "
" + - "IOException" + NL + - "
java.io.IOException
" + NL + - "
" + NL + "
"}, + "
Reads the object stream." + NL + "

" + NL + + "

" + NL + "
" + NL + "
Throws:" + + "
" + NL + "
" + + "IOException
" + NL + + "
java.io.IOException
" + NL + + "
" + NL + ""}, {BUG_ID + FS + "serialized-form.html", "
" + NL + - "
Deprecated. 
" + - "The name for this class." + NL + "

" + NL + - "

 
" + NL + "
" + NL + "
"}}; + "
Deprecated. 
" + + "The name for this class." + NL + "

" + NL + "

" + NL + + "
 
" + NL + ""}}; // Test with -nocomment option. The serialized-form.html should // not display the inline comments and tags but should display deprecation @@ -83,16 +83,16 @@ public class TestSerializedFormDeprecationInfo extends JavadocTester { "undecorated" + NL + "
" + NL + "
" + "Deprecated. As of JDK version 1.5, replaced by" + NL + " " + - "setUndecorated(boolean).
"}, + "setUndecorated(boolean)
."}, {BUG_ID + FS + "serialized-form.html", "
" + NL + "
" + "Deprecated. As of JDK version" + " 1.5, replaced by" + NL + " " + "setUndecorated(boolean)." + NL + "

" + NL + - "

"}, + ""}, {BUG_ID + FS + "serialized-form.html", "
" + NL + "int " +
                  "publicKey
" + NL + "
" + NL + "
" + - "Deprecated. 
"}}; + "Deprecated. "}}; // 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/testThrowsTag/TestThrowsTag.java b/test/com/sun/javadoc/testThrowsTag/TestThrowsTag.java index bfae9a0e918b858dae6be1e95b5afb4593dcaa00..c8e99da5198802dc9474e708c0ba033d9906265e 100644 --- a/test/com/sun/javadoc/testThrowsTag/TestThrowsTag.java +++ b/test/com/sun/javadoc/testThrowsTag/TestThrowsTag.java @@ -46,14 +46,14 @@ public class TestThrowsTag extends JavadocTester { //Input for string search tests. private static final String[][] TEST = { {BUG_ID + FS + "pkg" + FS + "C.html", - "
T1 - the first throws tag." + NL + - "
T2 - the second throws tag." + NL + - "
T3 - the third throws tag." + NL + - "
T4 - the fourth throws tag." + NL + - "
T5 - the first inherited throws tag." + NL + - "
T6 - the second inherited throws tag." + NL + - "
T7 - the third inherited throws tag." + NL + - "
T8 - the fourth inherited throws tag." + "
T1 - the first throws tag.
" + NL + + "
T2 - the second throws tag.
" + NL + + "
T3 - the third throws tag.
" + NL + + "
T4 - the fourth throws tag.
" + NL + + "
T5 - the first inherited throws tag.
" + NL + + "
T6 - the second inherited throws tag.
" + NL + + "
T7 - the third inherited throws tag.
" + NL + + "
T8 - the fourth inherited throws tag.
" }, }; private static final String[][] NEGATED_TEST = NO_TEST; diff --git a/test/tools/javac/processing/environment/round/Foo.java b/test/tools/javac/processing/environment/round/Foo.java new file mode 100644 index 0000000000000000000000000000000000000000..58ada1d4f95cf5a38a78e4d7702bd92204a72ce4 --- /dev/null +++ b/test/tools/javac/processing/environment/round/Foo.java @@ -0,0 +1,27 @@ +/* + * Copyright 2006 Sun Microsystems, Inc. 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. + * + * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +@AnnotatedElementInfo(annotationName="AnnotatedElementInfo", + expectedSize=1, + names="Foo") +public class Foo {} diff --git a/test/tools/javac/processing/environment/round/TestElementsAnnotatedWith.java b/test/tools/javac/processing/environment/round/TestElementsAnnotatedWith.java index 2a948350bab2e80b8c5866b482b443cab67522bc..867c3c40b970b7fa3df241932143ef9fd8f283f4 100644 --- a/test/tools/javac/processing/environment/round/TestElementsAnnotatedWith.java +++ b/test/tools/javac/processing/environment/round/TestElementsAnnotatedWith.java @@ -1,5 +1,5 @@ /* - * Copyright 2006-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2006-2009 Sun Microsystems, Inc. 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 @@ -23,7 +23,7 @@ /* * @test - * @bug 6397298 6400986 6425592 6449798 6453386 6508401 + * @bug 6397298 6400986 6425592 6449798 6453386 6508401 6498938 * @summary Tests that getElementsAnnotatedWith works properly. * @author Joseph D. Darcy * @compile TestElementsAnnotatedWith.java @@ -31,16 +31,22 @@ * @compile -processor TestElementsAnnotatedWith -proc:only SurfaceAnnotations.java * @compile -processor TestElementsAnnotatedWith -proc:only BuriedAnnotations.java * @compile -processor TestElementsAnnotatedWith -proc:only Part1.java Part2.java - * @compile -processor TestElementsAnnotatedWith -proc:only TestElementsAnnotatedWith.java * @compile -processor TestElementsAnnotatedWith -proc:only C2.java + * @compile -processor TestElementsAnnotatedWith -proc:only Foo.java + * @compile -XD-d=. Foo.java + * @compile -processor TestElementsAnnotatedWith -proc:only TestElementsAnnotatedWith.java */ import java.lang.annotation.Annotation; +import java.io.*; import java.util.Collections; import java.util.Set; import java.util.HashSet; +import java.util.List; +import java.util.ArrayList; import java.util.Arrays; import javax.annotation.processing.*; +import javax.tools.*; import javax.lang.model.SourceVersion; import javax.lang.model.element.*; import javax.lang.model.util.*; @@ -120,6 +126,9 @@ public class TestElementsAnnotatedWith extends AbstractProcessor { System.err.println("AnnotatedElementInfo: " + annotatedElementInfo); throw new RuntimeException(); } + + if("TestElementsAnnotatedWith".equals(firstType.getSimpleName().toString())) + writeClassFile(); // Start another round to test class file input } else { // If processing is over without an error, the specified // elements should be empty so an empty set should be returned. @@ -161,6 +170,37 @@ public class TestElementsAnnotatedWith extends AbstractProcessor { } catch(IllegalArgumentException iae) {} } + /* + * Hack alert! The class file read below is generated by the + * "@compile -XD-d=. Foo.java" directive above. This sneakily + * overrides the output location to the current directory where a + * subsequent @compile can read the file. This could be improved + * if either a new directive like @process accepted class file + * arguments (the javac command accepts such arguments but + * @compile does not) or the test.src and test.classes properties + * were set to be read with @compile jobs. + */ + private void writeClassFile() { + try { + Filer filer = processingEnv.getFiler(); + JavaFileObject jfo = filer.createClassFile("Foo"); + OutputStream os = jfo.openOutputStream(); + // Copy the bytes over + System.out.println((new File(".")).getAbsolutePath()); + InputStream io = new BufferedInputStream(new FileInputStream(new File(".", "Foo.class"))); + int datum = io.read(); + while(datum != -1) { + os.write(datum); + datum = io.read(); + } + os.close(); + } catch (IOException io) { + throw new RuntimeException(io); + } + + + } + @Override public SourceVersion getSupportedSourceVersion() { return SourceVersion.latest();