< prev index next >
src/java.base/share/classes/java/lang/AbstractStringBuilder.java
Print this page
rev 12318 : [mq]: 8130646-AbstractStringBuilder-to-throw-StringIndexOutOfBoundsException
@@ -507,14 +507,19 @@
*/
@Override
public AbstractStringBuilder append(CharSequence s, int start, int end) {
if (s == null)
s = "null";
- if ((start < 0) || (start > end) || (end > s.length()))
- throw new IndexOutOfBoundsException(
- "start " + start + ", end " + end + ", s.length() "
- + s.length());
+ if ((start < 0) || (start > end) || (end > s.length())) {
+ String msg = "start " + start + ", end " + end +
+ ", s.length() " + s.length()
+ if (s instanceof String) {
+ throw new StringIndexOutOfBoundsException(msg);
+ } else {
+ throw new IndexOutOfBoundsException(msg);
+ }
+ }
int len = end - start;
ensureCapacityInternal(count + len);
if (s instanceof String) {
((String)s).getChars(start, end, value, count);
} else {
@@ -1131,21 +1136,30 @@
public AbstractStringBuilder insert(int dstOffset, CharSequence s,
int start, int end) {
if (s == null)
s = "null";
if ((dstOffset < 0) || (dstOffset > this.length()))
- throw new IndexOutOfBoundsException("dstOffset "+dstOffset);
- if ((start < 0) || (end < 0) || (start > end) || (end > s.length()))
- throw new IndexOutOfBoundsException(
- "start " + start + ", end " + end + ", s.length() "
- + s.length());
+ throw new StringIndexOutOfBoundsException("dstOffset "+dstOffset);
+ if ((start < 0) || (end < 0) || (start > end) || (end > s.length())) {
+ String msg = "start " + start + ", end " + end +
+ ", s.length() " + s.length();
+ if (s instanceof String) {
+ throw new StringIndexOutOfBoundsException(msg);
+ } else {
+ throw new IndexOutOfBoundsException(msg);
+ }
+ }
int len = end - start;
ensureCapacityInternal(count + len);
System.arraycopy(value, dstOffset, value, dstOffset + len,
count - dstOffset);
+ if (s instanceof String) {
+ ((String)s).getChars(start, end, value, dstOffset);
+ } else {
for (int i=start; i<end; i++)
value[dstOffset++] = s.charAt(i);
+ }
count += len;
return this;
}
/**
< prev index next >