Thanks Sherman for looking to that!
On 11.07.2015 20:22, Xueming Shen wrote:
Hi,
Arguably the "StringIndexOutOfBoundsException" should only be used
when the index is out
of a "String" (the builder included) boundary, but the offending
object and the index here is
CharSequence/index. The places that throw
StringIndexoutOfBoundsException are all for the
index/offset/length of the ASB.
That was my first thought too, but I found places where
StringIndexoutOfBoundsException is thrown when violating array char[]
boundaries.
So, I thought we can use it with CharSequence too.
Here's an example:
public AbstractStringBuilder insert(int index, char[] str, int offset,
int len)
{
if ((index < 0) || (index > length()))
throw new StringIndexOutOfBoundsException(index);
if ((offset < 0) || (len < 0) || (offset > str.length - len))
throw new StringIndexOutOfBoundsException(
"offset " + offset + ", len " + len + ", str.length "
+ str.length);
The second check is about str array, though the exception is
StringIndexOutOfBoundsException.
Sincerely yours,
Ivan
-sherman
On 07/08/2015 10:02 AM, Ivan Gerasimov wrote:
Resending the request with a new bug id.
On 07.07.2015 15:55, Ivan Gerasimov wrote:
Hi!
With the fix for JDK-8077242 ((str) Optimize
AbstractStringBuilder.append(CharSequence, int, int) for String
argument) a change in behavior was introduced.
In the places, where sb.append(str.substring(from, to)) used to be
called, in the case of wrong indices StringIndexOutOfBoundsException
was thrown.
Now, after I replaced the code to sb.append(str, from, to), in such
cases IndexOutOfBoundsException is thrown.
The proposal is to make AbstractStringBuilder.append(CharSequence,
int, int) throw more specific StringIndexOutOfBoundsException, which
1) will eliminate the regression,
2) will be more consistent with most other methods of
AbstractStringBuilder, which throw StringIndexOutOfBoundsException.
BUGURL: https://bugs.openjdk.java.net/browse/JDK-8130646
WEBREV: http://cr.openjdk.java.net/~igerasim/8130646/00/webrev/
Sincerely yours,
Ivan