Fixing PrintWriter.checkError() and PrintStream.checkError() to delegate to the underlying PrintWriter/PrintStream as necessary.
Fixing PrintWriter.println(String) to call through the overridable no-args println() method.

Both of these behaviour changes bring us closer to compatibility with the RI.

git-svn-id: https://svn.apache.org/repos/asf/harmony/enhanced/classlib/trunk@835181 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/modules/luni/src/main/java/java/io/OutputStream.java b/modules/luni/src/main/java/java/io/OutputStream.java
index 653d284..fc29167 100644
--- a/modules/luni/src/main/java/java/io/OutputStream.java
+++ b/modules/luni/src/main/java/java/io/OutputStream.java
@@ -118,4 +118,12 @@
      *             if an error occurs while writing to this stream.
      */
     public abstract void write(int oneByte) throws IOException;
+
+    /**
+     * Returns true if this writer has encountered and suppressed an error. Used
+     * by PrintStreams as an alternative to checked exceptions.
+     */
+    boolean checkError() {
+        return false;
+    }
 }
diff --git a/modules/luni/src/main/java/java/io/OutputStreamWriter.java b/modules/luni/src/main/java/java/io/OutputStreamWriter.java
index e9fd342..abd55ef 100644
--- a/modules/luni/src/main/java/java/io/OutputStreamWriter.java
+++ b/modules/luni/src/main/java/java/io/OutputStreamWriter.java
@@ -302,4 +302,8 @@
             convert(chars);
         }
     }
+
+    @Override boolean checkError() {
+        return out.checkError();
+    }
 }
diff --git a/modules/luni/src/main/java/java/io/PrintStream.java b/modules/luni/src/main/java/java/io/PrintStream.java
index 36cd1d5..a8756d3 100644
--- a/modules/luni/src/main/java/java/io/PrintStream.java
+++ b/modules/luni/src/main/java/java/io/PrintStream.java
@@ -232,10 +232,13 @@
      * @see #setError()
      */
     public boolean checkError() {
-        if (out != null) {
-            flush();
+        OutputStream delegate = out;
+        if (delegate == null) {
+            return ioError;
         }
-        return ioError;
+
+        flush();
+        return ioError || delegate.checkError();
     }
 
     /**
diff --git a/modules/luni/src/main/java/java/io/PrintWriter.java b/modules/luni/src/main/java/java/io/PrintWriter.java
index 3555b1c..2d2c0b1 100644
--- a/modules/luni/src/main/java/java/io/PrintWriter.java
+++ b/modules/luni/src/main/java/java/io/PrintWriter.java
@@ -223,10 +223,13 @@
      * @see #setError()
      */
     public boolean checkError() {
-        if (out != null) {
-            flush();
+        Writer delegate = out;
+        if (delegate == null) {
+            return ioError;
         }
-        return ioError;
+
+        flush();
+        return ioError || delegate.checkError();
     }
 
     /**
@@ -373,16 +376,6 @@
     }
 
     /**
-     * Print a new line String onto the writer, flushing if autoflush enabled.
-     */
-    private void newline() {
-        print(lineSeparator);
-        if (autoflush) {
-            flush();
-        }
-    }
-
-    /**
      * Prints the string representation of the specified character array
      * to the target.
      * 
@@ -494,7 +487,10 @@
      */
     public void println() {
         synchronized (lock) {
-            newline();
+            print(lineSeparator);
+            if (autoflush) {
+                flush();
+            }
         }
     }
 
@@ -605,7 +601,7 @@
     public void println(String str) {
         synchronized (lock) {
             print(str);
-            newline();
+            println();
         }
     }
 
diff --git a/modules/luni/src/main/java/java/io/Writer.java b/modules/luni/src/main/java/java/io/Writer.java
index b51aa5a..b9454be 100644
--- a/modules/luni/src/main/java/java/io/Writer.java
+++ b/modules/luni/src/main/java/java/io/Writer.java
@@ -242,4 +242,12 @@
         }
         return this;
     }
+
+    /**
+     * Returns true if this writer has encountered and suppressed an error. Used
+     * by PrintWriters as an alternative to checked exceptions.
+     */
+    boolean checkError() {
+        return false;
+    }
 }