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);
>> 

Reply via email to