changeset 2205:3fc494634dbb

8000666: javadoc should write directly to Writer instead of composing strings Reviewed-by: bpatel
author jjg
date Tue, 17 Jan 2017 04:03:44 +0000
parents dec2417f1af8
children e537073e5360
files src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeWriterImpl.java src/share/classes/com/sun/tools/doclets/formats/html/ClassWriterImpl.java src/share/classes/com/sun/tools/doclets/formats/html/ConstantsSummaryWriterImpl.java src/share/classes/com/sun/tools/doclets/formats/html/FrameOutputWriter.java src/share/classes/com/sun/tools/doclets/formats/html/HelpWriter.java src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java src/share/classes/com/sun/tools/doclets/formats/html/PackageWriterImpl.java src/share/classes/com/sun/tools/doclets/formats/html/SerializedFormWriterImpl.java src/share/classes/com/sun/tools/doclets/formats/html/markup/Comment.java src/share/classes/com/sun/tools/doclets/formats/html/markup/DocType.java src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlDocWriter.java src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlDocument.java src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlTree.java src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java src/share/classes/com/sun/tools/doclets/formats/html/markup/RawHtml.java src/share/classes/com/sun/tools/doclets/formats/html/markup/StringContent.java src/share/classes/com/sun/tools/doclets/internal/toolkit/AnnotationTypeWriter.java src/share/classes/com/sun/tools/doclets/internal/toolkit/ClassWriter.java src/share/classes/com/sun/tools/doclets/internal/toolkit/ConstantsSummaryWriter.java src/share/classes/com/sun/tools/doclets/internal/toolkit/Content.java src/share/classes/com/sun/tools/doclets/internal/toolkit/PackageSummaryWriter.java src/share/classes/com/sun/tools/doclets/internal/toolkit/SerializedFormWriter.java src/share/classes/com/sun/tools/doclets/internal/toolkit/util/Util.java
diffstat 23 files changed, 112 insertions(+), 58 deletions(-) [+]
line wrap: on
line diff
--- 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);
     }
--- 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);
     }
--- 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);
     }
 }
--- 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,
--- 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);
--- 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);
     }
 
     /**
--- 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);
     }
--- 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);
     }
 
--- 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("<!-- ");
-        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/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
     }
 }
--- 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);
     }
 
     /**
--- 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;
     }
 }
--- 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<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/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  &lt;/HEAD&gt; tag.
+     * Print the script code to be embedded before the  &lt;/HEAD&gt; tag.
      */
     protected void printWinTitleScript(String winTitle){
         if(winTitle != null && winTitle.length() > 0) {
--- 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);
     }
 }
--- 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);
     }
 }
--- 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.
--- 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.
--- 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;
 
 }
--- 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.
--- 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.
--- 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.
--- 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));
         }
     }