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;
+ }
}