OpenJDK / jdk / jdk12
changeset 14265:4e8e488eeae0
8000666: javadoc should write directly to Writer instead of composing strings
Reviewed-by: bpatel
line wrap: on
line diff
--- a/langtools/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeWriterImpl.java Fri Oct 12 14:53:50 2012 -0700 +++ b/langtools/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeWriterImpl.java Mon Oct 15 17:07:55 2012 -0700 @@ -25,6 +25,8 @@ package com.sun.tools.doclets.formats.html; +import java.io.IOException; + import com.sun.javadoc.*; import com.sun.tools.doclets.formats.html.markup.*; import com.sun.tools.doclets.internal.toolkit.*; @@ -193,7 +195,7 @@ /** * {@inheritDoc} */ - public void printDocument(Content contentTree) { + public void printDocument(Content contentTree) throws IOException { printHtmlDocument(configuration.metakeywords.getMetaKeywords(annotationType), true, contentTree); }
--- a/langtools/src/share/classes/com/sun/tools/doclets/formats/html/ClassWriterImpl.java Fri Oct 12 14:53:50 2012 -0700 +++ b/langtools/src/share/classes/com/sun/tools/doclets/formats/html/ClassWriterImpl.java Mon Oct 15 17:07:55 2012 -0700 @@ -25,6 +25,7 @@ package com.sun.tools.doclets.formats.html; +import java.io.IOException; import java.util.*; import com.sun.javadoc.*; @@ -202,7 +203,7 @@ /** * {@inheritDoc} */ - public void printDocument(Content contentTree) { + public void printDocument(Content contentTree) throws IOException { printHtmlDocument(configuration.metakeywords.getMetaKeywords(classDoc), true, contentTree); }
--- a/langtools/src/share/classes/com/sun/tools/doclets/formats/html/ConstantsSummaryWriterImpl.java Fri Oct 12 14:53:50 2012 -0700 +++ b/langtools/src/share/classes/com/sun/tools/doclets/formats/html/ConstantsSummaryWriterImpl.java Mon Oct 15 17:07:55 2012 -0700 @@ -303,7 +303,7 @@ /** * {@inheritDoc} */ - public void printDocument(Content contentTree) { + public void printDocument(Content contentTree) throws IOException { printHtmlDocument(null, true, contentTree); } }
--- a/langtools/src/share/classes/com/sun/tools/doclets/formats/html/FrameOutputWriter.java Fri Oct 12 14:53:50 2012 -0700 +++ b/langtools/src/share/classes/com/sun/tools/doclets/formats/html/FrameOutputWriter.java Mon Oct 15 17:07:55 2012 -0700 @@ -95,7 +95,7 @@ * Generate the contants in the "index.html" file. Print the frame details * as well as warning if browser is not supporting the Html frames. */ - protected void generateFrameFile() { + protected void generateFrameFile() throws IOException { Content frameset = getFrameDetails(); if (configuration.windowtitle.length() > 0) { printFramesetDocument(configuration.windowtitle, configuration.notimestamp,
--- a/langtools/src/share/classes/com/sun/tools/doclets/formats/html/HelpWriter.java Fri Oct 12 14:53:50 2012 -0700 +++ b/langtools/src/share/classes/com/sun/tools/doclets/formats/html/HelpWriter.java Mon Oct 15 17:07:55 2012 -0700 @@ -79,7 +79,7 @@ /** * Generate the help file contents. */ - protected void generateHelpFile() { + protected void generateHelpFile() throws IOException { String title = configuration.getText("doclet.Window_Help_title"); Content body = getBody(true, getWindowTitle(title)); addTop(body);
--- a/langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java Fri Oct 12 14:53:50 2012 -0700 +++ b/langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java Mon Oct 15 17:07:55 2012 -0700 @@ -361,7 +361,7 @@ * @param body the body htmltree to be included in the document */ public void printHtmlDocument(String[] metakeywords, boolean includeScript, - Content body) { + Content body) throws IOException { Content htmlDocType = DocType.Transitional(); Content htmlComment = new Comment(configuration.getText("doclet.New_Page")); Content head = new HtmlTree(HtmlTag.HEAD); @@ -391,7 +391,7 @@ head, body); Content htmlDocument = new HtmlDocument(htmlDocType, htmlComment, htmlTree); - print(htmlDocument.toString()); + htmlDocument.write(this, true); } /**
--- a/langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageWriterImpl.java Fri Oct 12 14:53:50 2012 -0700 +++ b/langtools/src/share/classes/com/sun/tools/doclets/formats/html/PackageWriterImpl.java Mon Oct 15 17:07:55 2012 -0700 @@ -254,7 +254,7 @@ /** * {@inheritDoc} */ - public void printDocument(Content contentTree) { + public void printDocument(Content contentTree) throws IOException { printHtmlDocument(configuration.metakeywords.getMetaKeywords(packageDoc), true, contentTree); }
--- a/langtools/src/share/classes/com/sun/tools/doclets/formats/html/SerializedFormWriterImpl.java Fri Oct 12 14:53:50 2012 -0700 +++ b/langtools/src/share/classes/com/sun/tools/doclets/formats/html/SerializedFormWriterImpl.java Mon Oct 15 17:07:55 2012 -0700 @@ -42,7 +42,7 @@ * @author Atul M Dambalkar */ public class SerializedFormWriterImpl extends SubWriterHolderWriter - implements com.sun.tools.doclets.internal.toolkit.SerializedFormWriter { + implements SerializedFormWriter { private static final String FILE_NAME = "serialized-form.html"; @@ -214,7 +214,7 @@ /** * {@inheritDoc} */ - public void printDocument(Content serializedTree) { + public void printDocument(Content serializedTree) throws IOException { printHtmlDocument(null, true, serializedTree); }
--- a/langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/Comment.java Fri Oct 12 14:53:50 2012 -0700 +++ b/langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/Comment.java Mon Oct 15 17:07:55 2012 -0700 @@ -25,6 +25,9 @@ package com.sun.tools.doclets.formats.html.markup; +import java.io.IOException; +import java.io.Writer; + import com.sun.tools.doclets.internal.toolkit.Content; import com.sun.tools.doclets.internal.toolkit.util.*; @@ -38,7 +41,7 @@ * * @author Bhavesh Patel */ -public class Comment extends Content{ +public class Comment extends Content { private String commentText; @@ -85,11 +88,13 @@ /** * {@inheritDoc} */ - public void write(StringBuilder contentBuilder) { - if (!endsWithNewLine(contentBuilder)) - contentBuilder.append(DocletConstants.NL); - contentBuilder.append("<!-- "); - contentBuilder.append(commentText); - contentBuilder.append(" -->" + DocletConstants.NL); + @Override + public boolean write(Writer out, boolean atNewline) throws IOException { + if (!atNewline) + out.write(DocletConstants.NL); + out.write("<!-- "); + out.write(commentText); + out.write(" -->" + DocletConstants.NL); + return true; } }
--- a/langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/DocType.java Fri Oct 12 14:53:50 2012 -0700 +++ b/langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/DocType.java Mon Oct 15 17:07:55 2012 -0700 @@ -25,6 +25,9 @@ package com.sun.tools.doclets.formats.html.markup; +import java.io.IOException; +import java.io.Writer; + import com.sun.tools.doclets.internal.toolkit.Content; import com.sun.tools.doclets.internal.toolkit.util.*; @@ -112,7 +115,9 @@ /** * {@inheritDoc} */ - public void write(StringBuilder contentBuilder) { - contentBuilder.append(docType); + @Override + public boolean write(Writer out, boolean atNewline) throws IOException { + out.write(docType); + return true; // guaranteed by constructor } }
--- a/langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlDocWriter.java Fri Oct 12 14:53:50 2012 -0700 +++ b/langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlDocWriter.java Mon Oct 15 17:07:55 2012 -0700 @@ -325,7 +325,7 @@ * @param frameset the frameset to be added to the HTML document */ public void printFramesetDocument(String title, boolean noTimeStamp, - Content frameset) { + Content frameset) throws IOException { Content htmlDocType = DocType.Frameset(); Content htmlComment = new Comment(configuration.getText("doclet.New_Page")); Content head = new HtmlTree(HtmlTag.HEAD); @@ -345,7 +345,7 @@ head, frameset); Content htmlDocument = new HtmlDocument(htmlDocType, htmlComment, htmlTree); - print(htmlDocument.toString()); + htmlDocument.write(this, true); } /**
--- a/langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlDocument.java Fri Oct 12 14:53:50 2012 -0700 +++ b/langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlDocument.java Mon Oct 15 17:07:55 2012 -0700 @@ -25,7 +25,10 @@ package com.sun.tools.doclets.formats.html.markup; +import java.io.IOException; +import java.io.Writer; import java.util.*; + import com.sun.tools.doclets.internal.toolkit.Content; import com.sun.tools.doclets.internal.toolkit.util.*; @@ -74,7 +77,7 @@ * * @param htmlContent html content to be added */ - public void addContent(Content htmlContent) { + public final void addContent(Content htmlContent) { if (htmlContent.isValid()) docContent.add(htmlContent); } @@ -101,8 +104,9 @@ /** * {@inheritDoc} */ - public void write(StringBuilder contentBuilder) { + public boolean write(Writer out, boolean atNewline) throws IOException { for (Content c : docContent) - c.write(contentBuilder); + atNewline = c.write(out, atNewline); + return atNewline; } }
--- a/langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlTree.java Fri Oct 12 14:53:50 2012 -0700 +++ b/langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlTree.java Mon Oct 15 17:07:55 2012 -0700 @@ -25,7 +25,10 @@ package com.sun.tools.doclets.formats.html.markup; +import java.io.IOException; +import java.io.Writer; import java.util.*; + import com.sun.tools.doclets.internal.toolkit.Content; import com.sun.tools.doclets.internal.toolkit.util.*; @@ -756,35 +759,41 @@ /** * {@inheritDoc} */ - public void write(StringBuilder contentBuilder) { - if (!isInline() && !endsWithNewLine(contentBuilder)) - contentBuilder.append(DocletConstants.NL); + @Override + public boolean write(Writer out, boolean atNewline) throws IOException { + if (!isInline() && !atNewline) + out.write(DocletConstants.NL); String tagString = htmlTag.toString(); - contentBuilder.append("<"); - contentBuilder.append(tagString); + out.write("<"); + out.write(tagString); Iterator<HtmlAttr> iterator = attrs.keySet().iterator(); HtmlAttr key; String value = ""; while (iterator.hasNext()) { key = iterator.next(); value = attrs.get(key); - contentBuilder.append(" "); - contentBuilder.append(key.toString()); + out.write(" "); + out.write(key.toString()); if (!value.isEmpty()) { - contentBuilder.append("=\""); - contentBuilder.append(value); - contentBuilder.append("\""); + out.write("=\""); + out.write(value); + out.write("\""); } } - contentBuilder.append(">"); + out.write(">"); + boolean nl = false; for (Content c : content) - c.write(contentBuilder); + nl = c.write(out, nl); if (htmlTag.endTagRequired()) { - contentBuilder.append("</"); - contentBuilder.append(tagString); - contentBuilder.append(">"); + out.write("</"); + out.write(tagString); + out.write(">"); } - if (!isInline()) - contentBuilder.append(DocletConstants.NL); + if (!isInline()) { + out.write(DocletConstants.NL); + return true; + } else { + return false; + } } }
--- a/langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java Fri Oct 12 14:53:50 2012 -0700 +++ b/langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java Mon Oct 15 17:07:55 2012 -0700 @@ -266,7 +266,7 @@ } /** - * Print the script code to be embeded before the </HEAD> tag. + * Print the script code to be embedded before the </HEAD> tag. */ protected void printWinTitleScript(String winTitle){ if(winTitle != null && winTitle.length() > 0) {
--- a/langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/RawHtml.java Fri Oct 12 14:53:50 2012 -0700 +++ b/langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/RawHtml.java Mon Oct 15 17:07:55 2012 -0700 @@ -25,6 +25,9 @@ package com.sun.tools.doclets.formats.html.markup; +import java.io.IOException; +import java.io.Writer; + import com.sun.tools.doclets.internal.toolkit.Content; import com.sun.tools.doclets.internal.toolkit.util.*; @@ -87,7 +90,16 @@ /** * {@inheritDoc} */ - public void write(StringBuilder contentBuilder) { - contentBuilder.append(rawHtmlContent); + public String toString() { + return rawHtmlContent; + } + + /** + * {@inheritDoc} + */ + @Override + public boolean write(Writer out, boolean atNewline) throws IOException { + out.write(rawHtmlContent); + return rawHtmlContent.endsWith(DocletConstants.NL); } }
--- a/langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/StringContent.java Fri Oct 12 14:53:50 2012 -0700 +++ b/langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/StringContent.java Mon Oct 15 17:07:55 2012 -0700 @@ -25,6 +25,9 @@ package com.sun.tools.doclets.formats.html.markup; +import java.io.IOException; +import java.io.Writer; + import com.sun.tools.doclets.internal.toolkit.Content; import com.sun.tools.doclets.internal.toolkit.util.*; @@ -98,7 +101,10 @@ /** * {@inheritDoc} */ - public void write(StringBuilder contentBuilder) { - contentBuilder.append(stringContent); + @Override + public boolean write(Writer out, boolean atNewline) throws IOException { + String s = stringContent.toString(); + out.write(s); + return s.endsWith(DocletConstants.NL); } }
--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/AnnotationTypeWriter.java Fri Oct 12 14:53:50 2012 -0700 +++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/AnnotationTypeWriter.java Mon Oct 15 17:07:55 2012 -0700 @@ -153,7 +153,7 @@ * * @param contentTree content tree that will be printed as a document */ - public void printDocument(Content contentTree); + public void printDocument(Content contentTree) throws IOException ; /** * Close the writer.
--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/ClassWriter.java Fri Oct 12 14:53:50 2012 -0700 +++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/ClassWriter.java Mon Oct 15 17:07:55 2012 -0700 @@ -180,7 +180,7 @@ * * @param contentTree content tree that will be printed as a document */ - public void printDocument(Content contentTree); + public void printDocument(Content contentTree) throws IOException; /** * Close the writer.
--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/ConstantsSummaryWriter.java Fri Oct 12 14:53:50 2012 -0700 +++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/ConstantsSummaryWriter.java Mon Oct 15 17:07:55 2012 -0700 @@ -139,6 +139,6 @@ * * @param contentTree content tree which should be printed */ - public abstract void printDocument(Content contentTree); + public abstract void printDocument(Content contentTree) throws IOException; }
--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/Content.java Fri Oct 12 14:53:50 2012 -0700 +++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/Content.java Mon Oct 15 17:07:55 2012 -0700 @@ -25,6 +25,10 @@ package com.sun.tools.doclets.internal.toolkit; +import java.io.IOException; +import java.io.StringWriter; +import java.io.Writer; + import com.sun.tools.doclets.internal.toolkit.util.*; /** @@ -44,10 +48,16 @@ * * @return string representation of the content */ + @Override public String toString() { - StringBuilder contentBuilder = new StringBuilder(); - write(contentBuilder); - return contentBuilder.toString(); + StringWriter out = new StringWriter(); + try { + write(out, true); + } catch (IOException e) { + // cannot happen from StringWriter + throw new DocletAbortException(); + } + return out.toString(); } /** @@ -65,10 +75,10 @@ public abstract void addContent(String stringContent); /** - * Writes content to a StringBuilder. + * Writes content to a writer. * */ - public abstract void write(StringBuilder contentBuilder); + public abstract boolean write(Writer writer, boolean atNewline) throws IOException ; /** * Returns true if the content is empty.
--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/PackageSummaryWriter.java Fri Oct 12 14:53:50 2012 -0700 +++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/PackageSummaryWriter.java Mon Oct 15 17:07:55 2012 -0700 @@ -115,7 +115,7 @@ * * @param contentTree the content tree that will be printed */ - public abstract void printDocument(Content contentTree); + public abstract void printDocument(Content contentTree) throws IOException; /** * Close the writer.
--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/SerializedFormWriter.java Fri Oct 12 14:53:50 2012 -0700 +++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/SerializedFormWriter.java Mon Oct 15 17:07:55 2012 -0700 @@ -151,7 +151,7 @@ * * @param serializedTree the content tree that will be printed */ - public abstract void printDocument(Content serializedTree); + public abstract void printDocument(Content serializedTree) throws IOException; /** * Write the serialized form for a given field.
--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/Util.java Fri Oct 12 14:53:50 2012 -0700 +++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/Util.java Mon Oct 15 17:07:55 2012 -0700 @@ -650,9 +650,9 @@ fos = new FileOutputStream(filename); } if (docencoding == null) { - return new OutputStreamWriter(fos); + return new BufferedWriter(new OutputStreamWriter(fos)); } else { - return new OutputStreamWriter(fos, docencoding); + return new BufferedWriter(new OutputStreamWriter(fos, docencoding)); } }