Hard to reconstruct the culture memory around this. I suspect such a new method was not considered necessary when StringBuilder was added to Java 1.5 given the CharSequence accepting method, and performance was not considered a concern, and I doubt it's a concern now.
(I don’t think there is any circularity that would result from bridge methods if such a method was added.) Paul. > On Jun 27, 2018, at 10:22 PM, Martin Buchholz <marti...@google.com> wrote: > > I'm fairly sure the append(StringBuilder) overloads were left out > intentionally. > > On Wed, Jun 27, 2018 at 8:57 PM, Isaac Levy <isaac.r.l...@gmail.com> wrote: > >> AbstractStringBuilder already has append(<StringBuffer>). This patch >> adds append(<StringBuilder>). >> >> The new method improves parity between the two classes. In addition, >> combining StringBuilders is presumably common. append(<CharSequence>) >> has a couple insteadof checks, which this new method skips. >> >> -Isaac >> >> >> >> >> diff --git a/src/java.base/share/classes/java/lang/ >> AbstractStringBuilder.java >> b/src/java.base/share/classes/java/lang/AbstractStringBuilder.java >> index 2ef3e53256..1fe89bb92a 100644 >> --- a/src/java.base/share/classes/java/lang/AbstractStringBuilder.java >> +++ b/src/java.base/share/classes/java/lang/AbstractStringBuilder.java >> @@ -543,6 +543,11 @@ abstract class AbstractStringBuilder implements >> Appendable, CharSequence { >> return this.append((AbstractStringBuilder)sb); >> } >> >> + // Documentation in subclasses because of synchro difference >> + public AbstractStringBuilder append(StringBuilder sb) { >> + return this.append((AbstractStringBuilder)sb); >> + } >> + >> /** >> * @since 1.8 >> */ >> diff --git a/src/java.base/share/classes/java/lang/StringBuffer.java >> b/src/java.base/share/classes/java/lang/StringBuffer.java >> index e597a8112e..613ba90c25 100644 >> --- a/src/java.base/share/classes/java/lang/StringBuffer.java >> +++ b/src/java.base/share/classes/java/lang/StringBuffer.java >> @@ -313,6 +313,33 @@ import jdk.internal.HotSpotIntrinsicCandidate; >> return this; >> } >> >> + /** >> + * Appends the specified {@code StringBuilder} to this sequence. >> + * <p> >> + * The characters of the {@code StringBuilder} argument are appended, >> + * in order, to the contents of this {@code StringBuffer}, increasing >> the >> + * length of this {@code StringBuffer} by the length of the argument. >> + * If {@code sb} is {@code null}, then the four characters >> + * {@code "null"} are appended to this {@code StringBuffer}. >> + * <p> >> + * Let <i>n</i> be the length of the old character sequence, the one >> + * contained in the {@code StringBuffer} just prior to execution of >> the >> + * {@code append} method. Then the character at index <i>k</i> in >> + * the new character sequence is equal to the character at index >> <i>k</i> >> + * in the old character sequence, if <i>k</i> is less than <i>n</i>; >> + * otherwise, it is equal to the character at index <i>k-n</i> in the >> + * argument {@code sb}. >> + * <p> >> + * >> + * @param sb the {@code StringBuilder} to append. >> + * @return a reference to this object. >> + */ >> + public synchronized StringBuffer append(StringBuilder sb) { >> + toStringCache = null; >> + super.append(sb); >> + return this; >> + } >> + >> /** >> * Appends the specified {@code StringBuffer} to this sequence. >> * <p> >> diff --git a/src/java.base/share/classes/java/lang/StringBuilder.java >> b/src/java.base/share/classes/java/lang/StringBuilder.java >> index 40da2083c2..5ddd4fb5f9 100644 >> --- a/src/java.base/share/classes/java/lang/StringBuilder.java >> +++ b/src/java.base/share/classes/java/lang/StringBuilder.java >> @@ -199,6 +199,30 @@ public final class StringBuilder >> return this; >> } >> >> + /** >> + * Appends the specified {@code StringBuilder} to this sequence. >> + * <p> >> + * The characters of the {@code StringBuilder} argument are appended, >> + * in order, to this sequence, increasing the >> + * length of this sequence by the length of the argument. >> + * If {@code sb} is {@code null}, then the four characters >> + * {@code "null"} are appended to this sequence. >> + * <p> >> + * Let <i>n</i> be the length of this character sequence just prior to >> + * execution of the {@code append} method. Then the character at index >> + * <i>k</i> in the new character sequence is equal to the character at >> + * index <i>k</i> in the old character sequence, if <i>k</i> is less >> than >> + * <i>n</i>; otherwise, it is equal to the character at index >> <i>k-n</i> >> + * in the argument {@code sb}. >> + * >> + * @param sb the {@code StringBuilder} to append. >> + * @return a reference to this object. >> + */ >> + public StringBuilder append(StringBuilder sb) { >> + super.append(sb); >> + return this; >> + } >> + >> @Override >> public StringBuilder append(CharSequence s) { >> super.append(s); >>