8333396: Use StringBuilder internally for java.text.Format.* formatting

Reviewed-by: naoto, liach, jlu
This commit is contained in:
lingjun.cg 2024-07-22 02:01:08 +00:00
parent fd741a88e8
commit 4da9915875
16 changed files with 764 additions and 73 deletions

View file

@ -315,6 +315,23 @@ public abstract class NumberFormat extends Format {
}
}
@Override
StringBuf format(Object number,
StringBuf toAppendTo,
FieldPosition pos) {
if (number instanceof Long || number instanceof Integer ||
number instanceof Short || number instanceof Byte ||
number instanceof AtomicInteger || number instanceof AtomicLong ||
(number instanceof BigInteger &&
((BigInteger) number).bitLength() < 64)) {
return format(((Number) number).longValue(), toAppendTo, pos);
} else if (number instanceof Number) {
return format(((Number) number).doubleValue(), toAppendTo, pos);
} else {
throw new IllegalArgumentException("Cannot format given Object as a Number");
}
}
/**
* {@inheritDoc Format}
*
@ -347,8 +364,13 @@ public abstract class NumberFormat extends Format {
if (result != null)
return result;
return format(number, new StringBuffer(),
DontCareFieldPosition.INSTANCE).toString();
if ("java.text".equals(getClass().getPackageName())) {
return format(number, StringBufFactory.of(),
DontCareFieldPosition.INSTANCE).toString();
} else {
return format(number, new StringBuffer(),
DontCareFieldPosition.INSTANCE).toString();
}
}
/*
@ -367,8 +389,13 @@ public abstract class NumberFormat extends Format {
* @see java.text.Format#format
*/
public final String format(long number) {
return format(number, new StringBuffer(),
DontCareFieldPosition.INSTANCE).toString();
if ("java.text".equals(getClass().getPackageName())) {
return format(number, StringBufFactory.of(),
DontCareFieldPosition.INSTANCE).toString();
} else {
return format(number, new StringBuffer(),
DontCareFieldPosition.INSTANCE).toString();
}
}
/**
@ -394,6 +421,12 @@ public abstract class NumberFormat extends Format {
StringBuffer toAppendTo,
FieldPosition pos);
StringBuf format(double number,
StringBuf toAppendTo,
FieldPosition pos) {
throw new UnsupportedOperationException("Subclasses should override this method");
}
/**
* Specialization of format.
*
@ -417,6 +450,12 @@ public abstract class NumberFormat extends Format {
StringBuffer toAppendTo,
FieldPosition pos);
StringBuf format(long number,
StringBuf toAppendTo,
FieldPosition pos) {
throw new UnsupportedOperationException("Subclasses should override this method");
}
/**
* Parses text from the beginning of the given string to produce a {@code Number}.
* <p>