changeset 7214:a1a8e71e130a

8014814: (str) StringBuffer "null" is not appended Reviewed-by: alanb
author dholmes
date Wed, 22 May 2013 20:21:13 -0400
parents 50fde3eeb48c
children e764bb01567e
files src/share/classes/java/lang/StringBuffer.java test/java/lang/StringBuffer/ToStringCache.java
diffstat 2 files changed, 25 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/classes/java/lang/StringBuffer.java	Wed May 22 16:43:04 2013 -0700
+++ b/src/share/classes/java/lang/StringBuffer.java	Wed May 22 20:21:13 2013 -0400
@@ -335,10 +335,8 @@
      * @since 1.5
      */
     @Override
-    public StringBuffer append(CharSequence s) {
-        // Note, synchronization achieved via invocations of other StringBuffer methods after
-        // narrowing of s to specific type
-        // Ditto for toStringCache clearing
+    public synchronized StringBuffer append(CharSequence s) {
+        toStringCache = null;
         super.append(s);
         return this;
     }
--- a/test/java/lang/StringBuffer/ToStringCache.java	Wed May 22 16:43:04 2013 -0700
+++ b/test/java/lang/StringBuffer/ToStringCache.java	Wed May 22 20:21:13 2013 -0400
@@ -22,7 +22,7 @@
  */
 
 /* @test
- * @bug 8013395
+ * @bug 8013395 8014814
  * @summary Test StringBuffer.toString caching
  */
 
@@ -199,6 +199,28 @@
         b = sb.toString();
         checkUnequal(a, b);
 
+        // Extra checks that append(null) works correctly
+
+        sb.append((String)null);
+        b = sb.toString();
+        checkUnequal(a, b);
+        a = b;
+
+        sb.append((StringBuffer)null);
+        b = sb.toString();
+        checkUnequal(a, b);
+        a = b;
+
+        sb.append((StringBuilder)null);
+        b = sb.toString();
+        checkUnequal(a, b);
+        a = b;
+
+        sb.append((CharSequence)null);
+        b = sb.toString();
+        checkUnequal(a, b);
+        a = b;
+
         // non-mutating methods
 
         // Reset to known value