diff --git a/src/java.base/share/classes/java/text/ChoiceFormat.java b/src/java.base/share/classes/java/text/ChoiceFormat.java
index 6f27137ea0d..510a1d37029 100644
--- a/src/java.base/share/classes/java/text/ChoiceFormat.java
+++ b/src/java.base/share/classes/java/text/ChoiceFormat.java
@@ -246,6 +246,17 @@ public class ChoiceFormat extends NumberFormat {
* @see #ChoiceFormat(String)
*/
public void applyPattern(String newPattern) {
+ applyPatternImpl(newPattern);
+ }
+
+ /**
+ * Implementation of applying a pattern to this ChoiceFormat.
+ * This method processes a String pattern in accordance with the ChoiceFormat
+ * pattern syntax and populates the internal {@code limits} and {@code formats}
+ * array variables. See the {@linkplain ##patterns} section for
+ * further understanding of certain special characters: "#", "<", "\u2264", "|".
+ */
+ private void applyPatternImpl(String newPattern) {
StringBuilder[] segments = new StringBuilder[2];
for (int i = 0; i < segments.length; ++i) {
segments[i] = new StringBuilder();
@@ -326,8 +337,8 @@ public class ChoiceFormat extends NumberFormat {
}
/**
- * {@return a pattern {@code string} that represents the the limits and formats
- * of this ChoiceFormat object}
+ * {@return a pattern {@code string} that represents the {@code limits} and
+ * {@code formats} of this ChoiceFormat object}
*
* The {@code string} returned is not guaranteed to be the same input
* {@code string} passed to either {@link #applyPattern(String)} or
@@ -396,7 +407,7 @@ public class ChoiceFormat extends NumberFormat {
* @see #applyPattern
*/
public ChoiceFormat(String newPattern) {
- applyPattern(newPattern);
+ applyPatternImpl(newPattern);
}
/**
@@ -411,11 +422,12 @@ public class ChoiceFormat extends NumberFormat {
* @see #setChoices
*/
public ChoiceFormat(double[] limits, String[] formats) {
- setChoices(limits, formats);
+ setChoicesImpl(limits, formats);
}
/**
* Set the choices to be used in formatting.
+ *
* @param limits contains the top value that you want
* parsed with that format, and should be in ascending sorted order. When
* formatting X, the choice will be the i, where
@@ -429,6 +441,14 @@ public class ChoiceFormat extends NumberFormat {
* and {@code formats} are not equal
*/
public void setChoices(double[] limits, String[] formats) {
+ setChoicesImpl(limits, formats);
+ }
+
+ /**
+ * Implementation of populating the {@code limits} and
+ * {@code formats} of this ChoiceFormat. Defensive copies are made.
+ */
+ private void setChoicesImpl(double[] limits, String[] formats) {
if (limits.length != formats.length) {
throw new IllegalArgumentException(
"Input arrays must be of the same length.");
@@ -441,16 +461,14 @@ public class ChoiceFormat extends NumberFormat {
* {@return the limits of this ChoiceFormat}
*/
public double[] getLimits() {
- double[] newLimits = Arrays.copyOf(choiceLimits, choiceLimits.length);
- return newLimits;
+ return Arrays.copyOf(choiceLimits, choiceLimits.length);
}
/**
* {@return the formats of this ChoiceFormat}
*/
public Object[] getFormats() {
- Object[] newFormats = Arrays.copyOf(choiceFormats, choiceFormats.length);
- return newFormats;
+ return Arrays.copyOf(choiceFormats, choiceFormats.length);
}
// Overrides
diff --git a/src/java.base/share/classes/java/text/MessageFormat.java b/src/java.base/share/classes/java/text/MessageFormat.java
index 89acc14cdb1..e03c1d3decf 100644
--- a/src/java.base/share/classes/java/text/MessageFormat.java
+++ b/src/java.base/share/classes/java/text/MessageFormat.java
@@ -371,7 +371,7 @@ public class MessageFormat extends Format {
* The constructor first sets the locale, then parses the pattern and
* creates a list of subformats for the format elements contained in it.
* Patterns and their interpretation are specified in the
- * class description.
+ * {@linkplain ##patterns class description}.
*
* @param pattern the pattern for this message format
* @throws IllegalArgumentException if the pattern is invalid
@@ -380,7 +380,7 @@ public class MessageFormat extends Format {
*/
public MessageFormat(String pattern) {
this.locale = Locale.getDefault(Locale.Category.FORMAT);
- applyPattern(pattern);
+ applyPatternImpl(pattern);
}
/**
@@ -389,7 +389,7 @@ public class MessageFormat extends Format {
* The constructor first sets the locale, then parses the pattern and
* creates a list of subformats for the format elements contained in it.
* Patterns and their interpretation are specified in the
- * class description.
+ * {@linkplain ##patterns class description}.
*
* @implSpec The default implementation throws a
* {@code NullPointerException} if {@code locale} is {@code null}
@@ -408,7 +408,7 @@ public class MessageFormat extends Format {
*/
public MessageFormat(String pattern, Locale locale) {
this.locale = locale;
- applyPattern(pattern);
+ applyPatternImpl(pattern);
}
/**
@@ -447,15 +447,29 @@ public class MessageFormat extends Format {
* The method parses the pattern and creates a list of subformats
* for the format elements contained in it.
* Patterns and their interpretation are specified in the
- * class description.
+ * {@linkplain ##patterns class description}.
*
* @param pattern the pattern for this message format
* @throws IllegalArgumentException if the pattern is invalid
* @throws NullPointerException if {@code pattern} is
* {@code null}
*/
- @SuppressWarnings("fallthrough") // fallthrough in switch is expected, suppress it
public void applyPattern(String pattern) {
+ applyPatternImpl(pattern);
+ }
+
+ /**
+ * Implementation of applying a pattern to this MessageFormat.
+ * This method processes a String pattern in accordance with the MessageFormat
+ * pattern syntax and sets the internal {@code pattern} variable as well as
+ * populating the {@code formats} array with the subformats defined in the
+ * pattern. See the {@linkplain ##patterns} section for further understanding
+ * of certain special characters: "{", "}", ",". See {@linkplain
+ * ##makeFormat(int, int, StringBuilder[])} for the implementation of setting
+ * a subformat.
+ */
+ @SuppressWarnings("fallthrough") // fallthrough in switch is expected, suppress it
+ private void applyPatternImpl(String pattern) {
StringBuilder[] segments = new StringBuilder[4];
// Allocate only segments[SEG_RAW] here. The rest are
// allocated on demand.
@@ -509,6 +523,7 @@ public class MessageFormat extends Format {
case '}':
if (braceStack == 0) {
part = SEG_RAW;
+ // Set the subformat
makeFormat(i, formatNumber, segments);
formatNumber++;
// throw away other segments
@@ -1592,7 +1607,7 @@ public class MessageFormat extends Format {
formats[offsetNumber] = newFormat;
}
- private static final int findKeyword(String s, String[] list) {
+ private static int findKeyword(String s, String[] list) {
for (int i = 0; i < list.length; ++i) {
if (s.equals(list[i]))
return i;
@@ -1609,8 +1624,8 @@ public class MessageFormat extends Format {
return -1;
}
- private static final void copyAndFixQuotes(String source, int start, int end,
- StringBuilder target) {
+ private static void copyAndFixQuotes(String source, int start, int end,
+ StringBuilder target) {
boolean quoted = false;
for (int i = start; i < end; ++i) {