# HG changeset patch # User jjg # Date 1484625824 0 # Node ID 3fc494634dbb6dd83735700ff40441f5adfa5b91 # Parent dec2417f1af850554659aeaa0f75196d7c5ae1f5 8000666: javadoc should write directly to Writer instead of composing strings Reviewed-by: bpatel diff -r dec2417f1af8 -r 3fc494634dbb src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeWriterImpl.java --- a/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeWriterImpl.java Tue Jan 17 03:24:03 2017 +0000 +++ b/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeWriterImpl.java Tue Jan 17 04:03:44 2017 +0000 @@ -25,6 +25,8 @@ package com.sun.tools.doclets.formats.html; +import java.io.IOException; + import com.sun.javadoc.*; import com.sun.tools.doclets.internal.toolkit.*; import com.sun.tools.doclets.internal.toolkit.util.*; @@ -187,7 +189,7 @@ /** * {@inheritDoc} */ - public void printDocument(Content contentTree) { + public void printDocument(Content contentTree) throws IOException { printHtmlDocument(configuration.metakeywords.getMetaKeywords(annotationType), true, contentTree); } diff -r dec2417f1af8 -r 3fc494634dbb src/share/classes/com/sun/tools/doclets/formats/html/ClassWriterImpl.java --- a/src/share/classes/com/sun/tools/doclets/formats/html/ClassWriterImpl.java Tue Jan 17 03:24:03 2017 +0000 +++ b/src/share/classes/com/sun/tools/doclets/formats/html/ClassWriterImpl.java Tue Jan 17 04:03:44 2017 +0000 @@ -25,6 +25,7 @@ package com.sun.tools.doclets.formats.html; +import java.io.IOException; import java.util.*; import com.sun.javadoc.*; @@ -196,7 +197,7 @@ /** * {@inheritDoc} */ - public void printDocument(Content contentTree) { + public void printDocument(Content contentTree) throws IOException { printHtmlDocument(configuration.metakeywords.getMetaKeywords(classDoc), true, contentTree); } diff -r dec2417f1af8 -r 3fc494634dbb src/share/classes/com/sun/tools/doclets/formats/html/ConstantsSummaryWriterImpl.java --- a/src/share/classes/com/sun/tools/doclets/formats/html/ConstantsSummaryWriterImpl.java Tue Jan 17 03:24:03 2017 +0000 +++ b/src/share/classes/com/sun/tools/doclets/formats/html/ConstantsSummaryWriterImpl.java Tue Jan 17 04:03:44 2017 +0000 @@ -297,7 +297,7 @@ /** * {@inheritDoc} */ - public void printDocument(Content contentTree) { + public void printDocument(Content contentTree) throws IOException { printHtmlDocument(null, true, contentTree); } } diff -r dec2417f1af8 -r 3fc494634dbb src/share/classes/com/sun/tools/doclets/formats/html/FrameOutputWriter.java --- a/src/share/classes/com/sun/tools/doclets/formats/html/FrameOutputWriter.java Tue Jan 17 03:24:03 2017 +0000 +++ b/src/share/classes/com/sun/tools/doclets/formats/html/FrameOutputWriter.java Tue Jan 17 04:03:44 2017 +0000 @@ -89,7 +89,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, diff -r dec2417f1af8 -r 3fc494634dbb src/share/classes/com/sun/tools/doclets/formats/html/HelpWriter.java --- a/src/share/classes/com/sun/tools/doclets/formats/html/HelpWriter.java Tue Jan 17 03:24:03 2017 +0000 +++ b/src/share/classes/com/sun/tools/doclets/formats/html/HelpWriter.java Tue Jan 17 04:03:44 2017 +0000 @@ -73,7 +73,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); diff -r dec2417f1af8 -r 3fc494634dbb src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java --- a/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java Tue Jan 17 03:24:03 2017 +0000 +++ b/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java Tue Jan 17 04:03:44 2017 +0000 @@ -416,7 +416,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); @@ -447,7 +447,7 @@ head, body); Content htmlDocument = new HtmlDocument(htmlDocType, htmlComment, htmlTree); - print(htmlDocument.toString()); + htmlDocument.write(this, true); } /** diff -r dec2417f1af8 -r 3fc494634dbb src/share/classes/com/sun/tools/doclets/formats/html/PackageWriterImpl.java --- a/src/share/classes/com/sun/tools/doclets/formats/html/PackageWriterImpl.java Tue Jan 17 03:24:03 2017 +0000 +++ b/src/share/classes/com/sun/tools/doclets/formats/html/PackageWriterImpl.java Tue Jan 17 04:03:44 2017 +0000 @@ -248,7 +248,7 @@ /** * {@inheritDoc} */ - public void printDocument(Content contentTree) { + public void printDocument(Content contentTree) throws IOException { printHtmlDocument(configuration.metakeywords.getMetaKeywords(packageDoc), true, contentTree); } diff -r dec2417f1af8 -r 3fc494634dbb src/share/classes/com/sun/tools/doclets/formats/html/SerializedFormWriterImpl.java --- a/src/share/classes/com/sun/tools/doclets/formats/html/SerializedFormWriterImpl.java Tue Jan 17 03:24:03 2017 +0000 +++ b/src/share/classes/com/sun/tools/doclets/formats/html/SerializedFormWriterImpl.java Tue Jan 17 04:03:44 2017 +0000 @@ -36,7 +36,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"; @@ -225,7 +225,7 @@ /** * {@inheritDoc} */ - public void printDocument(Content serializedTree) { + public void printDocument(Content serializedTree) throws IOException { printHtmlDocument(null, true, serializedTree); } diff -r dec2417f1af8 -r 3fc494634dbb src/share/classes/com/sun/tools/doclets/formats/html/markup/Comment.java --- a/src/share/classes/com/sun/tools/doclets/formats/html/markup/Comment.java Tue Jan 17 03:24:03 2017 +0000 +++ b/src/share/classes/com/sun/tools/doclets/formats/html/markup/Comment.java Tue Jan 17 04:03:44 2017 +0000 @@ -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.*; @@ -33,7 +36,7 @@ * * @author Bhavesh Patel */ -public class Comment extends Content{ +public class Comment extends Content { private String commentText; @@ -80,11 +83,13 @@ /** * {@inheritDoc} */ - public void write(StringBuilder contentBuilder) { - if (!endsWithNewLine(contentBuilder)) - contentBuilder.append(DocletConstants.NL); - contentBuilder.append("" + DocletConstants.NL); + @Override + public boolean write(Writer out, boolean atNewline) throws IOException { + if (!atNewline) + out.write(DocletConstants.NL); + out.write("" + DocletConstants.NL); + return true; } } diff -r dec2417f1af8 -r 3fc494634dbb src/share/classes/com/sun/tools/doclets/formats/html/markup/DocType.java --- a/src/share/classes/com/sun/tools/doclets/formats/html/markup/DocType.java Tue Jan 17 03:24:03 2017 +0000 +++ b/src/share/classes/com/sun/tools/doclets/formats/html/markup/DocType.java Tue Jan 17 04:03:44 2017 +0000 @@ -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.*; @@ -107,7 +110,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 } } diff -r dec2417f1af8 -r 3fc494634dbb src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlDocWriter.java --- a/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlDocWriter.java Tue Jan 17 03:24:03 2017 +0000 +++ b/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlDocWriter.java Tue Jan 17 04:03:44 2017 +0000 @@ -323,7 +323,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); @@ -343,7 +343,7 @@ head, frameset); Content htmlDocument = new HtmlDocument(htmlDocType, htmlComment, htmlTree); - print(htmlDocument.toString()); + htmlDocument.write(this, true); } /** diff -r dec2417f1af8 -r 3fc494634dbb src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlDocument.java --- a/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlDocument.java Tue Jan 17 03:24:03 2017 +0000 +++ b/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlDocument.java Tue Jan 17 04:03:44 2017 +0000 @@ -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.*; @@ -69,7 +72,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); } @@ -96,8 +99,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; } } diff -r dec2417f1af8 -r 3fc494634dbb src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlTree.java --- a/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlTree.java Tue Jan 17 03:24:03 2017 +0000 +++ b/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlTree.java Tue Jan 17 04:03:44 2017 +0000 @@ -25,8 +25,11 @@ package com.sun.tools.doclets.formats.html.markup; +import java.io.IOException; +import java.io.Writer; import java.util.*; import java.nio.charset.*; + import com.sun.tools.doclets.internal.toolkit.Content; import com.sun.tools.doclets.internal.toolkit.util.*; @@ -792,35 +795,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 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(""); + out.write(""); } - if (!isInline()) - contentBuilder.append(DocletConstants.NL); + if (!isInline()) { + out.write(DocletConstants.NL); + return true; + } else { + return false; + } } } diff -r dec2417f1af8 -r 3fc494634dbb src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java --- a/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java Tue Jan 17 03:24:03 2017 +0000 +++ b/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java Tue Jan 17 04:03:44 2017 +0000 @@ -264,7 +264,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) { diff -r dec2417f1af8 -r 3fc494634dbb src/share/classes/com/sun/tools/doclets/formats/html/markup/RawHtml.java --- a/src/share/classes/com/sun/tools/doclets/formats/html/markup/RawHtml.java Tue Jan 17 03:24:03 2017 +0000 +++ b/src/share/classes/com/sun/tools/doclets/formats/html/markup/RawHtml.java Tue Jan 17 04:03:44 2017 +0000 @@ -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.*; @@ -82,7 +85,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); } } diff -r dec2417f1af8 -r 3fc494634dbb src/share/classes/com/sun/tools/doclets/formats/html/markup/StringContent.java --- a/src/share/classes/com/sun/tools/doclets/formats/html/markup/StringContent.java Tue Jan 17 03:24:03 2017 +0000 +++ b/src/share/classes/com/sun/tools/doclets/formats/html/markup/StringContent.java Tue Jan 17 04:03:44 2017 +0000 @@ -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.*; @@ -93,7 +96,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); } } diff -r dec2417f1af8 -r 3fc494634dbb src/share/classes/com/sun/tools/doclets/internal/toolkit/AnnotationTypeWriter.java --- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/AnnotationTypeWriter.java Tue Jan 17 03:24:03 2017 +0000 +++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/AnnotationTypeWriter.java Tue Jan 17 04:03:44 2017 +0000 @@ -152,7 +152,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. diff -r dec2417f1af8 -r 3fc494634dbb src/share/classes/com/sun/tools/doclets/internal/toolkit/ClassWriter.java --- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/ClassWriter.java Tue Jan 17 03:24:03 2017 +0000 +++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/ClassWriter.java Tue Jan 17 04:03:44 2017 +0000 @@ -179,7 +179,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. diff -r dec2417f1af8 -r 3fc494634dbb src/share/classes/com/sun/tools/doclets/internal/toolkit/ConstantsSummaryWriter.java --- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/ConstantsSummaryWriter.java Tue Jan 17 03:24:03 2017 +0000 +++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/ConstantsSummaryWriter.java Tue Jan 17 04:03:44 2017 +0000 @@ -137,6 +137,6 @@ * * @param contentTree content tree which should be printed */ - public abstract void printDocument(Content contentTree); + public abstract void printDocument(Content contentTree) throws IOException; } diff -r dec2417f1af8 -r 3fc494634dbb src/share/classes/com/sun/tools/doclets/internal/toolkit/Content.java --- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/Content.java Tue Jan 17 03:24:03 2017 +0000 +++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/Content.java Tue Jan 17 04:03:44 2017 +0000 @@ -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.*; /** @@ -39,10 +43,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(); } /** @@ -60,10 +70,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. diff -r dec2417f1af8 -r 3fc494634dbb src/share/classes/com/sun/tools/doclets/internal/toolkit/PackageSummaryWriter.java --- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/PackageSummaryWriter.java Tue Jan 17 03:24:03 2017 +0000 +++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/PackageSummaryWriter.java Tue Jan 17 04:03:44 2017 +0000 @@ -113,7 +113,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. diff -r dec2417f1af8 -r 3fc494634dbb src/share/classes/com/sun/tools/doclets/internal/toolkit/SerializedFormWriter.java --- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/SerializedFormWriter.java Tue Jan 17 03:24:03 2017 +0000 +++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/SerializedFormWriter.java Tue Jan 17 04:03:44 2017 +0000 @@ -150,7 +150,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. diff -r dec2417f1af8 -r 3fc494634dbb src/share/classes/com/sun/tools/doclets/internal/toolkit/util/Util.java --- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/Util.java Tue Jan 17 03:24:03 2017 +0000 +++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/Util.java Tue Jan 17 04:03:44 2017 +0000 @@ -655,9 +655,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)); } }