--- a/src/java.base/share/classes/java/text/DecimalFormat.java Thu Oct 17 20:27:44 2019 +0100
+++ b/src/java.base/share/classes/java/text/DecimalFormat.java Thu Oct 17 20:53:35 2019 +0100
@@ -425,8 +425,8 @@
* locale.
*
* @param pattern a non-localized pattern string.
- * @exception NullPointerException if {@code pattern} is null
- * @exception IllegalArgumentException if the given pattern is invalid.
+ * @throws NullPointerException if {@code pattern} is null
+ * @throws IllegalArgumentException if the given pattern is invalid.
* @see java.text.NumberFormat#getInstance
* @see java.text.NumberFormat#getNumberInstance
* @see java.text.NumberFormat#getCurrencyInstance
@@ -452,8 +452,8 @@
*
* @param pattern a non-localized pattern string
* @param symbols the set of symbols to be used
- * @exception NullPointerException if any of the given arguments is null
- * @exception IllegalArgumentException if the given pattern is invalid
+ * @throws NullPointerException if any of the given arguments is null
+ * @throws IllegalArgumentException if the given pattern is invalid
* @see java.text.NumberFormat#getInstance
* @see java.text.NumberFormat#getNumberInstance
* @see java.text.NumberFormat#getCurrencyInstance
@@ -486,11 +486,11 @@
* to 0 and 9, respectively for the output string
* {@code 1,234,567.89}.
* @return the value passed in as {@code toAppendTo}
- * @exception IllegalArgumentException if {@code number} is
+ * @throws IllegalArgumentException if {@code number} is
* null or not an instance of {@code Number}.
- * @exception NullPointerException if {@code toAppendTo} or
+ * @throws NullPointerException if {@code toAppendTo} or
* {@code pos} is null
- * @exception ArithmeticException if rounding is needed with rounding
+ * @throws ArithmeticException if rounding is needed with rounding
* mode being set to RoundingMode.UNNECESSARY
* @see java.text.FieldPosition
*/
@@ -528,9 +528,9 @@
* and end index of {@code fieldPosition} will be set
* to 0 and 9, respectively for the output string
* {@code 1,234,567.89}.
- * @exception NullPointerException if {@code result} or
+ * @throws NullPointerException if {@code result} or
* {@code fieldPosition} is {@code null}
- * @exception ArithmeticException if rounding is needed with rounding
+ * @throws ArithmeticException if rounding is needed with rounding
* mode being set to RoundingMode.UNNECESSARY
* @return The formatted number string
* @see java.text.FieldPosition
@@ -565,7 +565,7 @@
* @param number The double to format
* @param result where the text is to be appended
* @param delegate notified of locations of sub fields
- * @exception ArithmeticException if rounding is needed with rounding
+ * @throws ArithmeticException if rounding is needed with rounding
* mode being set to RoundingMode.UNNECESSARY
* @return The formatted number string
*/
@@ -698,9 +698,9 @@
* and end index of {@code fieldPosition} will be set
* to 0 and 11, respectively for the output string
* {@code 123,456,789}.
- * @exception NullPointerException if {@code result} or
+ * @throws NullPointerException if {@code result} or
* {@code fieldPosition} is {@code null}
- * @exception ArithmeticException if rounding is needed with rounding
+ * @throws ArithmeticException if rounding is needed with rounding
* mode being set to RoundingMode.UNNECESSARY
* @return The formatted number string
* @see java.text.FieldPosition
@@ -720,7 +720,7 @@
* @param result where the text is to be appended
* @param delegate notified of locations of sub fields
* @return The formatted number string
- * @exception ArithmeticException if rounding is needed with rounding
+ * @throws ArithmeticException if rounding is needed with rounding
* mode being set to RoundingMode.UNNECESSARY
* @see java.text.FieldPosition
*/
@@ -795,7 +795,7 @@
* to 0 and 9, respectively for the output string
* {@code 1,234,567.89}.
* @return The formatted number string
- * @exception ArithmeticException if rounding is needed with rounding
+ * @throws ArithmeticException if rounding is needed with rounding
* mode being set to RoundingMode.UNNECESSARY
* @see java.text.FieldPosition
*/
@@ -811,7 +811,7 @@
* @param number The BigDecimal to format
* @param result where the text is to be appended
* @param delegate notified of locations of sub fields
- * @exception ArithmeticException if rounding is needed with rounding
+ * @throws ArithmeticException if rounding is needed with rounding
* mode being set to RoundingMode.UNNECESSARY
* @return The formatted number string
*/
@@ -854,7 +854,7 @@
* to 0 and 11, respectively for the output string
* {@code 123,456,789}.
* @return The formatted number string
- * @exception ArithmeticException if rounding is needed with rounding
+ * @throws ArithmeticException if rounding is needed with rounding
* mode being set to RoundingMode.UNNECESSARY
* @see java.text.FieldPosition
*/
@@ -872,7 +872,7 @@
* @param result where the text is to be appended
* @param delegate notified of locations of sub fields
* @return The formatted number string
- * @exception ArithmeticException if rounding is needed with rounding
+ * @throws ArithmeticException if rounding is needed with rounding
* mode being set to RoundingMode.UNNECESSARY
* @see java.text.FieldPosition
*/
@@ -923,10 +923,10 @@
* {@code NumberFormat.Field}, with the attribute value being the
* same as the attribute key.
*
- * @exception NullPointerException if obj is null.
- * @exception IllegalArgumentException when the Format cannot format the
+ * @throws NullPointerException if obj is null.
+ * @throws IllegalArgumentException when the Format cannot format the
* given object.
- * @exception ArithmeticException if rounding is needed with rounding
+ * @throws ArithmeticException if rounding is needed with rounding
* mode being set to RoundingMode.UNNECESSARY
* @param obj The object to format
* @return AttributedCharacterIterator describing the formatted value.
@@ -2130,7 +2130,7 @@
* @param pos A {@code ParsePosition} object with index and error
* index information as described above.
* @return the parsed value, or {@code null} if the parse fails
- * @exception NullPointerException if {@code text} or
+ * @throws NullPointerException if {@code text} or
* {@code pos} is null.
*/
@Override
@@ -2756,7 +2756,10 @@
/**
* Return the grouping size. Grouping size is the number of digits between
* grouping separators in the integer portion of a number. For example,
- * in the number "123,456.78", the grouping size is 3.
+ * in the number "123,456.78", the grouping size is 3. Grouping size of
+ * zero designates that grouping is not used, which provides the same
+ * formatting as if calling {@link #setGroupingUsed(boolean)
+ * setGroupingUsed(false)}.
*
* @return the grouping size
* @see #setGroupingSize
@@ -2770,16 +2773,28 @@
/**
* Set the grouping size. Grouping size is the number of digits between
* grouping separators in the integer portion of a number. For example,
- * in the number "123,456.78", the grouping size is 3.
- * <br>
+ * in the number "123,456.78", the grouping size is 3. Grouping size of
+ * zero designates that grouping is not used, which provides the same
+ * formatting as if calling {@link #setGroupingUsed(boolean)
+ * setGroupingUsed(false)}.
+ * <p>
* The value passed in is converted to a byte, which may lose information.
+ * Values that are negative or greater than
+ * {@link java.lang.Byte#MAX_VALUE Byte.MAX_VALUE}, will throw an
+ * {@code IllegalArgumentException}.
*
* @param newValue the new grouping size
* @see #getGroupingSize
* @see java.text.NumberFormat#setGroupingUsed
* @see java.text.DecimalFormatSymbols#setGroupingSeparator
+ * @throws IllegalArgumentException if {@code newValue} is negative or
+ * greater than {@link java.lang.Byte#MAX_VALUE Byte.MAX_VALUE}
*/
public void setGroupingSize (int newValue) {
+ if (newValue < 0 || newValue > Byte.MAX_VALUE) {
+ throw new IllegalArgumentException(
+ "newValue is out of valid range. value: " + newValue);
+ }
groupingSize = (byte)newValue;
fastPathCheckNeeded = true;
}
@@ -3254,8 +3269,8 @@
* these are presumed to be set in the positive pattern.
*
* @param pattern a new pattern
- * @exception NullPointerException if {@code pattern} is null
- * @exception IllegalArgumentException if the given pattern is invalid.
+ * @throws NullPointerException if {@code pattern} is null
+ * @throws IllegalArgumentException if the given pattern is invalid.
*/
public void applyPattern(String pattern) {
applyPattern(pattern, false);
@@ -3281,8 +3296,8 @@
* these are presumed to be set in the positive pattern.
*
* @param pattern a new pattern
- * @exception NullPointerException if {@code pattern} is null
- * @exception IllegalArgumentException if the given pattern is invalid.
+ * @throws NullPointerException if {@code pattern} is null
+ * @throws IllegalArgumentException if the given pattern is invalid.
*/
public void applyLocalizedPattern(String pattern) {
applyPattern(pattern, true);
@@ -3782,7 +3797,7 @@
* on this number format's symbols.
*
* @param currency the new currency to be used by this decimal format
- * @exception NullPointerException if {@code currency} is null
+ * @throws NullPointerException if {@code currency} is null
* @since 1.4
*/
@Override
@@ -3813,7 +3828,7 @@
*
* @param roundingMode The {@code RoundingMode} to be used
* @see #getRoundingMode()
- * @exception NullPointerException if {@code roundingMode} is null.
+ * @throws NullPointerException if {@code roundingMode} is null.
* @since 1.6
*/
@Override
@@ -3870,6 +3885,7 @@
* literal values. This is exactly what we want, since that corresponds to
* the pre-version-2 behavior.
*/
+ @java.io.Serial
private void readObject(ObjectInputStream stream)
throws IOException, ClassNotFoundException
{
@@ -3905,6 +3921,12 @@
// Didn't have exponential fields
useExponentialNotation = false;
}
+
+ // Restore the invariant value if groupingSize is invalid.
+ if (groupingSize < 0) {
+ groupingSize = 3;
+ }
+
serialVersionOnStream = currentSerialVersion;
}
@@ -4008,14 +4030,15 @@
/**
* The number of digits between grouping separators in the integer
- * portion of a number. Must be greater than 0 if
+ * portion of a number. Must be non-negative and less than or equal to
+ * {@link java.lang.Byte#MAX_VALUE Byte.MAX_VALUE} if
* {@code NumberFormat.groupingUsed} is true.
*
* @serial
* @see #getGroupingSize
* @see java.text.NumberFormat#isGroupingUsed
*/
- private byte groupingSize = 3; // invariant, > 0 if useThousands
+ private byte groupingSize = 3; // invariant, 0 - 127, if groupingUsed
/**
* If true, forces the decimal separator to always appear in a formatted
@@ -4343,5 +4366,6 @@
static final int MAXIMUM_FRACTION_DIGITS = Integer.MAX_VALUE;
// Proclaim JDK 1.1 serial compatibility.
+ @java.io.Serial
static final long serialVersionUID = 864413376551465018L;
}