8000666: javadoc should write directly to Writer instead of composing strings
Reviewed-by: bpatel
--- 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));
}
}